在C++中,只要原来的返回类型是指向基类的指针或引用,新的返回类型是指向派生类的指针或引用,覆盖的方法就可以改变返回类型。这样的类型称为协变返回类型(Covariant returns type).
返回类型协变
覆盖要求函数具有完全相同的入参。
一般覆盖具有相同的返回值,否则会提示错误
virtual double area ()const = 0;
virtual float area ()const ; //编译器提示错误,返回类型不同
这个规则对返回类型协变而言,则有所放松。覆盖的返回值不区分基类或派生类。从语意上理解,一个派生类也是一个基类。如下:
Class ShapeEditor ...{……};
Class Shape
...{
public:
virtual const ShapeEditor & getEditor ()const =