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; } |