1.基本概念
C++是一种由C语言扩展升级而产生的计算机高级程序设计语言,最早于1979年由本贾尼·斯特劳斯特卢普在AT&T贝尔工作室研发。
C++既可以进行C语言过程化的程序设计,又可以进行基于对象的程序设计。
2.特殊属性(in comparison with “C”)
1.命名空间
为了解决在代码开发的过程中不可避免的函数名或变量名重名的问题,引入了“命名空间”的概念。其基本思想就是为同名的函数或变量增加一个归属,其命名方式类似于结构体。
命名方法:(例)
namespace s1
{
a=10;
int add(int a,int b);
};
使用方法:(例)
s1::a//-------->直接访问
using namespace s1;//------>下面直接使用s1内的变量即可
2.引用
在C语言中,访问或修改某一内存空间中的内容通常借助指针来实现,而指针变量本身是需要占据一定的内存空间的,为什么不直接使用“变量”呢?C++引入了“引用”的概念。
如何引用?
int a;
int& b = a;
EX—引用 与 指针 的区别:
(1)概念上讲,引用是C++里面的概念,而指针来源于C语言。
(2)原理上讲,引用(reference)是对目标变量取别名,以一个’&’符号来表示索引到目标变量的空间,引用的变量不占内存;而指针是新建一个指向目标变量的指针变量,存放目标变量在内存空间当中的地址,该指针变量占据空间。
(3)使用层面上讲,引用变量在定义时务必初始化且不能再次更改其目标对象;而指针在定义时可以不进行初始化(一般建议初始化为NULL),且后续在不对其常量化的情况下可以任何更改其指向。
3.函数重载
在C语言(对应的编译器)中,函数名有着严格的限定,一个函数名对应一片地址空间,不同的函数名对应不同的地址空间,
而在C++(对应的编译器)中,针对“函数”这个概念的特点(函数由返回值、函数名、参数列表三个部分组成),编译时会结合参数列表对所有的函数名进行重载(overload)。在这种处理下,只要函数的参数列表不同,就可以被编译器视为不同的函数。
Linux下g++编译时通过nm命令查看对函数的处理结果:
例:
int reduce(int a,int b);------->_Z3reduceii
void infomalloc(int size);-------->_Z3infomalloci
4.参数默认值
为了进一步增强C++中函数调用的灵活性,引入了“参数默认值”的设定,可以通过为函数参数设定默认值来控制调用该函数时传入的参数个数,进而达到在一定程度上扩展函数的适用场景。
使用方法:
例:
一函数int multi(int a,int b,int c);
若不设定参数的默认值,则只能在三个参数都激活的情况下去使用它。
通过为其中的某一个或多个设定默认值,就可以做到在只使用指定形参的情况下去调用该函数。
int multi(int a,int b,int c=0); //使用参数a,b
int multi(int a,int b=0,int c=0); //只使用参数a
int multi(int a=0,int b=0,int c=0); //全部设定默认值
EX—默认实参必须在形参列表的结尾
基于参数传递从左向右依次传递的特性,函数默认参数的设定必须从形参列表的最右侧开始连续设定。
5.动态申请内存空间
区别于C中使用函数来向内核申请空间的方式,C++中使用运算符”new”来向内核申请内存,使用起来更加简单顺手。
EX—new 和 malloc 的区别:
(1)概念上讲,两者都是动态申请内存空间的方式,”new”是C++中用以动态申请内存空间的运算符,而”malloc”是来源于C语言<stdlib.h>库中的函数。
(2)使用层面上讲,new更简单,new只需要指明所开辟的数据类型即可,不需要告诉编译器需要开辟的具体空间大小,而malloc需要指明具体的内存大小;
另外new的结果不需要进行强制类型转换,而由于malloc的返回值是void*类型,所以需要对返回值进行强制类型转换。