C++嵌入对象
2016-12-14 20:59
309 查看
嵌入对象
类的成员变量为用户自定义的类型时,这些成员变量称为嵌入对象。
示例:在Master中嵌入World
对象嵌入称做”has-a”关系,就上例来说” World has a Master”。
在World构造函数的前导为:
首先初始化_identifier,然后用_identifier初始化成员变量_master。因为_master是类的对象,所以调用类Master的构造函数,该构造函数需要一个值,这个值就是传递的_identifier。 类World的成员变量皆为常量成员,需要在前导中初始化,且在World生存期不变。
为什么可以用_identifier初始化_master?
在World的成员变量定义中 _identifier 在 _master 前面,所以_indentifier先被初始化,然后初始化_master。
(所以说,上面前导中的顺序,其实并不代表真正的_indentifer和_master初始化顺序。而成员变量定义的顺序,才是初始化前后的顺序。其实在普通的变量定义时,变量定义先后的顺序,就是代表初始化前后的顺序)
代码修改如下,输出结果一致。但是把两个变量定义的前后顺序修改后,输出结果不一致。
综上所述:例子中首先初始化成员变量,之后调用了Master的构造函数,之后调用World的构造函数。。当释放对象时,反过来,先调用World的析构函数,再调用Master的析构函数。
类的成员变量为用户自定义的类型时,这些成员变量称为嵌入对象。
示例:在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++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C++的template模板中class与typename关键字的区别分析
- C与C++之间相互调用实例方法讲解