初始化列表的位置:在构造函数中,既可以是构造也可以是拷贝构造。作用:是定义成员变量的地方。
格式如图所示。(:+ 成员名字+(参数))这里就是对B类型成员定义的地方。而B 下。只是整体定义了这个自定义变量。
静态成员变量与之不用不会在初始化列表,静态成员变量属于类的所有对象
所以他可以通过类域访问(如果是共有成员的话)
其次 如何定义与生命呢?在类中定义,在全局声明,声明的时候不需要加staic关键字
在计算类的大小的时候静态变量也是不会被算进去的。
我们这还看到爆了一个错误,无法在b类访问a的成员,怎么办呢?只要在A类任意位置加上friend + 函数的声明就可以了。
加上之后就没有报错了
这样这个函数就被称为友元函数,他是单向的,只是在b 类里这个函数可以访问a类的成员,但是在a类中不能访问b类的成员。怎么可以不使用友元也可以继续访问a中的成员呢?
对!使用 内部类
这样A类天生就是b的友元,与直接使用友元不同的是,如果类是私有的那么外部无法定义a类。
构造函数的隐士类型转化:如果一个类是当个成员变量类那么他就支持隐士类型转化
编译器会生成一个临时变量去拿1去构造一个x类型的变量再拷贝构造给m;编译器优化以后不会这样做他会大胆的拿1去直接构造m;这里针对第一种情况给出explict他的意思是明确的,加在构造函数前面禁止这样的隐式类型转化 。但是我们刚刚为什么会报错呢?因为隐式类型转化必须要自己提供构造函数且这个构造函数必须有形参。
可以看到编译器完成了类型转化。
阻止了隐式类型转化编译器报错。
最后一个匿名类变量。
可以作为函数的实参减少拷贝构造。