2006-09-14

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

来源: CSDN 作者:佚名 评论 0 条
 
class Head
{
 public:
  void Look(void) { m_eye.Look(); }
  void Smell(void) { m_nose.Smell(); }
  void Eat(void) { m_mouth.Eat(); }
  void Listen(void) { m_ear.Listen(); }
 private:
  Eye m_eye;
  Nose m_nose;
  Mouth m_mouth;
  Ear m_ear;
};
  Head由Eye、Nose、Mouth、Ear组合而成。假如答应Head从Eye、Nose、Mouth、Ear派生而成,那么Head将自动具有Look、Smell、Eat、Listen这些功能。程序十分简短并且运行正确,但是下面这种设计方法却是不对的。

class Head : public Eye, public Nose, public Mouth, public Ear
{
};

  面试例题3:Find the defects in each of the following programs, and explain why it is incorrect.(找出下面程序的错误,并解释它为什么是错的。)[德国某闻名软件咨询企业2005年面试题]

class base{
 private: int i;
 public: base(int x){i=x;}
};

class derived: public base{
 private: int i;
 public: derived(int x, int y) {i=x;}
 void printTotal() {int total = i base::i;}
};

  解析:要在子类中设定初始成员变量,把derived(int x, int y)改成derived(int x, int y) : base(x)。

  答案:

  代码如下:

class base
{
 protected: //这里的访问属性需要改变
  int i;
 public:
  base(int x){i=x;}
};

class derived: public base
{
 private:
  int i;
 public:
  derived(int x, int y) : base(x) //以前没有初始化基类的成员变量
  {
   i=y;
  }
  void printTotal()
  {
   int total = i base::i;
  }
 };

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

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