コピーコンストラクタ

/*****プログラム概要******/
/**動的に配列を割り当て、配列オブジェクトを生成しかつ他の配列オブジェクトを初期化するとき、コピーコンストラクタでメモリ割り当てをする***/
#include<iostream>
#include<cstdlib>
using namespace std;
class array{
int *p;
int size;
public:
//通常のコンストラクタ
array(int s){
p=new int[s];
if(!p)
exit(1);
size=s;
cout<<"通常のコンストラクタを使う"<<endl;
}
~array(){
delete []p;}
//copy constructor
array(const array &a);

void set(int i,int j){
if(i>=0 && i<size)
p[i]=j;
}
int get(int i){
return p[i];
}
};
/*このコンストラクタでコピー用にメモリを確保してそのメモリアドレスをpに当てる。pが元のオブジェクトと同等のメモリを参照することはない**/
array::array(const array &a){
int i;
size=a.size;
p=new int[a.size];
if(!p)
exit(1);
for(i=0;i<a.size;i++)
p[i]=a.p[i];
cout<<"コピーコンストラクタを使う"<<endl;
}

int main()
{
array num(10);  //通常のコンストラクタを呼び出す
int i;

for(i=0;i<10;i++)
num.set(i,i);

for(i=9;i>=0;i--)
cout<<num.get(i);
puts("");

array x=num; //他の配列を生成して、numで初期化

for(i=0;i<10;i++)
cout<<x.get(i);
puts("");

return 0;
}


コマンドプロンプトへの出力結果
通常のコンストラクタを使う
9876543210
コピーコンストラクタを使う
0123456789

No comments:

Post a Comment

Nikkei225

28000-28550 up in the early session, down lately.