1、类中单参数构造函数隐式类型转换
class AA{
public:
AA(int b){
_b = b;
}
void Print(){
cout << _b << endl;
}
private:
int _b;
};
int main(){
AA a = 10;
a.Print();
return 0;
}
上述main
中初始化对象a
的方式;常规初始化是AA a(10)
,这里的写法隐式类型转换,会先构造一个匿名对象然后拷贝构造,等价于AA a = AA(10)
2、声明一个类
class BB; //直接在前面加这句话,就是声明类,跟以前声明函数一样
注意: class AA;
这个声明,有时候被称为前向声明(forward declaration),在程序中引入了类类型的AA
。在声明之后,定义之前,类AA
是一个不完全类型(incompete type),即已知AA
是一个类型,但不知道包含哪些成员。
不完全类型只能以有限方式使用,不能定义该类型的对象,不完全类型只能用于定义指向该类型的指针及引用,或者用于声明(而不是定义)使用该类型作为形参类型或返回类型的函数。
3、内部类+友元
class AA{
public:
AA(int a = 0)
:_a(a)
{
}
class BB{
public:
BB(int b = 1){
_b = b;
}
void Print(AA& a){
cout << a._a << endl;
}
private:
int _b;
};
private:
int _a;
};
含有内部类的类计算大小时只计算当前类中成员变量的大小,如sizeof(AA)
计算的大小只是AA
的成员变量_a
的大小。
内部的类默认为当前类的友元,如BB
就默认是AA
的朋友,在BB
中,可以通过传递AA
的对象访问AA
的私有成员。