有成员对象的类叫 封闭(enclosing)类。
任何生成封闭类对象的语句,都要让编译器明白,对象中的成员对象,是如何初始化的。
具体的做法就是: 通过封闭类的构造函数的初始化列表。
封闭类的对象,如果是用默认复制构造函数初始化的,那么它里面包含的成员对象,也会用复制构造函数初始化。
举例:Big & Base 封闭类问题
http://cxsjsxmooc.openjudge.cn/2020t3spring3/002/
#include <iostream>
#include <string>
using namespace std;
class Base {
public:
int k;
Base(int n) :k(n) { }
};
class Big
{
public:
int v;
Base b;
Big(int n):v(n),b(n) { }
Big(const Big & a):v(a.v),b(a.v) { }
};
int main()
{
int n;
while (cin >> n) {
Big a1(n);
Big a2 = a1;
cout << a1.v << "," << a1.b.k << endl;
cout << a2.v << "," << a2.b.k << endl;
}
}