首页 / C++ / C++进阶--代码复用 继承vs组合
C++进阶--代码复用 继承vs组合
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++进阶--代码复用 继承vs组合,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1453字,纯文字阅读大概需要3分钟。
内容图文
![C++进阶--代码复用 继承vs组合](/upload/InfoBanner/zyjiaocheng/845/e567184df52a46d2907c5dce5870ae6a.jpg)
//############################################################################
/*
* 代码复用: 继承 vs 组合
*/
//继承实现代码复用
class BaseDog {
...
... // 公共的操作
};
class BullDog : public BaseDog {
... // 调用公共操作,执行更多任务
};
class ShepherdDog : public BaseDog {
... // 调用公共操作,执行更多任务
};
// 组合实现代码复用
class ActivityManager {
... // 公共操作
};
class Dog {
...
};
class BullDog : public Dog {
ActivityManager* pActMngr;
... // 通过pActMngr调用公共操作
};
class ShepherdDog : public Dog {
ActivityManager* pActMngr;
... // 通过pActMngr调用公共操作
};
/*
* 代码复用: 组合优于继承
*
* 1. 复用者和被复用者之间具有更少的代码耦合
* a. 子类自动继承父类所有的公有成员
* b. 子类可以访问父类的保护成员
* - 继承破坏了封装性
*/
/*
* 2. 动态绑定
* a. 继承在编译时绑定
* b. 组合可以在编译时绑定,也可以在运行时绑定
*/
class OutdoorActivityManager : public ActivityManager {...}
class IndoorActivityManager : public ActivityManager {...}
/*
* 3. 灵活的代码结构
*
* Dog ActivityManager
*
* BullDog OutdoorActivityManager
* ShepherdDog IndoorActivityManager
* ... ...
*/
// 组合的例子:只从纯虚类继承
class ActivityManager {
void eatBiscuit() { ... }
};
class Dog {
...
virtual void eatBiscuit() = 0;
};
class BullDog : public Dog {
ActivityManager* pActMngr;
...
void eatBiscuit() { pActMngr->eatBiscuit(); }
};
class ShepherdDog : public Dog {
ActivityManager* pActMngr;
...
void eatBiscuit() { pActMngr->eatBiscuit(); }
};
内容总结
以上是互联网集市为您收集整理的C++进阶--代码复用 继承vs组合全部内容,希望文章能够帮你解决C++进阶--代码复用 继承vs组合所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。