本文介绍了没有指针或引用的c ++虚函数调用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

据我所知,虚函数调用通常需要指针或引用.所以我对以下代码感到非常惊讶.

As far as I know, virtual function call usually requires pointer or reference. So I am very surprised by the following codes.

#include <iostream>
using namespace std;
class B{
public:
  void runB(){        call();  }
  virtual void call(){ cout<<"B\n"; };
};

class D: public B{
public:
  void runD(){       runB();   }
  void call(){       cout<<"D\n";  }
};

int main(){
 D d;
 d.runD();
}

输出为

D

有人可以评论为什么这个虚函数调用有效吗?谢谢.

Could someone please comment why this virtual function call works? Thanks。

推荐答案

在成员函数内,对其他成员函数或变量的任何引用都通过 this 指针隐式解析.所以在 runB() 的定义中,call() 的意思是 this->call().使用当前对象的虚拟表执行虚拟函数调用.

Within a member function, any references to other member functions or variables are implicitly resolved via the this pointer. So in the definition of runB(), the call() really means this->call(). The virtual function call is performed using the current object's virtual table.

这篇关于没有指针或引用的c ++虚函数调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-24 17:16