c++ - 为什么 C++ 没有虚拟数据成员?
问题描述
C++ 有虚函数,调用虚函数将在运行时在 vtable 中查找函数地址。
C++ 也有虚拟基础。访问虚拟库的数据成员将在运行时查找 vtable 的偏移量。
为什么 C++ 缺少虚拟数据成员?访问一个将查找 vtable 中的偏移量作为虚拟基础,但数据成员将由派生的
virtual void fun();
virtual int val;
void fun() override;
int val override;
解决方案
你所说的偏移量是一个实现细节。
虚函数的内容可以在派生实例中改变。
非虚拟数据成员的内容可以在派生实例中更改。
菱形继承意义上的共享数据成员可以通过虚拟继承来实现。
可以使用虚拟访问器来实现多态成员。
充其量这是语法糖,而不是太多。
推荐阅读
- r - R:每组出现重新启动计数器
- alluxio - 如何监控Alluxio中的standby master的状态?
- java - 在 IntelliJ Idea (JPA) 中,String 是否优于 StringBuilder
- git - 从 Azure DevOps 中的子模块触发父存储库中的构建
- javascript - 如何在 nodejs 中使用 morgan 和 winston.js 格式获取 OriginURL?
- bash - grep 目录中的文件名
- android - java.security.NoSuchAlgorithmException:没有这样的算法:提供者 BC 的 ECDSA
- sql - 具有两个自连接的 SQL 查询 - 有没有更好的方法
- mfc - CListCtrl:在 HeaderControl 上获取 DblClick
- html - 文件输入类型在 Chrome 上消失