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语言的缺点:

1、扩展性差
2、复用性差
3、可维护性差

C++的优点:

1、扩展性好
2、复用性好
3、可维护性好

C语言+面向对象方法论:
  1. objectivec  2. c++
 
C++支持的编程规范:过程式、数据抽象、基于对象、面向对象式、函数式、泛型形式、模板元形式、值语义与对象语义
值语义可以拷贝与赋值,对象语义不可以进行拷贝和赋值
 

声明定义:

  C++中强调语言的“实用性”,所有的变量都可以在需要的使用时再定义;
  C语言中的都必须再作用域开始的位置定义;
 

Register:被register修饰的变量叫做寄存器变量.

 
使用寄存器变量的注意点:
  1.待声明的寄存器变量类型是CPU寄存器所能接受的类型,意味着寄存器变量是单个变量,变量长度应该小于寄存器长度。
  2.不能对寄存器变量使用取地址符&,因为该变量是没有内存地址的;
  3.尽量在大量频繁操作的时候使用寄存器变量,并且声明的寄存器变量个数尽可能的少。
  4.Register关键字请求“编译器”将局部变量存储于寄存器中
  5.C语言中是无法取得register变量的地址;
  6.C++依然支持register关键字
  7.C++编译器有自己的优化方式,不使用register也可能做优化;
  8.C++中可以取得register变量的地址;
  9.C++编辑器发现程序中需要取register变量的地址时,register对变量的声明变得无效;
 

Const

C++编辑器对const常量的处理:
  1.当碰见常量声明时在符号表中放入常量;
  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
 
posted @ 2021-08-29 21:56  默行于世  阅读(4324)  评论(0编辑  收藏  举报