明智而审慎的使用private继承
来源:互联网 发布:淘宝代购化妆品真假 编辑:程序博客网 时间:2024/06/10 01:43
明智而审慎的使用private继承
下面是摘自《effective c++》3rd第条款39。
先说private继承的特点:1.也就是说,编译器不会讲一个private继承而来的派生类对象转化为一个基类对象。这意味着,priavte继承不再是is-a关系:
- class Person
- {
- protected:
- string name;
- };
- class Student:private Person
- {
- private:
- string schoolNumber;
- };
- void eat(const Person& p)
- {
- cout<<"eat"<<endl;
- }
- void study(const Student& s)
- {
- cout<<"study"<<endl;
- }
- int main()
- {
- Person p1;
- eat(p1);
- Student s1;
- study(s1);
- // eat(s1);错误
- return 0;
- }
因此,private继承意味着:根据某物实现。这与前面条款介绍的复合很类似。在大多数时候,我们应该使用复合,而不是private继承来实现这种功能。但是当有protected成员和虚函数牵扯进来的时候,我们又不得不用private继承。
其次,与复合相比,private可以使空基类的最优化。先看一个例子:
- //定义一个空基类
- class Empty{};
- class HoldsAnInt
- {
- private:
- int x;
- Empty e;//复合
- };
在vs2010中,sizeof(int)为4,sizeof(Empty)为1,sizeof(HoldsAnInt)为8这似乎有悖于我们学过常理:首先,类的大小取决于其数据成员的大小。sizeof(Empty)应该为0,但是由于在编译器会将它的大小设为1,而“齐位需求”会将它放大为1个int,所以,izeof(HoldsAnInt)为8。但是,如果使用的是private继承来实现,就不存在这种问题了:sizeof(HoldsAnInt)只有一个int的大小:4.
总之,private继承意味着根据某物实现。当派生类需要访问基类的的受保护成员或者重新定义虚函数时,我们才使用它。而且private继承可以是得空基类最优化,如果在开发中需要是得对象尺寸最小,那么也用得着它。
- 明智而审慎的使用private继承
- 明智而审慎的使用Private继承
- 条款39:明智而审慎的使用private继承
- 条款39:明智而审慎地使用private继承
- 条款39:明智而审慎地使用private继承
- item39:明智而审慎地使用private继承
- 条款39:明智而审慎地使用private继承
- 条款39:明智而审慎的适用private继承
- 条款40:明智而审慎的使用多重继承
- Item:明智而审慎的使用pirvate继承
- 《Effective C++》读书笔记之item39:明智而审慎地使用private继承
- Effective C++:条款39:明智而审慎地使用private继承
- Effective C++ Item 39 明智而审慎地使用 private 继承
- 读书笔记《Effective C++》条款39:明智而审慎地使用private继承
- [effectiv c++]条款39:明智而审慎地使用private继承
- 明智而审慎的使用形参
- 条款39、明智审慎地使用private继承
- 条款40:明智而审慎地使用多重继承
- Mybatis拦截器介绍及分页插件
- C语言实现面向对象
- java设计模式二(简单工厂模式)
- [leetcode] Largest Rectangle in Histogram——惊天动地的代码@
- hdu 3952
- 明智而审慎的使用private继承
- SQL Server中查找包含某个文本的存储过程
- 高管离职的25个原因
- HIT 1867 经理的烦恼
- forward和redirect的区别
- 数组结构体
- 用python写的一个mp3的tag解析
- 常用sublime快捷键
- 字符设备驱动之cdev_init()系列函数