问题 问答题

使用VC6打开考生文件夹下的工程MyProj6。此工程包含一个源程序文件MyMain6.cpp。在程序中,定义了一个Furniture类,Bed类和Sofa类是在Furniture类的基础上按公有继承的方式产生的派生类,Sleepersofa类是在Bed类和Sofa类的基础上按公有继承的方式产生的派生类。 请按要求完成下列操作,将类Date的定义补充完成: ①Bed类是在Furniture类的基础上按公有继承的方式产生的派生类,为了使程序中的多重继承关系不出现二义性。请在注释“//**1**”之后添加适当的语句。 ②Sofa类是在Furniture类的基础上按公有继承的方式产生的派生类,为了使程序中的多重继承关系不出现二义性。请在注释“//**2**”之后添加适当的语句。 ③Sleepersofa类是在Bed类和Sofa类的基础上按公有继承的方式产生的派生类。请在注释“//**3**”之后添加适当的语句。 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。 源程序文件MyMain6.cpp清单如下; //MyMain6.cpp #include<iostream> using namespace std; class Furniture { public: Furniture(){} void setweight(int w) {weight=w; } int getweight() {return weight; } protected: int weight; }; //* *1 * * class Bed definition { public: Bed(){} void sleep() { cout<<"sleeping..."<<end1; } }; //* *2* * class Sofa definition { public: Sofa(){} void watchTV() {cout<<"watching TV..."<<end1; } }; //* * * 3 * * * { public: Sleepersofa(){} void Foldout() {cout<<"Fold out the sofa".<<endl; }; int main() { Sleepersofa ss; ss.setweight(20); cout<<ss.getweight()<<end1; return 0; }

答案

参考答案:

解析:① class Bed: virtual public Furniture ② class Sofa: virtual public Furniture ③ class Sleepersofa:public Bed,public Sofa 本题主要考核多重继承关系的应用。 ①程序中的派生类Sleepersofa的基类Bed和Sofa类都是从类Furniture公有继承而来的,直接基类Bed和Sofa中从Furniture继承来的成员拥有相同的名称,这些在程序中容易引起二义性问题。所以应该把类Bed和Sofa设置为虚基类,从不同的路径继承过来的该类成员在内存中就只拥有一个拷贝,从而解决了同名成员的惟一标识问题。所以在第1处应该填入: class Bed:virtual public Furniture ②解析同上,在第2处应该填入: classSofa:virtual public Furniture ③Sleepersofa类是在Bed类和Sofa类的基础上按公有继承的方式产生的派生类,所以在第3处填入: class Sleepersofa:publicBed,public Sofa

选择题
判断题