首先,普通函数的派生会出现遮掩情况:
如;基类有多个重载函数(fun)。派生类只要定义一个(fun);
所有的基类函数(fun(int)、fun(double)等)不能使用。
当然可以通过using::Base::fun()来解决。
(编译器智能使用父子关系类的fun函数)
遮掩不仅会阻止派生类内部访问基类,还有种情况:
class B {public: void mf();}
class D : Public B {public: void mf();}
D x;
B* pb = &x;
D* pd = &x;
pb->mf();//调用B的mf函数
pd->mf();//调用D的mf函数
//得出,它只看定义类型调用。那一定是编译期间的覆盖。
另外还有种情况会出现遮掩:
class B {virtual void f() const;}
class A : public B {virtual void f();}
//只是少了个const也会出现遮掩
写个基类调用函数: ps1->Shape::draw();
写一个转交函数:
class GameCharacter {
public:
int healthValue() const {
....
int rectval = doHealthValue();
return retVal;
}
private:
virtual int doHealthValue() const {..}
//转交虚函数的调用。
}
讲下虚函数的参数:缺省参数
|
|