C++基础总结1
1、C++中命名空间的作用
变量或数据类型重名时,可以定义不同命名空间(作用域),然后再引用变量或数据类型。
namespace spaceA{
int abc;
}
可以这样引用变量spaceA::abc,using spaceA::abc,using namespace spaceA。
2、C语言中的三目运算符返回的是值拷贝,所以不能作为左值,但是C++中的三目运算符可以作为左值,因为它返回的是引用。
3、const int a = 10,这里的a一定要初始化,int *p = (int*)&a(强制把a的地址转换为指针),如果有*p = 20这个赋值操作,此时a值不变,
因为a是常量,int *p = (int*)&a时取的是一个临时地址temp,*p = 20这个赋值操作修改的只是这个临时地址的内容而已。
4、引用的特点
引用一定要初始化;
引用本质是变量的别名,是常指针;
不在栈上开辟空间,在常量区;
一定程度上可以取代指针。
5、引用作为函数返回值时,如果返回的是函数内部局部变量的引用,那么此时是不可以作为左值的。
对常量引用时,需要加const修饰,如const int & a = 40 。
6、默认参数的顺序是从右到左的,int func(int a,int b,int c=10){};还有一种占位符参数(亚元),int func(int a,int){},最后的int就是占位参数,传参时必须传,但在函数体中未使用。
7、函数重载,返回值不同不构成重载,int func(int a){}与int func(int a,int){}也会构成重载,传一个参数就调用第一个,也不会构成歧义;
但是有默认参数时,调用时就可能构成歧义,int func(int a){}与int func(int a,int b=10){},调用传一个参数时就出现了歧义,所以函数重载时不建议写默认参数。
精准匹配实参,如果存在参数类型不匹配(如需要double,传进的是float),那么就会进行类型转换进行实参匹配(向上转型),如果找不到对应的转换类型,匹配失败。
8、函数指针
三种函数指针形式:
9、类与结构体
C++类中可以有成员函数(方法),成员的默认访问权限为private;
C++中结构体中也可以有成员函数,唯一的区别是成员的默认访问权限为public;
但是C语言中的结构体是不可以有成员函数的。
10、内联函数
是为了解决C语言中的宏函数问题,因为宏函数是预处理器处理,所以没有参数的语法检查(编译器处理语法检查)。
11、面向过程与面向对象
面向过程,是函数(方法)发生驱动;
面向对象,是对象发生驱动,函数(方法)属于对象。