C++:为什么结构\类需要一个虚拟方法才能成为多态?

标签 c++ polymorphism virtual-functions

关注 this question ,我想知道为什么 C++ 中的 struct\class 必须有一个虚拟方法才能成为多态。

强制使用虚拟析构函数是有道理的,但如果根本没有析构函数,为什么必须要有虚拟方法?

最佳答案

因为 C++ 中多态对象的类型基本上是由指向其 vtable 的指针确定的,该 vtable 是虚函数表。但是,只有在至少有一个虚拟方法时才会创建 vtable。为什么?因为在 C++ 中,你永远不会得到你没有明确要求的东西。他们称之为“您不必为不需要的东西付费”。不需要多态性?您刚刚保存了一个 vtable。

关于C++:为什么结构\类需要一个虚拟方法才能成为多态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5831863/

相关文章:

c++ - 在 C++ 中,一个类是否可以包含指向在构造函数中初始化的同一类的指针?

c++ - 如何在没有分隔符的大文本文件中查找所有字典单词?

java - JAXB 和具有外部自定义绑定(bind)的继承

java - 单个对象如何为同一字段显示不同的值(继承)

c++ - 二折多态性很奇怪,如何使其可扩展?

java - C++调用私有(private)成员函数

c++ - gcc 预编译 header 的奇怪行为

c++ - std::mem_fn 与 hand-rolled 仿函数相比的缺陷

C++ 在运行时确定多态对象的类型

c++ - 当基类指针指向在基类中声明的派生类虚函数时,为什么会出现编译时错误?