读书人

急一路面试题,有答案却不能编译通过!

发布时间: 2012-08-29 08:40:14 作者: rapoo

急!!!一道面试题,有答案却不能编译通过!求正解!!
面试例题1:如果鸟是可以飞的,那么鸵鸟是鸟么?鸵鸟如何继承鸟类?[美国某著名分析软件公司2005年面试题]

  解析:如果所有鸟都能飞,那鸵鸟就不是鸟!回答这种问题时,不要相信自己的直觉!将直觉和合适的继承联系起来还需要一段时间。

  根据题干可以得知:鸟是可以飞的。也就是说,当鸟飞行时,它的高度是大于0的。鸵鸟是鸟类(生物学上)的一种。但它的飞行高度为0(鸵鸟不能飞)。

  不要把可替代性和子集相混淆。即使鸵鸟集是鸟集的一个子集(每个驼鸟集都在鸟集内),但并不意味着鸵鸟的行为能够代替鸟的行为。可替代性与行为有关,与子集没有关系。当评价一个潜在的继承关系时,重要的因素是可替代的行为,而不是子集。

  答案:如果一定要让鸵鸟来继承鸟类,可以采取组合的办法,把鸟类中的可以被鸵鸟继承的函数挑选出来,这样鸵鸟就不是“a kind of”鸟了,而是“has some kind of”鸟的属性而已。代码如下:

C/C++ code
#include <iostream>#include <string>using namespace std;class bird                                    {                                             public:                                           void eat();                                       void sleep();                                     void fly();                                   };    class ostrich                                 {                                             public:                                           bird eat(){cout<<"ostrich eat";};                 bird sleep(){cout<<"ostrich sleep";};         };                                            int main()                                    {                                                 ostrich xiaoq;                                  xiaoq.eat();                                    xiaoq.sleep();                                  return 0;                                   }                                           


[解决办法]
不知道在说什么......
[解决办法]
还面试这样的题目,有趣
[解决办法]
C/C++ code
class ostrich                                 {                                             public:                                           bird eat(){cout<<"ostrich eat";};                 bird sleep(){cout<<"ostrich sleep";};         };
[解决办法]
玩哲学,那是得图灵奖的人做的事,程序员就不要玩哲学了。
[解决办法]
我是搞java的,这个题目是不是考的接口啊,因为继承的先天不足(父类有的子类都得有,父类改变子类强制接受)所以出现了接口,接口是单独把方法抽象出来,做成一个规则。比如上面说的鸵鸟是鸟,但没有飞的方法,所以鸟如果作为父类,就不能有飞的方法。只能有吃睡的功能。
把飞的功能抽象成接口,之后会飞的鸟实现这个接口,不会飞的鸟不实现这个借口!这样就满足题目了啊,鸵鸟继承了鸟类,但没有实现飞得接口,所以不能飞!哈哈哈哈OK
[解决办法]
探讨
玩哲学,那是得图灵奖的人做的事,程序员就不要玩哲学了。

[解决办法]
#include <iostream>
#include <string>
using namespace std;
class bird
{
public:
virtual void eat(){};
virtual void sleep(){};
virtual void fly(){};
};

class ostrich:public bird
{
public:
void eat(){cout<<"ostrich eat"; };
void sleep(){cout<<"ostrich sleep";};
};

int _tmain(int argc, _TCHAR* argv[])
{
ostrich xiaoq;
xiaoq.eat();
xiaoq.sleep();
return 0;
}
------解决方案--------------------


用virtual关键字

读书人网 >VC/MFC

热点推荐