C ++プログラミング025演習:ゴーストが削除何ですか

北プログラミングとアルゴリズム(C)クイズの概要(2020年春)


説明

出力結果を指定された空白の手順で塗りつぶし

#include <iostream> 
using namespace std;
class A 
{ 
public:
	A() { }
// 在此处补充你的代码
}; 
class B:public A { 
	public: 
	~B() { cout << "destructor B" << endl; } 
}; 
int main() 
{ 
	A * pa; 
	pa = new B; 
	delete pa; 
	return 0;
}

入力
なし

出力
デストラクタBの
デストラクタA

サンプル入力
なし

サンプル出力
デストラクタBの
デストラクタA

ソース
郭威


分析

ここでの出力は、我々は、基本クラスならば、一般的にデストラクタシーケンスは、派生クラスに基底クラスであるが、それは、派生クラスの基底クラスを指すポインタである場合ことを知って、簡単な連続検査デストラクタ関数の呼び出しシーケンスでありますデストラクタ仮想関数は、その後、プログラムは、基底クラスのデストラクタを呼び出しますデストラクタ派生クラスを呼び出すことはありませんが、設定されていない
次のように:

#include <iostream> 
using namespace std;
class A 
{ 
public:
	A() { }
	~A(){cout << "destructor A" << endl;} 
}; 
class B:public A { 
	public: 
	~B() { cout << "destructor B" << endl; } 
}; 
int main() 
{
	A * pa;
	pa = new B; 
	delete pa; 
	return 0;
}

ここに画像を挿入説明
したがって、基本クラスの仮想関数のデストラクタを提供することができます。
次のとおりです。

#include <iostream> 
using namespace std;
class A 
{ 
public:
	A() { }
virtual ~A(){cout << "destructor A" << endl;} 
}; 
class B:public A { 
	public: 
	~B() { cout << "destructor B" << endl; } 
}; 
int main() 
{ 
	A * pa; 
	pa = new B; 
	delete pa; 
	return 0;
}

プログラムはについて書かれている場合は、仮想関数を行うこともOKです

#include <iostream> 
using namespace std;
class A 
{ 
public:
	A() { }
	~A(){cout << "destructor A" << endl;} 
}; 
class B:public A { 
	public: 
	~B() { cout << "destructor B" << endl; } 
}; 
int main() 
{
	B * pa;//此处是B类指针,就没有设虚函数的烦恼
	pa = new B; 
	delete pa; 
	return 0;
}

ここに画像を挿入説明

彼は192元の記事を発表 ウォン称賛47 ビュー10000 +

おすすめ

転載: blog.csdn.net/qq_44116998/article/details/104413023