多继承代码实现沙发床
#include <iostream>
using namespace std;
class Sofa {
private:
int h;
public:
Sofa() {
cout << "Sofa无参构造" << endl;
}
Sofa(int h): h(h) {
cout << "Sofa有参构造" << endl;
}
Sofa(const Sofa& other): h(other.h) {
cout << "Sofa拷贝构造" << endl;
}
Sofa& operator=(const Sofa& other) {
cout << "Sofa赋值拷贝" << endl;
h = other.h;
return *this;
}
~Sofa() {
cout << "Sofa析构函数" << endl;
}
};
class Bad {
private:
int w;
public:
Bad() {
cout << "Bad无参构造" << endl;
}
Bad(int w): w(w) {
cout << "Bad有参构造" << endl;
}
Bad(const Bad& other): w(other.w) {
cout << "Bad拷贝构造" << endl;
}
Bad& operator=(const Bad& other) {
cout << "Bad赋值拷贝" << endl;
w = other.w;
return *this;
}
~Bad() {
cout << "Bad析构函数" << endl;
}
};
class Sofa_Bad: public Sofa, protected Bad {
private:
string name;
public:
Sofa_Bad() {
cout << "Sofa_Bad无参构造" << endl;
}
Sofa_Bad(string name, int h, int w): Sofa(h), Bad(w), name(name) {
cout << "Sofa_Bad有参构造" << endl;
}
Sofa_Bad(const Sofa_Bad& other): Sofa(other), Bad(other), name(other.name) {
cout << "Sofa_Bad拷贝构造" << endl;
}
Sofa_Bad& operator=(const Sofa_Bad& other) {
Sofa::operator=(other);
Bad::operator=(other);
name = other.name;
cout << "Sofa_Bad赋值拷贝" << endl;
return *this;
}
~Sofa_Bad() {
cout << "Sofa_Bad析构函数" << endl;
}
};
int main() {
Sofa_Bad s1;
Sofa_Bad s2("aaaa", 100, 200);
Sofa_Bad s3(s2);
s1 = s3;
return 0;
}