class Base{
public:
virtual void show(){
cout<<" In Base \n";
}
};
class Derived: public Base
{
int x;
public:
void show() {
this->x = 10;
this->printX();
}
void printX(){
cout<<x;
}
};
int main(void)
{
Base *bp = new Derived;
bp->show(); // RUN-TIME POLYMORPHISM
return 0;
}
我的问题:
this->x = 10;
this->printX();
由于this
的类型为(Base *
,我可以将其视为(Derived *
)并调用/更改Derived
类特定的成员吗?
答案 0 :(得分:4)
由于这是(Base *)类型,我可以将其视为(Derived *)并调用/更改Derived类特定成员吗?
它不是Base*
。您属于Derived::show
的范围。在此范围内,其静态类型只能是Derived*
。覆盖Base::show
或不覆盖不影响。
因此,访问Derived
中Derived::show
的任何成员都是完全合法的。这就是上层的类应该通过使用特定于类的成员来自定义行为的方式。