C与C++的区别,以及各自优缺点
C&C++的区别
1) C 是面向过程的语言,而 C++是面向对象的语言。
2) C和C++动态管理内存的方法不一样,C是使用malloc/free函数,而C++除此之外还有 new/delete 关键字。
3) 接下来就不得不谈到 C 中的 struct 和 C++的类,C++的类是 C 所没有的,但是 C 中的struct是可以在C++中正常使用的,并且C++对struct进行了进一步的扩展,使struct 在 C++中可以和 class 一样当做类使用,而唯一和 class 不同的地方在于 struct的成员默认访问修饰符是public,而class默认的是private。
4) C++支持函数重载,而C不支持函数重载,而C++支持重载的依仗就在于C++的名字修饰与C不同,例如在C++中函数int fun(int ,int)经过名字修饰之后变为 _fun_int_int ,而C是 _fun,一般是这样的,所以C++才会支持不同的参数调用不同的函数。
5) C++中有引用,而C没有。
6) 当然还有C++全部变量的默认链接属性是外链接,而C是内链接。
7) C 中用const修饰的变量不可以用在定义数组时的大小,但是C++用const修饰的变量可以(如果不进行&,解引用*的操作的话,是存放在符号表的,不开辟内存);
8) 当然还有局部变量的声明规则不同,多态,C++特有输入输出流之类等等。
C语言的优点:
1、出色的移植性2、访问硬件
3、运行效率高
注:所有的操作系统的内核都是用C语言实现的
注:所有的操作系统的内核都是用C语言实现的
C语言的缺点:
1、扩展性差2、复用性差
3、可维护性差
C++的优点:
1、扩展性好2、复用性好
3、可维护性好
C语言+面向对象方法论:
1. objectivec 2. c++
C++支持的编程规范:过程式、数据抽象、基于对象、面向对象式、函数式、泛型形式、模板元形式、值语义与对象语义
值语义可以拷贝与赋值,对象语义不可以进行拷贝和赋值
值语义可以拷贝与赋值,对象语义不可以进行拷贝和赋值
声明定义:
C++中强调语言的“实用性”,所有的变量都可以在需要的使用时再定义;C语言中的都必须再作用域开始的位置定义;
Register:被register修饰的变量叫做寄存器变量.
使用寄存器变量的注意点:
1.待声明的寄存器变量类型是CPU寄存器所能接受的类型,意味着寄存器变量是单个变量,变量长度应该小于寄存器长度。
2.不能对寄存器变量使用取地址符&,因为该变量是没有内存地址的;
3.尽量在大量频繁操作的时候使用寄存器变量,并且声明的寄存器变量个数尽可能的少。
4.Register关键字请求“编译器”将局部变量存储于寄存器中
2.不能对寄存器变量使用取地址符&,因为该变量是没有内存地址的;
3.尽量在大量频繁操作的时候使用寄存器变量,并且声明的寄存器变量个数尽可能的少。
4.Register关键字请求“编译器”将局部变量存储于寄存器中
5.C语言中是无法取得register变量的地址;
6.C++依然支持register关键字
7.C++编译器有自己的优化方式,不使用register也可能做优化;
8.C++中可以取得register变量的地址;
7.C++编译器有自己的优化方式,不使用register也可能做优化;
8.C++中可以取得register变量的地址;
9.C++编辑器发现程序中需要取register变量的地址时,register对变量的声明变得无效;
Const
C++编辑器对const常量的处理:
1.当碰见常量声明时在符号表中放入常量;
2.编译过程中若发现使用常量则直接以符号表中的值替换;
3.编译过程中若发现对const使用了extern或者&操作符时,则给对应的常量分配存储空间
注意:C++编译器虽然可能为const常量分配空间,但是不会使用其存储空间中的值;
2.编译过程中若发现使用常量则直接以符号表中的值替换;
3.编译过程中若发现对const使用了extern或者&操作符时,则给对应的常量分配存储空间
注意:C++编译器虽然可能为const常量分配空间,但是不会使用其存储空间中的值;
动态内存分配
C++中的动态内存分配:
1.C++中通过new关键字来进行动态内存申请
2.C++中的动态内存申请是基于类型进行的
3.Delete关键字是用于内存释放的
变量申请与删除:
Type*pointer=newType;
delete pointer;
数组申请与删除:
Type*pointer=newType[N];
delete[]pointer;
New关键字与malloc函数的区别
1.New关键字是C++的一部分;malloc是由C库提供的函数。2.New以具体类型为单位进行内存分配,malloc只能以字节为单位进行内存分配
3.New在申请单个类型变量时可进行初始化,malloc不具备内存初始化功能
C++内联函数&C宏函数
inline int max(inta,intb) { teturn a>b ? a : b; } #define max(a,b)(a)>(b)?(a):(b)
内联函数是在函数编译的时候,在调用的地方将代码展开,而宏则是在预处理时进行替换;
在C++中建议使用内联函数来替换带参数的宏
extern "C" 实现C和C++混合编程
#ifdef_cplusplus extern"c" { #endif ………… #ifdef_cplusplus } #endif