この問題を解くためには… |
→ 基本編第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_
#include "number.h" // 二つの数値を設定 void Number::setNumbers(int n1, int n2) { a = n1; b = n2; } int Number::getAdd() { return a + b; }
#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
変更点は以下の通り
- Numberクラスにコンストラクタをつけ、メンバ変数a,bを0で初期化する。
- 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_
#include "hoge.h" #include <iostream> using namespace std; void Hoge::foo() { cout << "fooメソッド" << endl; }
#include <iostream> #include "hoge.h" using namespace std; int main(){ Hoge* pH; pH = new Hoge(); pH->foo(); delete pH; return 0; }
コンストラクタ
fooメソッド
デストラクタ
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