C语言与C++的基本区别

来源:互联网 发布:苹果手机怎么信任软件 编辑:程序博客网 时间:2024/05/01 11:34

C语言的优点:

1、  出色的移植行 2、访问硬件 3、运行效率高

注:所有的操作系统的内核都是用C语言实现的

C语言的缺点:

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

面向对象:C++的优点:

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

C语言+面向对象方法论:1、objective c2、c++

C++支持的编程规范:过程式、数据抽象、基于对象、面向对象式、函数式、泛型形式、模板元形式、值语义与对象语义

值语义可以拷贝与赋值,对象语义不可以进行拷贝和赋值

 

声明定义:

C++中强调语言的“实用性”,所有的变量都可以在需要的使用时再定义;

C语言中的都必须再作用域开始的位置定义;

 

Register

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

使用寄存器变量的注意点:

待声明的寄存器变量类型是CPU寄存器所能接受的类型,意味着寄存器变量是单个变量,变量长度应该小于寄存器长度。

不能对寄存器变量使用取地址符&,因为该变量是没有内存地址的;

尽量在大量频繁操作的时候使用寄存器变量,并且声明的寄存器变量个数尽可能的少。

Register关键字请求“编译器”将局部变量存储于寄存器中

   C语言中是无法取得register变量的地址;

C++依然支持register关键字

  C++编译器有自己的优化方式,不使用register也可能做优化;

  C++中可以取得register变量的地址;

  C++编辑器发现程序中需要取register变量的地址时,register对变量的声明变得无效;

  

Const

C++编辑器对const常量的处理

当碰见常量声明时在符号表中放入常量;

编译过程中若发现使用常量则直接以符号表中的值替换;

编译过程中若发现对const使用了extern或者&操作符时,则给对应的常量分配存储空间

注意:C++编译器虽然可能为const常量分配空间,但是不会使用其存储空间中的值;

 

动态内存分配

C++中的动态内存分配

C++中通过new关键字来进行动态内存申请

C++中的动态内存申请是基于类型进行的

Delete关键字是用于内存释放的

 

变量申请:                                 数组申请:

Type* pointer = new Type;                     Type*pointer = new Type[N];

//…….                                       //…….

Delete pointer;                                delete [] pointer;

 

New关键字与malloc函数的区别

New关键字是C++的一部分;malloc是由C库提供的函数

New以具体类型为单位进行内存分配,malloc只能以字节为单位进行内存分配

New在申请单个类型变量时可进行初始化,malloc不具备内存初始化功能

 

引用是给一个变量起别名

定义引用的一般格式

类型& 引用名=变量名;

例如:   int  a= 1;

         int& b = a;//b是a的别名,因此a和b是同一单元;

   注:定义引用时一定要初始化,指明该引用变量是谁的别名;

 

函数传参:按引用传递

引用传递方式是在函数定义时在形参前面加上引用取地址符&;

例如:void swap(int &a,int &b);

按值传递方式容易理解,但形参值的改变不能改变实参的值

地址传递的方式通过形参的改变使相应的实参改变,但程序容易产生错误,而且难以阅读;

引用作为参数对形参的任何操作都可以改变实参的相应数据,又使函数调用显得方便,自然。

引用作为返回值

引用的另一个作用就是用于返回引用的函数;

函数返回引用的一个主要目的就是可以将函数放在赋值运算符左边;

注:不能返回对局部变量的引用

 

引用访问一个变量是直接访问,指针访问一个变量是间接访问;

引用是一个变量的别名,本身不单独分配自己的内存空间,而指针有自己的内存空间;

引用一经初始化,就不能再引用其他变量,而指针可以

注:尽可能的使用引用,不得已时使用指针。

 

内联函数

Inline int max(int a,int b)

{

Return 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

0 0
原创粉丝点击