沙发床SleepSofa,是一个沙发Sofa,也是一张床Bed,即类SleepSofa继承类Sofa和类Bed,关系如图所示。床和沙发都是家具的一种,因此定义公共基类家具类furniture,含数据成员weight,带参构造函数及成员函数 Setweight(),Showeight();沙发类Sofa与床类Bed分别继承自furniture,沙发床类SleepSofa继承类Sofa和类Bed。 将furniture定义为虚基类,在主函数中定义SleepSofa的对象,测试类的功能。
时间: 2023-07-10 12:11:09 浏览: 26
好的,这是一个关于多重继承和虚基类的问题。下面是代码实现:
```c++
#include<iostream>
using namespace std;
class furniture{
protected:
int weight;
public:
furniture(int w):weight(w){}; // 带参构造函数
void Setweight(int w){ weight = w; }
void Showweight() const { cout << "Weight: " << weight << endl; }
};
class Sofa: virtual public furniture{ // 虚基类
public:
Sofa(int w):furniture(w){}; // 调用基类构造函数
};
class Bed: virtual public furniture{ // 虚基类
public:
Bed(int w):furniture(w){}; // 调用基类构造函数
};
class SleepSofa: public Sofa, public Bed{
public:
SleepSofa(int w):furniture(w),Sofa(w),Bed(w){}; // 调用基类构造函数
};
int main(){
SleepSofa ss(100);
ss.Showweight(); // 输出结果为: Weight: 100
return 0;
}
```
在这个代码中,我们定义了一个基类`furniture`,然后定义了两个虚基类`Sofa`和`Bed`,`SleepSofa`继承了这两个虚基类。这样,我们在定义`SleepSofa`对象时,就不会出现两个`furniture`的实例,从而避免了多次调用构造函数的问题。
在主函数中,我们定义了一个`SleepSofa`对象`ss`,并调用了`Showweight()`函数,输出了该对象的`weight`值。
希望这个代码对你有所帮助!