条款32 确定你的public继承塑模出is-a关系
来源:互联网 发布:淘宝的选购热点 编辑:程序博客网 时间:2024/04/30 02:08
结论:
"public继承"意味is-a。适用于base class身上的每一件事情一定也适用与derived class身上,因为每一个derived class对象也都是一个base class对象。
public继承意味着“is-a”关系。它的意思是:如果B以public形式继承自A,那么B类型对象肯定是一个A对象,反之不成立。A是B的一种抽象,B是A的特例。任何使用A的地方,都能使用B。
public继承意味着“is a”(是一种)关系:
(1)任何一个继承类对象也是一个基类对象;
(2)任何可以出现基类对象的地方也可以出现一个继承类对象(例如函数的实参);
(3)任何一个可以在基类对象上所做的操作,同样也可以在派生类上操作(结果可能是设计者想要的,也可能是不想要的):“可以”是指编译器不报错,但是如果它违反了设计者的意愿,应当采用“让编译器报错”的方式来显示错误,这比“运行时报错”要好。
class Person {...};class Student: public Person {...};
C++领域,任何函数如果期望获得一个类型为Person(或Person的指针或引用)的实参,都也愿意接受一个Student对象(或Student对象的指针或引用):
void (const Person & p); //任何人都会吃void study(const Student& s); //只有学生会在校学习Person p;Student s;eat(p); //没问题,所有人都可以吃eat(s); //没问题,学生是人,可以吃饭study(s); //没问题,学生在校学习study(p); //错误,p不是学生
但是下面的例子就不适合用public继承,因为它不是Is-a关系:
企鹅是一种鸟,这是事实;鸟可以飞,这也是事实。但是企鹅不会飞。那么:
class Bird {public: virtual void fly(); //鸟可以飞};class Penguin: public Bird { //企鹅是一种鸟 ...};那么,当Penguin类继承了Bird,是否就意味这企鹅可以继承fly函数,这显然错误。
关于penguin和bird类之间的关系修改以及存在问题参考文章:条款32:确定你的public继承塑模出is-a关系
0 0
- 条款32:确定你的public继承塑模出is-a关系
- 条款32:确定你的public继承塑模出is-a关系
- 条款32:确定你的public继承塑模出is-a关系
- 条款32:确定你的public继承塑模出is-a关系
- 条款32:确定你的public继承塑模出is-a关系
- 《Effective C++》学习笔记条款32 确定你的public继承塑模出is-a关系
- 条款32:确定你的public继承塑模出is-a关系
- Effective C++:条款32:确定你的public继承塑模出is-a关系
- 条款32:确定你的public继承塑模出is-a关系
- Effective C++ 读书笔记 条款32:确定你的public继承塑模出is-a关系
- 条款32、确定你的public继承塑模出is-a关系
- 条款32 确定你的public继承塑模出is-a关系
- 读书笔记《Effective C++》条款32:确定你的public继承塑模出is-a关系
- 条款32:确定你的public继承塑模出is-a关系
- 第六部分 继承与面向对象设计 条款32:确定你的public继承是is-a关系
- 条款32:确定人的public继承塑模出来is-a关系
- 再谈C++中的is-a关系(确定你的public继承塑模出is-a关系)
- Effective C++ Item 32 确定你的 public 继承塑模出 is-a 关系
- lintcode:Scramble String
- 数数
- JAVA原理学习
- VB 常用函数
- ArrayList 的线程安全问题
- 条款32 确定你的public继承塑模出is-a关系
- C++当中随机数的产生
- 看懂这道题,就学会指针了
- Python使用easy_install安装第三方插件、安装包
- Qt中Ui名字空间以及setupUi函数的原理和实现
- uniq
- easyui中的datagrid下垂直滚动条不显示
- iOS开发 - 百度地图后台持续定位
- wins与dns的区别