class Base
{
public:
virtual void func1()
{
std::cout<<"Base func1"<<std::endl;
}
//virtual destructor
};
class Derived : public Base
{
public:
virtual void func1()
{
std::cout<<"Derived Base func1"<<std::endl;
}
virtual void func2()
{
std::cout<<"Derived func2"<<std::endl;
}
};
int main()
{
Derived *d = new Derived;
delete d;
}
我想知道是否会为解析虚函数创建两个“vptr”,一个在 Base
类中,它会在 Derived
类对象中继承func1
和 func2
的 Derived
对象中的另一个对象。
最佳答案
在我的 GCC 上:
std::cout << sizeof(void*) << ' ' << sizeof(Derived) << '\n';
// Prints 8 8
所以一个虚表指针就够了。我希望大多数其他编译器以相同的方式运行。
derived class also has a virtual function which is not present in Base class
在 Derived
中添加的虚函数可能只是简单地放在 Derived
vtable 的末尾,在从 Base
继承的函数之后。
关于c++ - 如果派生类还具有基类中不存在的虚函数,则创建的 vptr 数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55492291/