c++ - C++ 中的纯虚函数在哪里?

标签 c++ vtable

哪个虚表将是纯虚函数?在基类还是派生类?

比如每个类(class)的虚拟表是什么样子的?

class Base {

  virtual void f() =0;
  virtual void g();
}


class Derived: public Base{

  virtual void f();
  virtual void g();

}

最佳答案

g++ -fdump-class-hierarchy layout.cpp 生成文件 layout.cpp.classlayout.cpp.class 的内容将显示如下:

Vtable for Base
Base::_ZTV4Base: 4u entries
0     (int (*)(...))0
8     (int (*)(...))(& _ZTI4Base)
16    __cxa_pure_virtual
24    Base::g

Class Base
   size=8 align=8
   base size=8 base align=8
Base (0x7ff893479af0) 0 nearly-empty
    vptr=((& Base::_ZTV4Base) + 16u)

Vtable for Derived
Derived::_ZTV7Derived: 4u entries
0     (int (*)(...))0
8     (int (*)(...))(& _ZTI7Derived)
16    Derived::f
24    Derived::g

Class Derived
   size=8 align=8
   base size=8 base align=8
Derived (0x7ff893479d90) 0 nearly-empty
    vptr=((& Derived::_ZTV7Derived) + 16u)
  Base (0x7ff893479e00) 0 nearly-empty
      primary-for Derived (0x7ff893479d90)

删除 f 的“纯粹性”将第五行更改为:

16    Base::f

关于c++ - C++ 中的纯虚函数在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2550085/

相关文章:

c++ - 使用信号量的冒泡排序算法

c++ - QString : inclass initialization of static data member of non-literal type

c++ - 在嵌套的 lambda 中捕获通用的可调用对象 - 总是向前?

c++ - 虚表解释

c# - 虚函数在 C# 和 Java 中如何工作?

c++ - 使用 "--enable-vtable-verify"构建 Devtoolset 7 gcc

c++ - 用于 C++ 的更好的文本 UI 调试器,例如用于 python 的 pudb

c++ - 可轻松复制的需求和虚拟功能

c++ - 使用 v-table thunk 链接过程调用

c++ - fatal error : google/protobuf/port_def. inc : No such file or directory #include <google/protobuf/port_def. inc>