代码复用 -- 组合和继承
来源:互联网 发布:淘宝简约店招 编辑:程序博客网 时间:2024/06/05 10:00
软件复用实际上是代码的重复使用。
C语言中采用:函数 宏
C++中采用:继承 组合
某类以另一个类对象作数据成员,称为组合。
在逻辑上,如果类A是类B的一部分(a part of)或者说HAS-A(“有一个”),不要从A类派生出类B,而应当采用组合的方式。
《高质量C++编程指南》中“眼睛、鼻子、嘴巴、耳朵和头部”的范例很好地解释了组合的本质:眼睛、鼻子、嘴巴、耳朵分别是头部的一部分,头部并不是从眼睛、鼻子、嘴巴、耳朵继承来的。
如下实例:
/***********************/ //2016-03-09 14:02:57 /***********************/#include <iostream>using std::endl;using std::cout;class Eye{public: void look() { cout << "Eye.look()" << endl; }};class Nose{public: void smell() { cout << "Nose.smell()" << endl; }};class Mouth{public: void eat() { cout << "mouth.eat()" << endl; }};class Ear{public: void listen() { cout << "Ear.listen()" << endl; }};//组合方式:逻辑清晰,易扩展class Head{private: Eye _eye; Nose _nose; Mouth _mouth; Ear _ear;public: void look(){ _eye.look(); } void smell(){ _nose.smell(); } void eat(){ _mouth.eat(); } void listen(){ _ear.listen(); }};//继承方式,实际设计复杂,逻辑不清晰class Head2: public Eye, public Nose, public Mouth, public Ear{};int main(){ Head h; h.look(); h.smell(); h.eat(); h.listen(); cout << endl; Head2 h2; h2.look(); h2.smell(); h2.eat(); h2.listen(); cout << endl; return 0;}/* Eye.look() * Nose.smell() * mouth.eat() * Ear.listen() * * Eye.look() * Nose.smell() * mouth.eat() * Ear.listen() * * */
0 0
- 代码复用 -- 组合和继承
- 关于组合和继承 ---- 代码复用& 选择问题
- java 复用代码(组合与继承)
- Java 代码复用(组合与继承)
- 代码重用(继承和组合)
- 二十四、继承(一) 代码重用、继承方式、接口继承与实现继承、继承和重定义、继承和组合
- 用继承,组合复用代码及default的继承范围
- 用继承(inheritance)和组合(composition)设计
- 继承和组合
- 继承和组合
- 组合和继承
- 继承和组合
- 组合和继承
- 继承和组合
- java 组合和继承
- c++ 继承和组合
- 浅谈继承和组合
- 浅谈继承和组合
- Codeforces 650B Image Preview 【二分】
- Oracle中数据类型number(m,n)
- C语言模拟栈
- c/c++基础
- Magento使用手机号注册登录开发过程
- 代码复用 -- 组合和继承
- tableViewcell的左滑动显示删除置顶更多的效果
- 《how to write and publish a scientific paper》 Chapter 4
- Android开发中使用dos命令连接外接设备device运行android项目
- SVM算法
- 第2周项目 拿胖子说事计算标准体重
- 常用java正则表达式
- PopupWindow的使用和分析 弹出框的一种
- 对象引用与对象的区别