沙发床的多继承
代码:
#include <iostream>using namespace std;//封装 沙发 类
class Sofa
{
private:string sitting;double *size;
public://无参构造函数Sofa() {cout << "Sofa::无参构造函数" << endl;}//有参构造函数Sofa(string s,double si):sitting(s),size(new double(si)){cout << "Sofa::有参构造函数" << endl;}//拷贝构造函数Sofa(const Sofa &other):sitting(other.sitting),size(other.size){cout << "Sofa::拷贝构造函数" << endl;}//拷贝赋值函数Sofa &operator=(const Sofa &other){if(this != &other){cout << "Sofa::拷贝赋值函数" << endl;this->sitting = other.sitting;this->size = other.size;}return *this;}//析构函数~Sofa(){delete(size);size = nullptr;cout << "Sofa::析构函数" << endl;}void show(){cout << sitting << " " << *size << endl;}
};//封装 床 类
class Bed
{
private:string sleep;
public://无参构造函数Bed() {cout << "Bed::无参构造函数" << endl;}//有参构造函数Bed(string s):sleep(s){cout << "Bed::有参构造函数" << endl;}//拷贝构造函数Bed(const Bed &other):sleep(other.sleep){cout << "Bed::拷贝构造函数" << endl;}//拷贝赋值函数Bed &operator=(const Bed &other){cout << "Bed::拷贝赋值函数" << endl;this->sleep = other.sleep;return *this;}//析构函数~Bed(){cout << "Bed::析构函数" << endl;}void show(){cout << sleep << endl;}
};//封装 沙发床 类 共有继承沙发和床
class Sofa_bed:public Sofa,public Bed
{
private:string color;
public://无参构造函数Sofa_bed(){cout << "Sofa_bed::无参构造函数" << endl;}//有参构造函数Sofa_bed(string s, double size,string sl, string c):Sofa(s,size), Bed(sl),color(c){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::拷贝赋值函数" << endl;this->color = other.color;this->Sofa::operator=(other);this->Bed::operator=(other);return *this;}//析构函数~Sofa_bed(){cout << "Sofa_bed::析构函数" << endl;}void show(){Sofa::show();Bed::show();cout << color << endl;}
};
int main()
{Sofa_bed sb("可以坐", 180, "可以睡", "灰不溜秋");cout << "++++++++++++++++++++++++++++++++++++++" << endl;sb.Sofa::show();cout << "++++++++++++++++++++++++++++++++++++++" << endl;sb.Bed::show();cout << "++++++++++++++++++++++++++++++++++++++" << endl;sb.show();cout << "++++++++++++++++++++++++++++++++++++++" << endl;return 0;
}
运行效果图:
思维导图