·inline函数
函数若在class内定义完成,便自动成为inline函数候选人。
函数前面用关键字 声明该函数为inline函数时,是告诉编译器尽量把它编译为inline函数,是否成为inline函数由编译器决定。
·access level(访问级别):
public、private(默认访问权限)、protected。
struct的默认访问权限是public.
·constructor( ctor, 构造函数)
下面是complex类中的构造函数complex
complex (double r = 0, double i = 0)
: re (r), im (i)
{}
解析:(double r = 0, double i = 0)为default argument(默认实参)
re (r), im (i) 为initialization list(初始化列表,初值列)
对成员变量赋值还可以使用赋值语句,如:
complex (double r = 0, double i = 0) { re = r; im = i;} //assignments(直接赋值)
NOTE: 通过初始化列表,在对象初始化时,对成员变量赋值一次。
C++规定,对象的成员变量初始化动作发生在进入构造函数本体之前,更好的做法是使用成员初值列替换赋值动作。
初始化列表可以不必调用默认构造函数来进行初始化,而是直接调用拷贝构造函数类初始化。
初始化方法:
初始化列表的初始化方法:调用拷贝构造函数。
直接赋值的初始化方法:对成员变量赋值两步,先调用默认构造函数赋值, 再调用构造函数赋值
综上,初始化列表的初始化方法效率更高。
·构造函数可以有很多个——overloading(重载)
下图中有构造函数和real函数的重载,注意图片中右下角的real函数编译后的实际名称说明:
上图中的real函数重载可以同时存在,但是上图中的两个COMPLEX构造函数有冲突不可以同时存在,原因是因为complex的 1 构造函数中的参数有默认值0,所以对于使用complex创建对象的语句 complex c1(); 和complex c2; 上图中的构造函数1和构造函数2均可,编译器不知道该选择哪一个,所以图片中不允许同时存在complex的两个构造函数。
·constructor 构造函数被放在private区
构造函数放在private区,不可以创建对象,那么它的用途呢?
设计模式:Singleton
class A {
public:
static A& getInstance();
setup() {...}
private:
A();
A(const A& rhs);
...
}
A& A::getInstance()
{
static A a;
return a;
}
通过 A::getInstance().setup();创建对象。