请通过我的以下代码:
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
class ClassA
{
protected:
int width, height;
public:
void set_values(int x, int y)
{
width = x;
height = y;
}
virtual int area()
{
return 100;
}
~ClassA()
{
cout << "base class destructor called" << endl;
}
};
class ClassB : public ClassA
{
public :
int area()
{
return (width * height);
}
~ClassB()
{
cout << "derived class destructor called" << endl;
}
};
int main()
{
ClassA *Ptr = new ClassB;
Ptr->set_values(10, 20);
cout << Ptr->area() << endl;
delete Ptr;
return 0;
}
在上面的代码中,指针包含派生类对象的地址,所以当我删除指针时它应该调用派生类析构函数和基类析构函数,但为什么它只调用基类析构函数。如果我将基类析构函数设为虚拟,那么它同时调用派生类和基类析构函数,为什么?在虚函数的情况下,基类和派生类都具有相同的函数名称,因此编译器解析派生类中派生最多的函数名称,但这里的析构函数不会具有相同的名称,那么编译器如何解析它必须调用的函数名称在运行时。请解释我如何