1.类型增强

①C中的const修饰的变量可以通过指针进行修改,例如:

const int a=10;
int *p=&a;  //将const int*强转为int*,编译不会报错;
*P=20;

 

而C++中的const是真正的const,不初始化将会进行报错,且不能讲const int * 隐式转换为int*;

例如:

char *p=malloc(100);//C语言中不会报错,C++中会报错
//在C++中需要使用强转才能使用:char* p=(char*)malloc(100);

2.C++中新增了bool类型

bool类型在C++中相当于使用了枚举进行了封装,但略不同于C语言的0为假非零为真。

enum{
  false,true  
}

 注:在C文件中使用enum 和struct需要结合typedef才能使用自定义类型去定义,否则要加上enum或者struct前缀;

C++中enum还可以替换宏去使用

3.表达式

C++中有些表达式可以做左值,而C语言中不可以,例如:

(a=b)=c;//C中error,C++中 true

4.C++的输入输出cin,cout

cin,cout与C中scanf,sprintf功能相同,cin,cout是属于类对象,而scanf,sprintf是函数;

5.C++的重载

参数个数类型顺序不同的同名函数。

匹配原则

①严格匹配

②隐式转换,例如:

double可以转换为int ,float类型
int类型可以转换为double,long

int func(long a ){}
int func(double a){}

如上两个函数,如果在函数调用的时候使用如下调用:
int func(10);
则可能会差生二义性,因为10既可以匹配double类型也可以匹配long类型,系统无法确定选择哪个函数,因此会发生报错s

③C++重载的原理,使用参数倾轧的方式生成函数名

6.操作运算符重载函数

class operator=(class student A,class student B);

7.默认参数

①从右向左默认,不能跳跃

②实参个数+默认参数个数>=形参个数

③如果重载和默认参数同时都可匹配会发生报错

8.引用

9.new与malloc

10.内联函数

11.C++的四种强转

static_cast:

对于隐式类型可以转化的即可使用此类型

reinterpret_cast:

指针转化;

int* p=(int*)(int(a)+1);等价于reinterpret_cast<int*> p=reinterpret_cast<int*>(int(a)+1);

建议使用C语言中的强转;

const_cast:

去const类型,只能用于指针和引用,例如:

const int a=10;
int b= const_cast<int>a;//error 只能对指针和引用去cosnt化
int* b= const_cast<int *>(&a);//true

注:此时如果妄图想要通过指针b去修改a的值,则会发生未定义的行为;例如:

*b=200;  //打印b的值为200,而a的值为10,并且a与b的地址可能相同;

如果是自定义类型倾轧const化后想要修改自定义类型的值,则自定义城管的变量可以被改变;例如:

struct A {int age};

const A*a=new A{10};
A&b=const_cast<A&>(&a);
b.age=20;
==>a.age=20.b.age=20;

12.命名空间

同名的命名空间会自动合并