C语言和C++的区别

NULL宏定义的区别:

C语言中的NULL的宏定义是(void*)0,而C++中NULL的宏定义是0。

这也认证了C语言中的指针类型是可以进行隐式转换的,而C++中相比较就有着严格的类型检查,不允许void*类型的指针进行强制类型转换,因此只能进行强制转换

//C语言
void *p;
int *p1=p;         //可以进行隐式转换  

//C++
void *p;
int *p1=(int *)p;  //不能隐式转换,只能强制转换

由于NULL在C++中具有二义性,既可以代表空也可以代表0 , 这就会引出发生在函数重载的问题

为了解决这个问题,C++11引出的新特性nullptr,解决了这个痛处

void fun(char *p){
cout<<"调用指针参数的函数"<<endl;
}
void fun(int a){
cout<<"调用整数参数的函数"<<endl;
}
int main(){

fun(NULL);     //具有二义性(整数0,指针的空),编译器不知道调用哪一个
fun(nullptr);  //使用nullptr可以明确知道调用的是传参为指针类型的函数
return 0;
}
//输出
调用指针参数的函数

头文件的区别

C语言的文件带.h 例如:#include<stdio.h>

C++中的文件不需要带.h 例如:#include<iostream>

面向的区别

C语言是属于面向过程编程的

C++是属于面向对象编程的,三大特性分别是封装,继承,多态

封装:   将一个事物的属性(成员变量)与行为(成员函数)封装成一个类,并加以权限public,protected,private等三种去加以保护成员变量或成员函数,数据更安全

继承:将已有类进行扩展,也就是子类(派生类)去继承父类(基类),子类(派生类)具有父类(基类)的一切行为与属性,除了特意封装保护的数据,提高了代码的可拓展性

多态:首先必须存在继承关系,其次是父类的指针或引用指向子类的对象,子类需要重写父类的函数并且进行调用后,使得一个事物的不同对象有不同的表现。

变量的区别

C++拥有C语言未曾拥有的布尔变量(bool), bool变量会把非零的数变成true,把0变成false,经常用作函数的返回值或者是否判断是否经过某段代码(冒泡排序中的排序算法优化)

函数重载的区别

C语言中没有函数重载,而C++中有函数重载。

具体原因是因为编译器的命名方式不同。

C语言时编译器给函数命名时只是函数的名字

C++时编辑器给函数命名时不仅是函数的名字而且还带上参数,参数名和函数名之间用_分隔

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值