C++ 组合

如果鸟是可以飞的,那么鸵鸟是鸟么?鸵鸟如何继承鸟类?[美国某著名分析软件公司2005年面试题]
      解析:如果所有鸟都能飞,那鸵鸟就不是鸟!回答这种问题时,不要相信自己的直觉!将直觉和合适的继承联系起来还需要一段时间。
      根据题干可以得知:鸟是可以飞的。也就是说,当鸟飞行时,它的高度是大于0的。鸵鸟是鸟类(生物学上)的一种。但它的飞行高度为0(鸵鸟不能飞)。
      不要把可替代性和子集相混淆。即使鸵鸟集是鸟集的一个子集(每个驼鸟集都在鸟集内),但并不意味着鸵鸟的行为能够代替鸟的行为。可替代性与行为有关,与子集没有关系。当评价一个潜在的继承关系时,重要的因素是可替代的行为,而不是子集。
      答案:如果一定要让鸵鸟来继承鸟类,可以采取组合的办法,把鸟类中的可以被鸵鸟继承的函数挑选出来,这样鸵鸟就不是“a kind of”鸟了,而是“has some kind of”鸟的属性而已。代码如下:

#include<string>
#include<iostream>
using namespace std;
class bird
{
public:
 void eat()
 {
  cout<<"bird is eating"<<endl;
 }
 void sleep()
 {
  cout<<"bird is sleeping"<<endl;
 }
void fly();
};

class ostrich
{
public:
 eat()
 {
  smallBird.eat();
 }
 sleep()
 {
  smallBird.sleep();
 }
private:
 bird smallBird;

};

int main()
{
ostrich xiaoq;
xiaoq.eat();
xiaoq.sleep();
return 0;
}

posted on 2011-08-02 20:05  原来...  阅读(3272)  评论(0编辑  收藏  举报

导航