C++ 有虚函数,调用虚函数会在运行时在 vtable 中查找函数地址。
C++ 也有虚拟基。访问虚拟基的数据成员将在运行时查找虚函数表的偏移量。
为什么C++缺少虚拟数据成员?访问一个虚拟基时会在 vtable 中查找偏移量,但数据成员将由派生基提供
virtual void fun();
virtual int val;
void fun() override;
int val override;
Run Code Online (Sandbox Code Playgroud)
您所说的偏移量是一个实现细节。
虚函数的内容可以在派生实例中更改。
非虚拟数据成员的内容可以在派生实例中更改。
菱形继承意义上的共享数据成员可以通过虚拟继承来实现。
多态成员可以用虚拟访问器来实现。
这充其量只是语法糖,而且不是很多。