|
面试例题1:假如鸟是可以飞的,那么鸵鸟是鸟么?鸵鸟如何继续鸟类?[美国某闻名分析软件公司2005年面试题]
解析:假如所有鸟都能飞,那鸵鸟就不是鸟!回答这种问题时,不要相信自己的直觉!将直觉和合适的继续联系起来还需要一段时间。
根据题干可以得知:鸟是可以飞的。也就是说,当鸟飞行时,它的高度是大于0的。鸵鸟是鸟类(生物学上)的一种。但它的飞行高度为0(鸵鸟不能飞)。
不要把可替代性和子集相混淆。即使鸵鸟集是鸟集的一个子集(每个驼鸟集都在鸟集内),但并不意味着鸵鸟的行为能够代替鸟的行为。可替代性与行为有关,与子集没有关系。当评价一个潜在的继续关系时,重要的因素是可替代的行为,而不是子集。
答案:假如一定要让鸵鸟来继续鸟类,可以采取组合的办法,把鸟类中的可以被鸵鸟继续的函数挑选出来,这样鸵鸟就不是“a kind of”鸟了,而是“has some kind of”鸟的属性而已。代码如下:
#include #include
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; } |
面试例题2:Find the defects in each of the following programs, and explain why it is incorrect.(找出下面程序的错误,并解释它为什么是错的。)[中国台湾某闻名杀毒软件公司2005年面试题]
#include
using namespace std; class Base { public: int val; Base() { val=1;}; };
class Derive: Base { public: int val; Derive(int i) { val=Base::val i; }; };
int main(int, char**, char**) { Derive d(10); cout<<d.Base::val<<endl<<d.val<<endl; return 0; } |
答案:把class Derive: Base改成class Derive:public Base。
解析:这是个类继续问题。假如不指定public,C 默认的是私有继续。私有继续是无法继续并使用父类函数中的公有变量的。
扩展知识(组合)
若在逻辑上A是B的“一部分”(a part of),则不答应B从A派生,而是要用A和其他东西组合出B。
例如眼(Eye)、鼻(Nose)、口(Mouth)、耳(Ear)是头(Head)的一部分,所以类Head应该由类Eye、Nose、Mouth、Ear组合而成,而不是派生而成。程序如下:
class Eye { public: void Look(void); };
class Nose { public: void Smell(void); };
class Mouth { public: void Eat(void); };
class Ear { public: void Listen(void); };
|
| 共2页: 上一页 1 [2] 下一页 |
评论加载中…
|