#include <iostream>
using namesapce std;
class A
{
public:
virtual ~A(){cout<<"delete A"<<endl};
};
class B: public A
{
public:
B(int n):n(n){}
void show(){cout<<n<<endl;}
~B(){cout<<"delete B"<<endl;}
private:
int n;
}
int main()
{
A *pa;
B *pb = new B(1);
pa = pb;
delete pa;
pb->show();
return 0;
}
wenn destructor von calss A virtual ~A(){...}
, die Ausgabe des Programms: delete B delete A 1
wenn destructor der Klasse A ist ~A(){...}
, dessen Ausgang progarm: delete A 0
, warum der Wert von n verschieden ist, wenn Destruktor der Klasse A ist virtuell oder nicht virtuell? Wenn Call Destruktor von B zu zerstören Objekt, warum das Calss Mitglied n ist noch existent?Warum hat das Calss-Member n von B einen anderen Wert, wenn der Destruktor der Klasse A virtuell oder nicht virtuell ist?
Verstehen Sie, was eine 'virtuelle' Funktion ist? – Barry
Was ist 'pb-> show() {};'? – AnT
Sie können dies lesen http://www.learncpp.com/cpp-tutorial/122-virtual-functions/ –