この問題を解くためには…
 → 基本編第4日目参照

問題4:コンストラクタとデストラクタ

prob4-1.(難易度:★)

以下のプログラムに、指定した変更を加えなさい。

prob4-1:number.h
#ifndef _NUMBER_H_
#define _NUMBER_H_

class Number{
private:
	//	メンバ変数
	int a;
	int b;
public:
	//	二つの数値を設定
	void setNumbers(int n1, int n2);
	//	二つの数の和を取得
	int getAdd();
};

#endif // _NUMBER_H_
number.cpp
#include "number.h"

//	二つの数値を設定
void Number::setNumbers(int n1, int n2)
{
	a = n1;
	b = n2;
}
int Number::getAdd()
{
	return a + b;
}
main.cpp
#include <iostream>
#include "number.h"

using namespace std;

int main(){
	Number* pN;
	pN = new Number();
	pN->setNumbers(1, 2);
	cout << pN->getAdd() << endl;
	return 0;
}
実行結果
3

変更点は以下の通り

  1. Numberクラスにコンストラクタをつけ、メンバ変数a,bを0で初期化する。
  2. main.cpp内の最後で、pNのメモリを解放する。

prob4-2.(難易度:★★)

以下のプログラムのソースファイル、hoge.cppに、コンストラクタおよび、デストラクタを追加し、期待される実行結果と同じ結果が得られるようにしなさい。コンストラクタおよびデストラクタないでの処理は、指定したとおりにしなさい。

prob4-2:hoge.h
#ifndef _HOGE_H_
#define _HOGE_H_

class Hoge{
public:
	//	コンストラクタ
	Hoge();
	//	デストラクタ
	~Hoge();
	void foo();
};


#endif // _HOGE_H_
hoge.cpp
#include "hoge.h"
#include <iostream>

using namespace std;

void Hoge::foo()
{
	cout << "fooメソッド" << endl;
}
main.cpp
#include <iostream>
#include "hoge.h"

using namespace std;

int main(){
	Hoge* pH;
	pH = new Hoge();
	pH->foo();
	delete pH;
	return 0;
}
期待される実行結果
コンストラクタ
fooメソッド
デストラクタ

なお、デストラクタ、およびコンストラクタで行われる処理は、以下の通りである。

コンストラクタ 「コンストラクタ」という文字列を表示
デストラクタ 「デストラクタ」という文字列を表示

prob4-3.(難易度:★)

以下のプログラムは、int型の配列を生成し、そこにあたいを入れて表示するものである。しかし、生成したメモリを解放する部分がない。この部分にメモリの開放をつけて、プログラムを完成させなさい。

prob4-3main.cpp
#include <iostream>

using namespace std;

int main(){
	//	配列を生成
	int* num = new int[4];
	int i;
	//	配列に値を代入
	for (i = 0; i < 4; i++){
		num[1] = i;
	}
	//	配列の内容を表示
	for (i = 0; i < 4; i++){
		cout << "num[" << i << "]=" << i << " ";
	}
	cout << endl;
	return 0;
}
実行結果
n[0]=0 n[1]=1 n[2]=2 n[3]=3