【发布时间】:2015-06-17 02:07:05
【问题描述】:
我一直在阅读有关 vtables 和指针的内容,但仍有一些问题。例如:
#include <iostream>
using namespace std;
class A
{
public:
virtual void PrintA()=0; //1 vtable and 1 vpointer
};
class B
{
public:
virtual void PrintB()=0; //1 vtable and 1 vpointer
};
class Parent: public A, public B
{
public:
void PrintA();
void PrintB(); // 3 vtables and 3 vpointers, right?
virtual void PrintChild()=0;
};
void Parent::PrintA()
{
cout<<"A";
}
void Parent::PrintB()
{
cout<<"B";
}
class Child: public Parent
{
public:
void PrintChild(); //3 vtables and 3 vpointers
};
void Child::PrintChild()
{
cout<<"Child";
}
int main()
{
Parent* p1= new Child();
p1->PrintChild();
delete p1;
return 0;
}
问题 1:Parent 和 Child 会有 3 个 vtables 和 3 个 vpointer 吗?
问题 2:p1 如何知道要使用哪个 vpointer?我听说这取决于编译器,但我只想有人澄清一下。
【问题讨论】: