1.构造函数不能定义为虚函数
2.析构函数应该定义为虚函数。
3.友元函数不应该被定义为虚函数。因为友元函数不是类的成员函数。
4.派生类函数重定义会覆盖基类的函数
class Dwelling{
public:
virtual Dwelling &build(int n);
};
class Hovel:public Dwelling{
public:
virtual Hovel &build(int n);//会覆盖基类的函数
}
5.如果有多个基类的函数,派生类应该书写对应的派生类函数。
class Dwelling{
public:
virtual void showperks(int a)const;
virtual void showperks(double x)const;
virtual void showperks() const;
};
class Hovel:public Dwelling{
public:
virtual void showperks(int a)const;
virtual void showperks(double x)const;
virtual void showperks() const;
}
//如果只定义了一个派生类函数,那么基类的另外两个函数会被覆盖,无法调用。
void Hovel::showperks()const{Dwelling::showperks();}
//调用基类的函数
6.纯虚函数
virtual double Area() const =0;
拥有纯虚函数的类不能构造对象,拥有纯虚函数的类被称为抽象类。
7.派生类如果使用了New delete需要重写复制构造函数,析构函数,=赋值运算符
hasDMA & hasDMA::operator=(const hasDMA &hs){
if(this=&hs)
return *this;
baseDMA::operator=(hs);
delete [] style;
style=new char[strlen(hs.style)+1];
strcpy(style,hs.style);
return *this;
}
8.使用类型转换和输出操作符重载实现派生类输出
std::ostream & operator<<(std::ostream &os,const baseDMA &rs){
os<<"Label:"<<rs.label<<endl;
os<<"Rating:"<<rs.rating<<endl;
return os;
}//基类
std::ostream & operator<<(std::ostream &os,const hasDMA &hs){
os<<(const base DMA &)hs;//强制类型转换,调用基类的友元函数
os<<"Style:"<<rs.style<<endl;//派生类数据成员输出
return os;
}//派生类