类的组合
类的组合的特点
两个类只要其一完蛋,就全完蛋了!
类的组合的定义
类的组合其实描述的就是在一个类里内嵌了其他类的对象作为成员的情况,它们之间的关系是一种包含与被包含的关系。简单说,一个类中有若干数据成员是其他类的对象。
如果在一个类中内嵌了其他类的对象,那么创建这个类的对象时,其中的内嵌对象也会被自动创建。因为内嵌对象是组合类的对象的一部分,所以在构造组合类的对象时不但要对基本数据类型的成员进行初始化,还要对内嵌对象成员进行初始化。
其实,组合(有时候叫聚合)是将一个对象(部分)放到另一个对象里(组合),它是一种 has-a 的关系。
代码示例
#include <iostream>
#include <string>
using namespace std;
class Cperson
{
private:
string name;
float mark;
public:
Cperson(string name, float mark)
{
this->name = name;
this->mark = mark;
}
~Cperson()
{
cout << "调用父类析构函数" << endl;
}
void ShowInf()
{
cout << this->name << "的分数为" << this->mark << "分" << endl;
}
};
class Cstudent
{
private:
char sex;
Cperson person; // 在类中调用其他类,必须先声明,此时无需初始化,初始化是在所在类的构造函数中进行的
public:
// 把所有构造函数全部集中在一起,用如下形式写入所在类的构造函数中
Cstudent(char sex, string name, float mark) :person(name, mark)
{
this->sex = sex;
}
~Cstudent()
{
cout << "调用子类析构函数" << endl;
}
void InitCperson(Cperson Person)
{
this->person = Person;
}
void ShowInf()
{
person.ShowInf();
cout << "该同学的性别为" << sex << endl;
}
};
int main()
{
Cstudent stud('f', "超级霸霸强", 99.99);
stud.ShowInf();
}
注意事项:
一开始先在类中定义被引用类的对象,此时无需初始化,初始化工作全权交由所在类的构造函数执行。
组合类的构造函数形式如下: