1

我无法理解虚函数。当我重载一个虚函数时,是否只调用新的派生函数?还是派生函数和基函数?因为我注意到当调用虚拟析构函数时,会调用基类和派生类析构函数。

4

2 回答 2

4

在这方面,析构函数是特殊的成员函数。
如果您有一个虚拟基类析构函数,那么它将在多态删除期间正确调用 Base 以及派生类析构函数(在基类指针指向派生类对象时调用 delete。)。

但是,其他虚拟成员函数不具有与析构函数相同的特殊地位。只有为适当的对象类型定义的函数被调用。如果您需要调用任何其他函数,则需要明确地这样做。

于 2013-02-18T09:48:25.147 回答
2

派生类对象只不过是基类对象的一种包装。因此,在析构函数的情况下,应该调用两个析构函数,这是预期的行为。

在虚函数的情况下,您有机会替换基类中的函数。因此,使用基类指针保存派生类对象只会调用派生类中的虚函数。

于 2013-02-18T09:53:52.907 回答