【发布时间】:2011-01-11 12:33:42
【问题描述】:
我读到很多人写“一个虚拟表存在于一个类中,该类中声明了一个虚函数”。
我的问题是,vtable 是否仅存在于具有虚函数的类,或者它也存在于从该类派生的类。
例如
class Base{
public:
virtual void print(){cout<<"Base Print\n";}
};
class Derived:public Base{
public:
void print(){cout<<"Derived print\n";}
};
//From main.cpp
Base* b = new Derived;
b->print();
问题:如果没有用于派生类的 vtable,那么输出就不会是“派生打印”。因此,IMO 对于任何声明了虚函数的类以及从该类继承的类都存在一个 vtable。这是正确的吗?
【问题讨论】:
-
为了完成实验,创建继承自派生并覆盖打印的类派生2。通过指向 base... 的指针在此类实例上调用 print...
-
了解更多关于 Vtable @ 下面的链接:learncpp.com/cpp-tutorial/125-the-virtual-table
标签: c++ derived-class virtual-functions vtable