c++ Primer

顶层const

1)int  * const p1 顶层const ;指针p1是常量指针,指向固定,可以通过它改变指向的内容;

2)const int * p2  底层const ;指针p2指向不固定,不可以通过它改变指向的内容,等同于指向常量对象,其实对象不一定是常量对象;

2、执行拷贝操作,左右对象必须具有相同的底层const,或者两个对象的数据类型必须能够转换;一般来说,非常量可以转换为常量,即const int* = int* 成立,const int &=int成立;

3、执行拷贝操作,常量是顶层const还是底层const区别明显;顶层const不受影响;即int =const int 成立;const int*=const int const *成立;

 函数默认

1)一旦某个形参被赋予了默认值,其后面的所有形参都必须有默认值;

2)多次声明同一个函数合法,不过在给定作用域中,一个形参只能被赋予一次默认实参,换句话说,后面的声明只能为那些没有默认值的形参添加默认实参,而且右侧所有形参必须有默认值;

string screen(int ,int ,char a='k');

string screen(int c=1 ,int d=2 ,char);

3)初始化时,只能省略尾部实参;重新指定实参的形参左侧必须都重新指定实参,因此让经常使用默认值的形参放在尾部;

构造函数与初始化

初始化:

1、可以通过构造函数初始化;

2、类内初始化:声明时,直接初始化:=或者{ }初始化;

inline内联函数 定义放在头文件中;

const 类内函数:函数体内的this指针也是const的;返回的类型也是const;

mutable可变数据成员,在const函数体中仍然可以修;改可变数据成员;

友元类成员函数,

1)定义顺序:

(1)友元类声明与定义,其中友元函数只能先声明,不能定义;

(2)主类声明与定义,包括对友元类函数的友元声明;

(3)友元函数的定义;因为此时才可以使用主类的成员;

2)对于类的重载函数,需要每个分别友元才有效;因为重载函数是不同的函数;

3)友元函数必须在类外声明,否则主类函数不可以调用友元函数;就算友元函数是在主类中声明和定义的,也不可以主类中别的函数调用;

 类的作用域:

1)在类的作用域外,类的不同成员或数据只能由类的对象、引用、指针使用成员访问运算符来访问;

2)类名以后为类的作用域;

3)在类外定义函数时,如果成员函数的返回类型是在类中定义的,需要在返回类型前加上类名+范围限定符;

4)解析名字查找原则

一般名字查找原则:

 类中名字查找原则:

 

上面的处理方式只适用于成员函数体中使用的名字,对于函数体返回类型或者其参数列表中使用的名字,都必须在使用前确保可见;

函数体中名字查找原则:

函数体中名字会隐藏类成员中的名字,不过可以通过加上类的名字或者显式地使用this指针来强制访问类成员;

原文地址:https://www.cnblogs.com/wllwqdeai/p/10307406.html