没有指针或引用的c++虚函数调用

标签 c++ pointers reference virtual

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

#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

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

最佳答案

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

关于没有指针或引用的c++虚函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25276635/

相关文章:

C++ 临时变量的生命周期因绑定(bind)到引用成员而缩短?

c++ - 如何处理unique_ptr?

c - 如何在c中的某个位置终止字符指针?

c++ - 关于shared_ptr、scoped_ptr和shared_array的一些问题

c - 在 C 中将数组声明为指针

c++ - C/C++ API 谜题

c++ - 如何在保留布局功能的同时将两个小部件层叠在一起?

c++ - Visual Studio 2010 不显示局部变量的调试信息

c++ - "pragma"这个词是怎么来的?

java - 对象和类子类问题的引用或地址