Effecitve 阅读笔记--private继承与组合
来源:互联网 发布:前端工程师知乎 编辑:程序博客网 时间:2024/05/17 06:22
Effective 条款38和39都是关于has a关系的讨论.
1.private继承则是其中的一种has a 关系. .private继承的语义是implements-in-terms-of. 如果你让一个类private继承另外一个类,你的用意是为了采用父类一些已有的实现,不是因为两个类在任何观念上的关系.private继承纯粹只是一种实现技术,(这就是为什么继承自一个private base会把base class中的所有东西都丢到parivate中去,因为他们仅仅是实现的细枝末节不需要用户知道).private 继承意味着实现被继承,而丢掉了借口部分.
2.尽量以public继承加上组合来代替private继承.
#include <iostream>#include <unistd.h>using namespace std;class Timer{ public: explicit Timer(int tickFre):tick_(tickFre),running_(false){ } virtual void onTick() const{ cout<<"i am triggered"<<endl; } void start(){ cout<<"the timer is started"<<endl; running_ = true; while(1){ sleep(tick_); onTick(); if(!running_) break; } } void stop(){ running_ =false; } private: bool running_; int tick_;};class Widget{ public: Widget(int tickFre):timer(tickFre){ } void WidgetStart(){ timer.start(); } private: class WidgetTimer:public Timer{ public: explicit WidgetTimer(int fre):Timer(fre){}; virtual void onTick() const{ cout<<"widget triggered"<<endl; } }; WidgetTimer timer;};int main(){ Widget w(5); w.WidgetStart();}
当然也可以使用private 继承来完成,书中给出了不使用private继承 而使用public继承加上组合来代替的原因,
但如果需要override的函数位于Timer的protected 中,那么只能够使用private继承来完成.
阅读全文
0 0
- Effecitve 阅读笔记--private继承与组合
- 组合与继承 学习笔记
- 高质量C/C++编程指南 阅读笔记(五)类的继承与组合
- <<Effecitve C++>>笔记2
- private继承与复合
- private继承与public继承
- java学习笔记<六>继承与组合
- java 继承与组合学习笔记
- C++:private继承与public继承
- C++:private继承与public继承
- C++:private继承与public继承
- 论组合与继承
- 组合与继承
- 继承与组合
- 组合与继承
- 组合与继承
- 继承与组合
- 组合 继承 与 代理
- 特殊音拼读
- php在web服务器中的工作原理
- thinkphp图片上传+validate表单验证+图片木马检测+缩略图生成
- thinkphp的where方法的使用
- jQuery筛选
- Effecitve 阅读笔记--private继承与组合
- Jquery事件
- HTML的学习笔记
- jquery的ajax异步请求上传完图片之后会有页面跳转和刷新如何解决?
- Thinkphp图片水印和文字水印
- BI工具分析
- Kinect V2开发(4)抠图
- Spring Boot | Cloud 的全局异常——@ControllerAdvice注解不起作用
- Thinkphp模板中函数的使用