为什么在c++中调用虚函数意味着消息分派

why calling a virtual function in c++ means message dispatch

本文关键字:函数 意味着 消息 分派 调用 c++ 为什么      更新时间:2023-10-16

在c++中调用虚函数是"消息调度"的基本原理/解释是什么?特别是要发送什么消息?

称为"动态调度"

在编程语言中,消息传递是一种通常与面向对象编程相关联的通信模型,在这种模型中,表示数据包/消息(要交换的信息)的结构从一个点发送到另一个点(可能是同一个程序或不同的程序),并被完整地复制。

这与函数调用相反,在函数调用中,出于性能原因,在许多情况下会忽略一个简单的地址。

虚函数调用,顾名思义,就是函数调用,所以它们与消息传递没有什么可共享的(除了在底层仍然需要函数来传递消息)。然而,为了简单起见,许多教科书都用c++/Java/…如"将消息传递给对象"

虚函数在以下意义上通过类层次结构"调度"某个函数调用:如果创建派生类的对象,但使用基类指针调用虚函数,则在运行时解析实际对象类型(派生),并调用被重写的函数(假设它可用)。这种在运行时(而不是编译时)为函数调用选择正确目标的机制称为动态绑定或动态分派。

#include <stdio.h>
class Base{
public:
  virtual void echo(){ printf( "Base echo()n"; ) }
};
class Derived : public Base{
public:
  void echo(){ printf( "Derived echo()n"; ) }
};
int main( int argc, char* argv[] ){
  Derived d_obj;
  Base * b_ptr = &d_obj;
  b_ptr->echo(); 
  // This prints "Derived echo()" even though b_ptr is of type Base pointer
  return 0;
}