什么是C ++中的伪虚函数?

时间:2009-08-21 22:48:49

标签: c++

C ++中的伪虚函数是什么?

4 个答案:

答案 0 :(得分:4)

AFAIK它不是任何具有官方定义的术语。

也许有人在谈论simulated dynamic binding

编辑:一个快速的网络搜索表明有人可能已经实现了他们自己的动态多态,所以他们可能有自己的vtable。 “伪虚拟”函数将是通过其机制访问的函数,而不是实际上是它们的C ++编译器理解它们的虚函数。

这样做的一个原因是实施multi-dispatch

你有什么背景可以指出我们吗?

答案 1 :(得分:2)

我从未听过这个词。我猜他们要么在讨论Non-Virtual Interface idiom (NVI),要么他们正在讨论构建函数指针的调度表,这就是如何在C中实现多态/虚函数(实际上是C ++编译器的工作方式)它在幕后)。

答案 2 :(得分:1)

我听过用于引用多方法的术语(在C ++中,这些通常使用函数指针数组实现,其中选择器偏移量由代码在运行时确定):

(*multiMethod[ index ])()

multiMethod数组只是一个函数指针数组。

答案 3 :(得分:0)

带声明的虚拟函数。

class Foo
{
    int* bar;

    Foo() : bar(0) { bar = new int; }
    virtual ~Foo() { delete bar; }
}

这有一个伪虚拟析构函数,因为它在声明中做了一些事情。这是一个纯虚拟声明:

class Foo
{
    Foo() { }
    virtual ~Foo()=0;
}

至少,这就是我学习它的方式。