C++继承中子类的构造和拷贝构造和运算符重载
父类
class Person{
public:
Person(const char* name = "peter")
: _name(name)
{
cout << "Person()" << endl;
}
Person(const Person& p)
: _name(p._name)
{
cout << "Person(const Person& p)" << endl;
}
Person& operator=(const Person& p){
cout << "Person operator=(const Person& p)" << endl;
if (this != &p)
_name = p._name;
return *this;
}
~Person(){
cout << "~Person()" << endl;
}
protected:
string _name;
};
子类
class Student : public Person{
public:
Student(const char* name, int stuid)
:Person(name)
;_stuid(stuid)
{}
Student(const Student& s)
:Person(s)
;_stuid(s._stuid)
{}
Student& operator=(const Student& s){
if(&s != this){
Person :: operator=(s);
//operator=(s);直接这样用会隐藏父类的函数
_stuid = s._stuid;
}
return *this;
}
~Student(){
//子类和父类的析构函数虽然不同名仍然构成隐藏,因为名字会被编译器统一处理成destructor
Person::~Person();
}
protected:
int _stuid;
};