为什么C++没有虚拟数据成员?

Fil*_*ipp 5 c++ virtual

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

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

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

virtual void fun();
virtual int val;

void fun() override;
int val override;
Run Code Online (Sandbox Code Playgroud)

Yak*_*ont 1

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

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

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

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

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

这充其量只是语法糖,而且不是很多。