1.
#include <iostream>
using namespace std;
class Sofa
{
private:
string sitting;
string *lying;
public:
Sofa(){cout << "Sofa::无参构造函数" << endl;}
Sofa(string sitting,string lying):sitting(sitting),lying(new string(lying))
{
cout << "Sofa::有参构造函数" << endl;
}
~Sofa()
{
cout << "Sofa::析构函数" << endl;
}
Sofa(const Sofa &other):sitting(other.sitting),lying(new string(*(other.lying)))
{
cout << "Sofa::拷贝构造函数" << endl;
}
Sofa &operator=(const Sofa &other)
{
if(this != &other)
{
sitting = other.sitting;
lying = new string(*(other.lying));
}
cout << "Sofa::拷贝赋值函数" << endl;
return *this;
}
void show()
{
cout << sitting << " " << *lying << endl;
}
};
class Bed
{
private:
string sleep;
string *doing;
public:
Bed(){cout << "Bed::无参构造函数" << endl;}
Bed(string sleep,string doing):sleep(sleep),doing(new string(doing))
{
cout << "Bed::有参构造函数" << endl;
}
Bed(const Bed &other):sleep(other.sleep),doing(new string(*(other.doing)))
{
cout << "Bed::拷贝构造函数" << endl;
}
Bed &operator=(const Bed &other)
{
if(this != &other)
{
sleep = other.sleep;
doing = new string(*(other.doing));
}
cout << "Bed::拷贝赋值函数" << endl;
return *this;
}
~Bed()
{
cout << "Bed::析构函数" << endl;
}
void show()
{
cout << sleep << " " << *doing << endl;
}
};
class Sofa_bed:public Sofa,public Bed
{
private:
string color;
string *size;
public:
Sofa_bed(){cout << "Sofa_Bad::无参构造函数" << endl;}
Sofa_bed(string s,string ly,string sl,string d,string c,string size):Sofa(s,ly),Bed(sl,d),color(c),size(new string(size))
{
cout << "Sofa_Bad::有参构造函数" << endl;
}
Sofa_bed(const Sofa_bed &other):Sofa(other),Bed(other),color(other.color),size(new string(*(other.size)))
{
cout << "Sofa_Bad::拷贝构造函数" << endl;
}
Sofa_bed &operator=(const Sofa_bed &other)
{
if(this != &other)
{
color = other.color;
size = new string(*(other.size));
Sofa::operator=(other);
Bed::operator=(other);
}
cout << "Sofa_Bad::拷贝赋值函数" << endl;
return *this;
}
~Sofa_bed()
{cout << "Sofa_Bad::析构函数" << endl;}
void show()
{
cout << color << " " << *size << endl;
}
};
int main()
{
Sofa_bed sd("可坐","可躺","可睡","可做","粉色","200");
Sofa_bed sd1("可坐","可躺","可睡","可做","黑色","100");
sd1.Sofa::show();
sd1.Bed::show();
sd1.show();
cout << "=======================" << endl;
Sofa_bed sd2 = sd1;
sd2.show();
cout << "=======================" << endl;
sd2 = sd;
sd2.show();
return 0;
}
思维导图: