class Base
{
public:
virtual void function1() {};
virtual void function2() {};
};
class D1: public Base
{
public:
virtual void function1() {};
};
class D2: public Base
{
public:
virtual void function2() {};
};
对于上面的例子,将创建3个V.tables(source)。
如果我删除了D1中函数的虚拟关键字,D2会不会创建3个v.tables?
答案 0 :(得分:1)
首先,如果一个成员函数在base中声明为virtual,那么无论你是否明确说明,它都将在所有派生类中是虚拟的。(虽然它依赖于实现)
第二个具有至少一个功能的每个类只有一个且只有一个vtable。因此,对于您的问题,即使您从派生类函数中删除虚拟,它们仍然是虚拟的,每个类将有三个vtable(最重要的实现)。