首页 > 解决方案 > 为什么 C++ 没有虚拟数据成员?

问题描述

C++ 有虚函数,调用虚函数将在运行时在 vtable 中查找函数地址。

C++ 也有虚拟基础。访问虚拟库的数据成员将在运行时查找 vtable 的偏移量。

为什么 C++ 缺少虚拟数据成员?访问一个将查找 vtable 中的偏移量作为虚拟基础,但数据成员将由派生的

virtual void fun();
virtual int val;

void fun() override;
int val override;

标签: c++virtual

解决方案


你所说的偏移量是一个实现细节。

虚函数的内容可以在派生实例中改变。

非虚拟数据成员的内容可以在派生实例中更改。

菱形继承意义上的共享数据成员可以通过虚拟继承来实现。

可以使用虚拟访问器来实现多态成员。

充其量这是语法糖,而不是太多。


推荐阅读