Effective C++ Item 32 确定你的 public 继承塑模出 is-a 关系
来源:互联网 发布:除了程序员还有能 编辑:程序博客网 时间:2024/05/16 12:21
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie
经验:"public继承"意味 is-a。适用于 base classes 身上的每一件事情一定也适用于 derived classes 身上,
因为每一个 derived classes 身上,因为每一个 derived class 对象也都是一个 base class 对象。
示例:
class Person {...};class Student: public Person {...};void eat(const Person &p); //任何人都会吃void study(const Student &s); //只有学生才到校学习Person p; //p 是人Student s; //s 是学生eat(p); //ok p是人eat(s); //ok s是学生,但学生也是(is-a)人study(s); //ok s是学生study(p); //error p不是学生
解析:上面的例子只对 public继承才成立。 对private, protected 继承不成立。
public 继承的问题示例
1.企鹅是一种鸟,鸟会飞,但企鹅不会飞
class Bird{public:virtual void fly(); //鸟可以飞};class Penguin: public Bird{ //企鹅是一种鸟};
如果你的软件系统现在以及未来不需要区别会不会飞的鸟的话,
这样的“双classes继承体系”就可以了,否则可以进行如下更改
class Bird{//... -->没有声明 fly 函数,鸟不一定会飞};class FlyingBird: public Bird{public:virtual void fly();};class Penguin: public Bird{//... -->没有声明 fly 函数};
2.class Square 应该以 public 形式继承 class Rectangle 吗?
class Rectangle{virtual void setHeight(int newHeight);virtual void setWidth(int newWidth);virtual int height() const; //返回当前值virtual int width() const;//...};void makeBigger(Rectangle &r) //这个函数用以增加 r 的面积{int oldHeight = r.height();r.setWidth(r.width() + 10); //为 r 的宽度加10assert(r.height() == oldHeight); //判断 r 的高度是否未曾改变}class Square: public Rectangle {...};Square s;//...assert(s.width() == s.height()); //这对所有正方形一定为真makeBigger(s); //由于s 是一种(is-a)矩形,所以我们增加其面积。assert(s.width() == s.height()); //对所有正方形应该仍然为真 --> 但事实上由于上一步 makeBigger函数的作用,这里已经不为真了
0 0
- Effective C++ Item 32 确定你的 public 继承塑模出 is-a 关系
- 《Effective C++》学习笔记条款32 确定你的public继承塑模出is-a关系
- Effective C++:条款32:确定你的public继承塑模出is-a关系
- 读书笔记《Effective C++》条款32:确定你的public继承塑模出is-a关系
- C++之确定你的public继承塑模出is-a关系(32)---《Effective C++》
- 《Effective C++》读书笔记之item32:确定你的public继承塑模出is-a关系
- Effective C++ 读书笔记 条款32:确定你的public继承塑模出is-a关系
- 再谈C++中的is-a关系(确定你的public继承塑模出is-a关系)
- 条款32:确定你的public继承塑模出is-a关系
- 条款32:确定你的public继承塑模出is-a关系
- 条款32:确定你的public继承塑模出is-a关系
- 条款32:确定你的public继承塑模出is-a关系
- 条款32:确定你的public继承塑模出is-a关系
- 条款32:确定你的public继承塑模出is-a关系
- 条款32:确定你的public继承塑模出is-a关系
- 条款32、确定你的public继承塑模出is-a关系
- 条款32 确定你的public继承塑模出is-a关系
- 条款32:确定你的public继承塑模出is-a关系
- HDU1564博弈
- WIN7 64位系统搭建WINCE6.0系统遇到的问题
- 2014-6-28任务完成情况
- 红外线多点触摸技术按钮制作须知
- DAG 上的动态规划(白书)
- Effective C++ Item 32 确定你的 public 继承塑模出 is-a 关系
- 【C/C++】在代码中使用windows性能监视器 .
- Binary Tree Postorder Traversal Java
- Raw-OS源码分析之fsm(有限状态机)
- java memcache 有效期
- C++ cout输出 字符型变量的地址
- Hadoop2.0.0-CDH4中NodeManager启动不了的解决方法!
- 题目21:包含min()方法的栈
- 当我在写程序的时候,我究竟在写些什么?