第12回演習課題の解説 1 第12回演習課題(1) 1. 以下の条件を満たすプログラムを作成せよ 2 以下の仕様を満たす時を表すクラスを持つ データメンバとして、時間、分、秒を表すものを持つ メンバ関数を使用して、任意の時間、分、秒をオブジェ クトに渡すことができる メンバ関数を使用して、現在オブジェクトに保存されて いる時間、分、秒を受け取ることができる メンバ関数を呼び出せば、自分のオブジェクトに保存さ れている時間、分、秒と別のオブジェクトが持つ時間、 分、秒を足すことができる 上記のクラスのオブジェクトを使用して、2つの時間、分、 秒を設定して、足し算して結果を表示する 第12回演習課題(1)の回答 ans12-1.cc 時を表すクラス 分と秒は60を超えると繰り上がるようにする void set_min(int _min) { // 分を渡す min = _min; hour += (int)(min/60); // 分が60を越えたら時間に繰り上げる min %= 60; } 3 実行例 $ ./a.exe thms1: 0:5:0 thms2: 1:59:0 thms1 (thms2 is added): 2:4:0 第12回演習課題(2) 2. 以下の仕様を満たすプログラムを作成し、オブ ジェクトの深いコピーが実現できていることを示す 以下の仕様を満たすクラスを持つ データメンバとして、3次元配列を動的に確保する 4 コピーコンストラクタを持ち、オブジェクトの深いコ ピーが実現できる 第12回演習課題(2)の回答 ans12-2.cc 定型のパターン ans10-4.ccの要領で3次元配列を確保 mem3d(int _size1, int _size2, int _size3) { // コンストラクタ size1 = _size1; size2 = _size2; size3 = _size3; allocate_memory(); // 配列のメモリの確保 } 5 void allocate_memory() { // 配列のメモリの確保 array = new double**[size1]; // 配列のメモリ確保(1次元目) for (int i=0; i<size1; i++) { array[i] = new double*[size2]; // 配列のメモリ確保(2次元目) for (int j=0; j<size2; j++) { array[i][j] = new double[size3]; // 配列のメモリ確保(3次元目) } } } 第12回演習課題(2)の回答 コピーコンストラクタを用意 mem3d(const mem3d &obj) { // コピーコンストラクタ size1 = obj.size1; size2 = obj.size2; size3 = obj.size3; allocate_memory(); // 配列のメモリの確保 } 6 for (int i1=0; i1<size1; i1++) { // 配列のコピー for (int i2=0; i2<size2; i2++) { for (int i3=0; i3<size3; i3++) { array[i1][i2][i3] = obj.array[i1][i2][i3]; } } }
© Copyright 2024 ExpyDoc