首页 > 解决方案 > 我可以把虚函数中的这个指针当作派生类的这个指针吗

问题描述

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

标签: c++

解决方案


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

它不是一个Base*. 你在范围内Derived::show。在此范围内,其静态类型只能是Derived*. 是否覆盖Base::show并不影响这一点。

Derived因此,访问in的任何成员Derived::show都是完全合法的。这就是重写类应该如何通过使用其类特定成员来自定义行为的方式。


推荐阅读