| 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 下一页 |
评论加载中…