C语言学习笔记(九)——IDE

这篇博客探讨了C++与C语言在内存管理、const修饰符使用、构造函数与析构函数等方面的差异,并介绍了如何在Visual Studio(VS)中创建MFC工程,包括编辑控件的设置、菜单和事件响应的实现,以及如何添加编译和运行功能。此外,还讲解了在C++中创建浏览器组件来输入网址并浏览网页的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了完成教学中的项目,需要了解一些C++的知识,也需要知道它和C的一些区别。
现在开始看一些它们的区别吧

1、首先在C++中,malloc是返回值是void
所以char *p=malloc(100);在C++中无法使用,需要强转:char *p=(char *)malloc(100)
其实在C++很多时候经常用 new,是C++的一个关键字,不需要包含任何头文件

char *p=new char[100];//在堆中分配100个char
delete []p;//释放一个数组,如果只有p那么只释放第一个char
char *p1=new char;//在堆中分配一个char
delete p1;//释放一个char
//c++语言可以兼容c语言的内存管理机制,但如果用malloc分配的内存就必须要free
如果用new分配的就必须用delete,不能混合使用

2、在c语言中,可用下面的方法绕过const

const int a=10;
int *p2=(int *)&a;
*p2=100;
printf("%d\n",a);

但在C++中不会修改a的值

3、在c语言中

void test (int a=10);//c语言中是非法的,C++是合法的,此时调用的时候还是根据输入的实参调用这个函数,但是如果缺省函数的实参,就会使用a=10.这个叫形参的缺省值
{
}
void test (int a,int b);
{
}
//在C语言中,这种全局的函数名字不允许相同,所以这是非法的,但在C++中是合法的,这叫重载,根据调用的时候参数的不同,自动调用相应的函数

4、当然最主要的区别还是C++是面向对象的= =

#include <stdio.h>
#include <string.h>
struct man
{
    char name[20];
    int age;
    void set_name(const char *p)//在结构体中可以使用函数
    {
        strcpy(name, p);
    }
    void set_age(int a)
    {
        age = a;
    }
    const char *get_name()
    {
        return name;//在结构体中,它就不在内存中,具体在堆在栈中应该看定义它的语法
    }
    int get_age()
    {
        return age;
    }
    man()//没有返回值,名字和结构名字相同,这叫构造函数
    {
        printf("hello world\n");
    }
    man(const char *p, int a = 0)//构造函数的重载
    {
        age = a;
        strcpy(name, p);
    }
    ~man()//析构函数
    {
        printf("~man\n");
    }
};

int main01()
{
   //man m;//前面不用加struct
   //m.set_name("Tom");//C++一般这样设置,而不是在这里调用strcpy
   // m.set_age(20);
   // printf("%s, %d\n", m.get_name(), m.get_age());//虽然m在栈中,但此时m并未消失,m.get_name()地址是有效的
  //如果想把m放到堆中 
    man *m = new man;//这里结构成了堆里面一个变量
    m->set_name("tom");//因为m是指针,所以需要改成->
    m->set_age(20);
     printf("%s, %d\n", m->get_name(), m->get_age());
    delete m;
    man m1;//结构成了栈里面一个变量了,这里调用的是没有参数的构造函数
    man m2("abc", 100);// 明确的调用有const char *参数的构造函数
    printf("%s, %d\n", m2.get_name(), m2.get_age());
    man *m3 = new man("张三", 30);
    printf("%s, %d\n", m3->get_name(), m3->get_age());
    delete m3;
    return 0;

}


struct A//这里分析构造和析构的行为
{
    int age;
    A(int a)
    {
        age = a;
        printf("A, %d\n", a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值