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的私有成员。
本文介绍了C++中类的构造函数如何进行隐式类型转换,通过示例展示了类AA如何通过单参数构造函数实现隐式转换。同时,讲解了类的前向声明,说明了不完全类型在程序中的限制及其应用场景。此外,还探讨了内部类和友元的概念,指出内部类默认为外部类的友元,允许在内部类中访问外部类的私有成员。
794

被折叠的 条评论
为什么被折叠?



