1.当父类没有默认构造函数时,子类必须在初始化成员列表里面显示调用构造函数
class Vehicle {
int xx;
public:
Vehicle(int x) :xx(x){}
int getValue() {
return xx;
}
};
class Car :public Vehicle {
public:
Car(int x) :Vehicle(x) {};
};
2.子类里面构造函数、拷贝构造函数、赋值号。
关于父类的赋值。
class Traveler {
string trv;
public:
explicit Traveler(string st) :trv(st) {
cout << "constructor Traveler" << endl;
};
Traveler(Traveler &tr) {
trv = tr.trv;
}
Traveler& operator=(const Traveler& tr) {
if (this != &tr) {
this->trv = tr.trv;
}
cout << "Traveler =" << endl;
return *this;
}
};
class Pager {
string pag;
public:
explicit Pager(string pa) :pag(pa) {
cout << "constructor Pager" << endl;
};
Pager(Pager& p) {
pag = p.pag;
}
Pager& operator=(const Pager& pa) {
if (this != &pa) {
this->pag = pa.pag;
}
cout << "Pager =" << endl;
return *this;
}
};
class BussinessTraveler :public Traveler {
Pager pager;
public:
BussinessTraveler():Traveler("default"),pager("default"){
}
BussinessTraveler(string tr,string pa):Traveler(tr),pager(pa){}
BussinessTraveler(BussinessTraveler& buTr):Traveler(buTr),pager(buTr.pager){
}
BussinessTraveler& operator=(BussinessTraveler& bs) {
if(this!=&bs){
Traveler::operator=(bs);
this->pager = bs.pager;
}
return *this;
}
};
拷贝构造函数在初始化列表里面,显示的调用父类的拷贝构造函数
赋值号,用Base::operator=(bs) 显示调用
3.名字隐藏对静态成员函数来说也是成立的。
另外在类里也不能仅用返回值来重载函数
4.private protect形式的派生类 像基类转换,编译器报错:
提示转换方式存在但无法访问!
protect派生类也不能访问基类的public的函数