Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
#include <iostream>
#include <cstdlib>
#include <time.h>
#include "MT.h" //乱数生成用
using namespace std;
//コピーコンストラクタの使用例
class array_c {
int *p;
int size;
public:
array_c(int x) {
p = new int[x]; //newによる動的配列の確保、要素数はx
if (!p) exit(1); //メモリが確保できなければコード1で終了
size = x;
}
~array_c() { delete[] p; } // newで確保したらdeleteで開放
//コピーコンストラクタ
array_c(const array_c &arr);
void put(int i, int j) {
if (i >= 0 && i < size) p[i] = j;
}
int get(int i) {
return p[i];
}
};
//コピーコンストラクタ
array_c::array_c(const array_c &arr) {
int i;
size = arr.size;
p = new int[arr.size];
if (!p) exit(1);
for (i = 0;i < arr.size; i++) p[i] = arr.p[i];
}
int main()
{
array_c num(10);
int i;
init_genrand((unsigned)time(NULL));
for (i = 0;i < 10;i++) num.put(i, genrand_int32());
for (i = 0;i < 10;i++) cout << num.get(i) << endl;
//コピーコンストラクタによるコピー
//それぞれの配列は違うメモリを指す
cout << "配列を安全にコピーします。" << endl;
array_c copy = num; //このような初期化時のみ呼び出される
for (i = 0; i < 10; i++) cout << copy.get(i) << endl;
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment