我是新来的,所以我很容易:) 从我的讲师早些时候讲的话来看,虚拟表的顺序很重要。 但我不明白这个原因!!?虚拟表的顺序是否重要?
由于下面的代码:
class A
{
public:
A() {cout <<"1" << endl;};
A (const A& s) {cout << "2" << endl;}
~A() {cout << "3" << endl;}
void f1() {cout << "4" << endl; f2();}
virtual void f2() = 0;
virtual void f3() {cout << "5" << endl;}
};
class B : public A
{
public:
B() {cout << "6" << endl;}
B(const B& b) : A(b) {cout << "7" << endl;}
~B() {cout << "8" << endl;}
virtual void f1() {cout<<"9"<<endl;}
void f2() {cout<<"lO"<<endl; f4();}
virtual void f2(int i) {cout << "11" << endl;}
virtual void f4() {cout << "12" << endl; f3();}
};
他说,顺序是:
A's vtable :
A::f2()
A::f3()
B's vtable :
B::f2()
A::f3()
B::f1()
B::f2(int)
B::f4()
但我不明白为什么它是重要的?他说,如果这个虚拟表是 不是正确的顺序,你能解释一下为什么吗?
非常感谢你!献给你们所有人 ! –
@ Ron_s请确保您单击此答案左上角的复选标记,如果它回答您的问题。 –