相关疑难解决方法(0)

为什么纯虚函数初始化为0?

我们总是声明一个纯虚函数:

virtual void fun () = 0 ;
Run Code Online (Sandbox Code Playgroud)

即,它总是被赋值为0.

我的理解是,这是将此函数的vtable条目初始化为NULL,此处的任何其他值都会导致编译时错误.这种理解是否正确?

c++ abstract-class pure-virtual

145
推荐指数
7
解决办法
5万
查看次数

为什么抽象类有vtable?

关于这篇文章:

对于使用vtable的实现,答案是:通常是.您可能认为抽象类不需要vtable,因为派生类将具有自己的vtable,但在 构造 期间需要它:在构造基类时,它将vtable指针设置为其自己的vtable.稍后当输入派生类 构造函数时,它将使用自己的vtable代替.

我假设答案是正确的,但我不太明白.为什么vtable需要完全用于施工?

c++ constructor abstract-class pure-virtual vtable

5
推荐指数
1
解决办法
1089
查看次数

抽象类总是拥有vtable吗?

我有问题要理解为什么抽象类有vtable.我知道这个问题出现在以下帖子中,我读过这样的话,请耐心等待一下:

用于抽象类C++的VTABLE

抽象类是否具有VTABLE?

为什么抽象类有vtable?

这就是我所知道的:当我通过基类的指针使用派生对象时,vtables用于启用多态行为.如果我现在调用该基类的虚方法,它将转到基础的vtable,查看它所指向的对象的实际类型,并查找该方法的最接近的专用覆盖并使用该方法.如果一个类包含至少一个纯虚函数,则该类是抽象的,这意味着它不能实例化.如果它无法实现,我无法创建一个基指针,所以我不能以多态方式使用它?那为什么它能够有一个vtable?

c++ abstract-class vtable

1
推荐指数
1
解决办法
90
查看次数

标签 统计

abstract-class ×3

c++ ×3

pure-virtual ×2

vtable ×2

constructor ×1