在类子级的虚函数表中可以找到什么.它是空的或根本没有创建
What will be found in the table of virtual functions of the class child. It is empty or not created at all?
有两个类,第二个类将继承第一个类。基类具有虚函数,在派生中没有虚函数。在类子级的虚函数表中可以找到什么。它是空的还是根本没有创建的?
class base
{
private:
int m_d;
public:
virtual void foo();
virtual void bar();
};
class derived : public base
{
int m_b;
void baz();
};
vtable 是C++编译器的实现细节,因此没有标准答案。对于最小化间接性,每个 vtable 都包含其所有基础的完整虚拟函数集是有意义的,但同样,这是一个实现细节。
典型的解决方案是每个类都有一个 vtable,因此派生类将具有与基类的 vtable 相同的单独 vtable。这样做是为了可以通过具有 vpointer 值来找到它是哪个类(就像在执行dynamic_cast
时一样)。
相关文章:
- 讨论 - 创建矩阵时的数组与向量的向量 - 什么是最实用的选择
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 在C++中创建队列 - 什么是 malloc 错误?
- 从容器创建一系列索引的最惯用方法是什么?
- 基本的 c++ 问题:如果我在函数中创建某些内容并返回它会发生什么?
- 您应该在什么时候创建自己的异常类型
- 在C++中创建文件夹选取器对话框的最简单方法是什么?
- 在C++中,创建'n'数量的对象的推荐方法是什么,其中n是用户定义的。我该怎么做?
- 与简单地创建派生类指针相比,将基类绑定到派生类有什么优点?
- 创建可以遍历 std::map 值的通用模板迭代器的最简单方法是什么?
- 创建整数的 2D 数组,该数组将使用两个函数用随机数填充矩阵.我做错了什么?
- 将vector<vector<double>>从x86平台中创建的一个进程发送到x64中构建的另一个进程的最快方法是什么
- 在创建动态二维数组时,在A[i*c+j]中使用c有什么用,即c代表什么
- 程序什么时候会创建多个堆
- 调用boost.asio的异步函数时,线程是什么时候创建的
- 我的代码在创建楼梯图案时出了什么问题
- 有什么方法可以检测我的类的对象是否在堆栈上创建
- 为动态创建的数组使用静态关键字有什么意义吗?
- 有效创建数字签名的正确方法是什么?我可以使用DSA_sign_setup()吗?
- 评估对象的创建意味着什么?