可以看出,在继承链的中间D3
引入了一个新的虚函数。@function3()
我想知道发生这种情况时 *--vptr 和 vtable 会发生什么。D3 现在是“一种”新的基类,
class Base {
public:
virtual void function1() { std::cout << "Base func1()\n"; };
virtual void function2() { std::cout << "Base func2()\n"; };
};
class D1 : public Base {
public:
virtual void function2() { std::cout << "D1 func2()\n"; };
};
class D2 : public D1 {
public:
virtual void function1() { std::cout << "D2 func1()\n"; };
};
class D3 : public D2 {
public:
virtual void function2() { std::cout << "D3 func2()\n"; };
virtual void function3() { std::cout << "D3 func3()\n"; };
};
class D4 : public D3 {
public:
virtual void function1() { std::cout << "D4 func1()\n"; };
virtual void function3() { std::cout << "D4 func3()\n"; };
};
int main() {
D3 d3;
}
但是当我看到 vtable 条目时,我能看到的是function1()
, function2()
. 我认为条目必须是function2()
, function3()
。为什么我不能得到我的想法?