`
kmplayer
  • 浏览: 497049 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多
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
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics