我可以将此虚拟函数中的指针视为派生类的指针吗?

时间:2019-05-29 07:03:41

标签: c++

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类特定的成员吗?

1 个答案:

答案 0 :(得分:4)

  

由于这是(Base *)类型,我可以将其视为(Derived *)并调用/更改Derived类特定成员吗?

它不是Base*。您属于Derived::show的范围。在此范围内,其静态类型只能是Derived*。覆盖Base::show或不覆盖不影响。

因此,访问DerivedDerived::show的任何成员都是完全合法的。这就是上层的类应该通过使用特定于类的成员来自定义行为的方式。