2006-09-14

程序员面试试题之关于继承

来源: CSDN 作者:佚名 评论 0 条
  面试例题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组合而成,而不是派生而成。程序如下:


(本文仅表明作者个人观点,不代表本站及其管理员立场.) 推荐 收藏 投稿 打印 返回 关闭
上一篇:SQL技巧:使用SQL子选择来合并查询  
下一篇:精华推荐:数据库的跨平台设计分析
    评论加载中…
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] 下一页
 推荐文章
     

网站首页  -  网站地图 -   站长论坛  -  网站投稿  -    -  网站管理
Copyright © 2008 芜湖站长站 All Rights Reserved 皖ICP备07500611号