C语言和C++语言有什么不同和相同,这里将一一细说
C++是从C语言发展过来的,所以C++是完全兼容C语言的语法。具体如下图:
但C还是一 门独立的语言,因为很多嵌入式都要用C语言编程,C语言还是有它自己的运用领域的。
编程方式:
C语言是过程式的编程,一个函数调用一个函数
C++语言是面向对象的编程语言,除了面向象方式,还有模板编程。
头文件:
C语言中所有的头文件都带后缀 .h(比如stdio.h)
C++中有系统提供的头文件不带后缀 .h,但用户自己编制的头文件可以有后缀 .h。
struct结构:
C语言中struct只是用来定义结构的,将单个类型组成一个新类型,方便编程。
C++语言中struct跟class类的功能是一样的,可以有访问控制符,可以有构造、析构、操作符重载等。与class类唯一区别在于,class默认访问控制符是prative私有的,struct默认访问控制符是public公有的。
函数重载:
C语言没有函数重载,所以每个函数名都要取不一样名字,取名就变成一件麻烦的事情。
C++语言有函数重载,函数如果重名,参数不一样就可以。比较好的解决同一功能有两个函数名问题。
分配内存:
C语言用malloc/free两个函数,
1 2 3 |
int* a = (int*)malloc(sizeof(int)*10); ........... free(a); |
C++语言用操作符new/delete
1 2 3 |
int* a = new int[10]; .......... delete(a); |
从上面可以看出用new,比用malloc更方便,用malloc要自己计算内存大小,还要自己强制转换指针。用new分配内存可以更专注自己要解决的问题,而不用如而实现内存分配。
字符串:
C语言中的字符串都是char*,
1 |
char* pstr = "Hello world"; |
C++语言中字符串可以用string类型
1 |
string str = "Hello world"; |
用string类型时会更方法,string有很多成员函数可以使用,更重要的是str是一个类类型,pstr是一个指针,相对来讲str会更安全。
命名空间:
C语言中没有命名字间,名字冲突解决办法就是不要取重名。
C++语言中有命名空间,用关键字namespace定义
1 2 3 4 5 6 7 |
namespace Test{ ......... }; using namespace Test; |
关于bool类型:
C语言中只有C99版以后才有bool类型,有时用比较老的C编译器会发现bool类型是未定义,就是这个原因。C语言中bool类型定义头文件在<stdbool.h>
C++语言中bool是内置类型。
类型转换:
C语言都是强制类型转换,比如doubl转成int
C++语言转换可以用static_cast、dynamic_cast、const_cast、reinterpret_cast
以上只是列举了一些区别,还有就没有一一列举出来。要说的是,C++语言编程是面向对象的,因为要兼容C语言所以也可以过程式编程。C++语言的每一次更新都将离C语言更远,C++应该会向面向对象、模板元编程、安全可靠、效率方向发展,而C语言应该会一直专注在硬体领域做到极致。