#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;
}
calss Aのデストラクタがvirtual ~A(){...}
、プログラムの出力である: delete B delete A 1
クラスAのデストラクタが~A(){...}
、progarmの出力である: delete A 0
nの値が異なる理由、場合クラスAのデストラクタは仮想または非仮想ですか?オブジェクトを破壊するためにBの呼び出しのデストラクタ、なぜCalssメンバnが存在するのですか?なぜクラスAのデストラクタが仮想または非仮想である場合、Bのcalssメンバnの値が異なるのですか?
「仮想」機能は何ですか? – Barry
'pb-> show(){};'とは何ですか? – AnT
あなたはこれを読むことができますhttp://www.learncpp.com/cpp-tutorial/122-virtual-functions/ –