int x[10]; x[100] = 1; |
int x[3] = {1,2,3};
int y[3];
// y = x // ←これでは配列のコピーはできない!
for(int i=0 ; i<3 ; i++){
y[i] = x[i];
}
|
#include <iostream>
#include <cstdlib> // for exit(1)
using namespace std;
class array{ // クラス宣言
int *p; // 配列の先頭を指すポインタ
int size;
public:
array(); // デフォルトコンストラクタ
array(int sz); // 要素数を指定するコンストラクタ
array(const array &a); // コピーコンストラクタ
array &operator=(const array &a); // 代入演算子
~array(){ delete[] p; cout << "デストラクタ\n"; } // デストラクタ
int &operator[](int i); // [] 演算子の多重定義
int getsize(){ return size; } // 配列のサイズ取得
};
array::array(){ // デフォルトコンストラクタ
p = new int[10];
if(!p) exit(1);
size = 10;
cout << "デフォルトコンストラクタ\n";
}
array::array(int sz){ // 要素数を指定するコンストラクタ
p = new int[sz];
if(!p) exit(1);
size = sz;
cout << "要素数を指定するコンストラクタ\n";
}
array::array(const array &a){ // コピーコンストラクタ
size = a.size;
p = new int[size];
if(!p) exit(1);
for(int i=0 ; i<a.size ; i++) p[i] = a.p[i]; // 内容をコピー
cout << "コピーコンストラクタ\n";
}
array &array::operator=(const array &a){ // 代入演算子の多重定義
delete[] p;
size = a.size;
p = new int[size];
if(!p) exit(1);
for(int i=0 ; i<a.size ; i++) p[i] = a.p[i]; // 内容をコピー
cout << "代入演算子\n";
return(*this);
}
int &array::operator[](int i){ // [] 演算子の多重定義
if(i<0){
cout << "配列の範囲から外れています!";
return p[0];
}else if(i>=size){
cout << "配列の範囲から外れています!";
return p[size-1];
}else{
return p[i];
}
}
int main(){ // main 関数
array num(10);
for(int i=0 ; i<10 ; i++) num[i] = i;
for(int i=0 ; i<10 ; i++) cout << num[i];
cout << "\n";
array x = num;
// array x; // 代入演算子の動作を確認するには、
// x = num; // こちらの2行を試してみよ。
for(int i=0 ; i<10 ; i++) cout << x[i];
cout << "\n";
return 0;
}
|
class array{
…
void put(int i, int j){ if(i>=0 && i<size) p[i] = j; }
int get(int i){ return p[i]; }
…
};
|
num.put(i,i); // 模式的には num.p[i] = i num.get(i); // 模式的には num.p[i] の取り出し |
num[i]=i; // 模式的には num.p[i] = i num[i]; // 模式的には num.p[i] の取り出し |
#include <iostream>
using namespace std;
class coord{ // coord (座標) クラス宣言
int x,y;
public:
coord(){ x=0; y=0; }
coord(int i, int j){ x=i; y=j; }
void get_xy(int &i, int &j){ i=x; j=y;}
coord operator+(coord ob2);
coord operator-(coord ob2);
coord operator=(coord ob2);
void show(){ cout << x << "," << y << "\n";}
};
// + 演算子
coord coord::operator+(coord ob2){
coord temp;
temp.x = x + ob2.x;
temp.y = y + ob2.y;
return temp;
}
// - 演算子
coord coord::operator-(coord ob2){
coord temp;
temp.x = x - ob2.x;
temp.y = y - ob2.y;
return temp;
}
// = 演算子
coord coord::operator=(coord ob2){
x = ob2.x;
y = ob2.y;
return *this;
}
// main 関数
int main(){
coord ob1(1,1);
coord ob2(-1,1);
coord ob3;
ob3 = ob1 + ob2;
ob3.show();
ob3 = ob1 - ob2;
ob3.show();
ob3 = ob1;
ob3.show();
return 0;
}
|