六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 21|回复: 0

条款35:确定你的public继承,模塑出"isa"的关系

[复制链接]

升级  51%

109

主题

109

主题

109

主题

举人

Rank: 3Rank: 3

积分
353
 楼主| 发表于 2013-2-4 20:22:25 | 显示全部楼层 |阅读模式
1,C++面向对象程序设计最重要的原则:
public继承意味着"是一种(isa)"的关系.
例如:
class D : public class B
你便告诉编译器,每一个型别为D的对象同时也是型别为B的对象.
只要是B对象派得上用场的地方,D对象也可以派上用场.

2,看一个实际和理论偏离的例子:
class Bird
{
public:
virtual void fly(); //鸟可以飞
...
};

class Penguin : public Bird//企鹅是一种鸟,
{
...
}
//但是是不能飞的.
可见"适用于所有软件"的完美设计是不存在的,最佳设计,取决于系统希望做什么事.
如果你的程序对于飞行一无所知,那么上述设计也不失为完美有效.

3,如果一定考虑飞行,可以这么做.
class Bird //不声明fly
{
public:
};

class FlyBird : public Bird//可以飞的鸟,
{
public:
virtual void fly();
...
}

class NonFlyBird : public Bird//不可以飞的鸟,
{
public:
... //没有声明fly
}

class Penguin : public NonFlyBird//企鹅是一种鸟,
{
...//没有声明fly
}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表