组合类,就是多个类组合在一起用
会有三种情况:
1. 以值类型组合
示例:
class Int{};
class Object
{
int num;
Int val;
};
这种组合叫做强关联,内存模型简单理解为:
2. 以指针类型组合
示例:
class Int {};
class Object
{
int num;
Int* ip;
};
这种情况为弱关联,原因是指针 指向所设计的类型对象,可能还会指向其他的对象,内存模型为:
以引用类型组合
class Int{};
class Object
{
int num;
Int& val;
};
这种情况叫做强引用关联
示例
对于 以值类型组合的
class Int
{
private:
int value;
public:
Int(int x = 0) : value(x)
{
cout << "Create Int: " << this << endl;
}
Int(const Int& it) : value(it.value)
{
cout << "Copy Create Int: " << this << endl;
}
Int& operator =(const Int& it)
{
if (this != &it)
{
value = it.value;
}
cout << this << " = " << &it << endl;
return *this;
}
~Int() { cout << "Destroy Int: " << this << endl; }
};
class Object
{
private:
int num;
Int val;
public:
Object(int x, int y)
{
cout << "Create Object: " << this << endl;
num = x;
val = y;
}
~Object() { cout << "Destroy Object: " << this << endl; }
};
int main(void)
{
Object obja(10, 20);
return 0;
}
运行结果:
运行结果第三行的构造Int, 是因为在Object 的构造函数中,我们在拿一个整型在赋值给设计的Int类型,所以需要先构造一个Int类型,再通过等号运算符重载赋值给 val成员。
当把Object 的构造函数加上初始化列表,会有什么变化?
//构造函数
Object(int x, int y) : num(x), val(y)
{
cout << "Create Object: " << this << endl;
}
运行结果: