为什么在c++中调用虚函数意味着消息分派
why calling a virtual function in c++ means message dispatch
在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;
}
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 函数上的关键字'const'意味着对象字段完全只读?
- 在成员函数中返回类对象意味着什么
- 这个错误意味着什么:在任何函数之外声明的可变大小类型
- 编译器优化合并了相同的函数实现,这意味着在运行时要绕过存根
- 在函数声明和参数上使用引用意味着什么
- 如何谷歌奇怪的字符,例如"~"内部问题,例如在构造函数之前的 c++ 中这意味着什么?
- 当构造函数的输入参数设置为等于 C++ 中的值时,这意味着什么?
- 编译器告诉我它无法解析重载函数的地址.对于 switch() 语句,这意味着什么
- ClassName::method()是否意味着调用了ClassName的成员函数method(
- 一个带有“与”符号的函数原型意味着什么
- 当一个参数在函数原型中被赋值时,这意味着什么
- 在声明中显式调用无参数构造函数意味着什么
- 为什么在c++中调用虚函数意味着消息分派
- 从构造函数捕获异常意味着我的实例之后超出了作用域
- g++在虚拟析构函数中给出了删除数组的警告消息,这意味着什么
- auto using parent是否意味着函数原型?
- 它在构造函数声明中意味着什么
- 在构造函数中设置数组意味着稍后会失败