重新定义隐藏方法:
class Dwelling
{
public:
virtual void showperks(int a) const;
};
class Hovel: public Dwelling
{
public:
virtual void showperks() const;
};
Hovel trump;
trump.showperks(); //valid
trump.showperks(5); //invalid
1.如果重新定义 继承的方法,要保持原型相同。但如果返回类型是基类引用或指针, 则可以修改为指向派生类的引用或指针,这种特性称为返回类型协变.
class Dwelling
{
public:
virtual Dewlling & build(int n);
};
class Hovel : public Dwelling
{
public:
virtual Hovel &build(int n);
};
2. 如果基类声明被重载了,则在派生类中应该重定义所有的基类版本。否则其他版本将被隐藏。
class Dwelling
{
virtual void showperks(int a) const;
virtual void showperks(double x) const;
virtula void showperks() const;
};
class Hovel: public Dwelling
{
virtual void showperks(int a) const;
virtual void showperks(double x) const;
virtula void showperks() const;
};