138得票12回答
虚函数和虚表是如何实现的?

我们都知道在C++中什么是虚函数,但是它们在深层实现上是如何实现的? vtable能被修改或者在运行时直接访问吗? vtable是否存在于所有类中,还是只存在于至少有一个虚函数的类中? 抽象类是否仅在至少有一个条目的函数指针上具有NULL值? 是否拥有单个虚函数会减慢整个类的速度?或者...

73得票5回答
Q_OBJECT 抛出“undefined reference to vtable”错误

我正在使用Qt Creator 2.0.1和Qt 4.7.0(32位)在Windows 7 Ultimate 32位上。 请考虑下面的代码,这是产生错误所需的最小代码: class T : public QObject, public QGraphicsItem { Q_OBJEC...

71得票9回答
Qt链接错误:"undefined reference to vtable"

这是我的标题:#ifndef BARELYSOCKET_H #define BARELYSOCKET_H #include <QObject> //! The First Draw of the BarelySocket! class BarelySocket: public ...

62得票5回答
由于类不具有多态性,无法进行向下转型?

有没有可能继承一个类但不使用虚函数?编译器提示以下代码不是多态的。 示例:class A { public: int a; int getA(){return a;}; } class B : public A { public: int b; int ge...

58得票6回答
未定义符号“vtable for ...”和“typeinfo for ...”是什么意思?

接近最后一步,但仍然存在一些奇怪的错误...bash-3.2$ make g++ -Wall -c -g Myworld.cc g++ -Wall -g solvePlanningProblem.o Position.o AStarNode.o PRM.o PRMNode.o World.o ...

54得票3回答
g++ -fdump-class-hierarchy输出中的第一个(int (*)(...))0虚函数表条目是什么?

以下是原始代码:class B1{ public: virtual void f1() {} }; class D : public B1 { public: void f1() {} }; int main () { B1 *b1 = new B1(); ...

49得票11回答
替代的虚函数调用实现?

C++通过虚拟机制支持动态绑定。但据我所知,虚拟机制是编译器的实现细节,标准只规定了特定情况下应该发生的行为。大多数编译器都通过虚拟表和虚拟指针来实现虚拟机制。这不涉及虚拟指针和表的实现细节。我的问题是: 是否有任何编译器以除了虚拟指针和虚拟表机制之外的其他方式实现虚拟函数的动态调度?据我...

43得票3回答
虚函数调用的实现细节

首先,我想明确一点,我知道C++标准中没有虚函数表和虚函数指针的概念。然而,我认为几乎所有的实现都以非常相似的方式实现了虚函数调用机制(如果我错了,请纠正我,但这不是主要问题)。此外,我相信我知道虚函数如何工作,也就是说,我可以总是知道哪个函数将被调用,我只需要实现细节。 假设有人问我以下问...

43得票1回答
Java接口在内部是如何实现的?(虚函数表?)

C++有多重继承。在汇编级别上,多重继承的实现可能非常复杂,但是网上有很好的描述,说明通常如何完成这个过程(vtables、指针修复、thunks等)。 Java没有多重实现继承,但它确实有多重接口继承,因此我认为一个类只有一个vtable的简单实现无法实现这一点。Java内部如何实现接口呢...

42得票3回答
C++中的vtable是什么?

可能重复: 为什么需要虚函数表? C++中的vtable是什么? 据我所知,vtable是一个虚拟表,其中包含指向虚函数的指针数组。是否有一篇文章可以阅读,其中包含实际实现的示例?(任何演练都会受到赞赏。)