您的位置:首页 > 编程语言 > C语言/C++

C++嵌入对象

2016-12-14 20:59 309 查看
嵌入对象

类的成员变量为用户自定义的类型时,这些成员变量称为嵌入对象。

示例:在Master中嵌入World

#include<iostream>

class Master
{
public:
Master(int id):
_identifier(id)
{
std::cout << "Master for " << _identifier << "created" << std::endl;
}
~Master()
{
std::cout << "Master for " << _identifier << "destory" << std::endl;
}
private:
int _identifier;
};
class World
{
public:
World(int id) :_identifier(id), _master(_identifier)
{
std::cout << "hello from world" << _identifier << std::endl;
}
~World()
{
std::cout << "Goodbye from world" << _identifier << std::endl;
}
private:
const int _identifier;
const Master _master;
};

World theWorld(1);

int main()
{
World smallWorld(2);
return 0;
}


对象嵌入称做”has-a”关系,就上例来说” World has a Master”。

在World构造函数的前导为:

public:
World(int id) :_identifier(id), _master(_identifier)


首先初始化_identifier,然后用_identifier初始化成员变量_master。因为_master是类的对象,所以调用类Master的构造函数,该构造函数需要一个值,这个值就是传递的_identifier。 类World的成员变量皆为常量成员,需要在前导中初始化,且在World生存期不变。

为什么可以用_identifier初始化_master?

在World的成员变量定义中 _identifier 在 _master 前面,所以_indentifier先被初始化,然后初始化_master。

(所以说,上面前导中的顺序,其实并不代表真正的_indentifer和_master初始化顺序。而成员变量定义的顺序,才是初始化前后的顺序。其实在普通的变量定义时,变量定义先后的顺序,就是代表初始化前后的顺序)

代码修改如下,输出结果一致。但是把两个变量定义的前后顺序修改后,输出结果不一致。

public:
World(int id) : _master(_identifier),_identifier(id)


综上所述:例子中首先初始化成员变量,之后调用了Master的构造函数,之后调用World的构造函数。。当释放对象时,反过来,先调用World的析构函数,再调用Master的析构函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 嵌入对象