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.命名空间
同名的命名空间会自动合并