完成沙发床的多继承
#include <iostream>using namespace std;class Sofa
{
private:string sit;int *price;
public:Sofa() {cout << "Sofa::无参构造函数" << endl;}Sofa(string sit,int price):sit(sit),price((new int(price))){cout << "Sofa::有参构造函数" << endl;}Sofa(const Sofa &other):sit(other.sit),price(new int(*(other.price))){cout << "Sofa::拷贝构造函数" << endl;}Sofa &operator=(const Sofa &other){cout << "Sofa::拷贝赋值函数" << endl;if(this != &other){sit = other.sit;price = new int(*(other.price));}return *this;}~Sofa(){cout << "Sofa::析构函数" << endl;delete price;}void show(){cout << sit << endl;cout << *price << endl;}
};class Bed
{
private:string sleep;int *len;
public:Bed() {cout << "Bed::无参构造函数" << endl;}Bed(string sleep,int len):sleep(sleep),len((new int(len))){cout << "Bed::有参构造函数" << endl;}Bed(const Bed &other):sleep(other.sleep),len(new int(*(other.len))){cout << "Bed::拷贝构造函数" << endl;}Bed &operator=(const Bed &other){cout << "Bed::拷贝赋值函数" << endl;if(this != &other){sleep = other.sleep;len = new int(*(other.len));}return *this;}~Bed(){cout << "Bed::析构函数" << endl;delete len;}void show(){cout << sleep << endl;cout << *len << endl;}
};class Sofa_Bed:public Sofa,public Bed
{
private:string color;
public:Sofa_Bed() {cout << "Sofa_Bed::无参构造函数" << endl;}Sofa_Bed(string sit,int price,string sleep,int len,string color):Sofa(sit,price),Bed(sleep,len),color(color){cout << "Sofa_Bed::有参构造函数" << endl;}Sofa_Bed(const Sofa_Bed &other):Sofa(other),Bed(other),color(other.color){cout << "Sofa_Bed::拷贝构造函数" << endl;}Sofa_Bed operator=(const Sofa_Bed &other){cout << "Sofa_Bed::拷贝赋值函数" << endl;if(this != &other){Sofa::operator=(other);Bed::operator=(other);color = other.color;}return *this;}~Sofa_Bed(){cout << "Sofa_Bed::析构函数" << endl;}void show(){Sofa::show();Bed::show();cout << color << endl;}
};int main()
{Sofa_Bed sb1;Sofa_Bed sb2("sit",2000,"sleep",2,"blue");sb2.show();sb1 = sb2;sb1.show();return 0;
}
运行结果
思维导图