#include <iostream> using namespace std; class samp{ int a; public: void set_a(int n){ a = n; } int get_a(){ return a; } }; int main(){ samp ob[4]; // オブジェクトの配列の宣言 samp ob2; // オブジェクト1個のみの宣言 for(int i=0 ; i<4 ; i++) ob[i].set_a(i); for(int i=0 ; i<4 ; i++) cout << ob[i].get_a(); cout << "\n"; return 0; } |
samp::samp(){ } |
#include <iostream> using namespace std; class samp{ int a; public: samp(int n){ a = n; } // (※) 引数つきコンストラクタ void set_a(int n){ a = n; } int get_a(){ return a; } }; int main(){ samp ob[4]={-1,-2,-3,-4}; // (※) オブジェクトの配列の宣言 // samp ob2; // この行と // samp ob3[4]; // この行を有効にすると何が起こるだろうか? for(int i=0 ; i<4 ; i++) cout << ob[i].get_a() << ' '; cout << "\n"; return 0; } |
'samp::samp()' に一致するものが見つからない(関数 main() ) 'samp' 型の配列要素を初期化するデフォルトコンストラクタが見つからない(関数 main() ) |
class samp{ … public: samp(){ } // 引数なしコンストラクタ (デフォルトコンストラクタ)。何か処理を書いても良い。 samp(int n){ a = n; } // 引数つきコンストラクタ … }; |
class samp{ … public: samp(int n=0){ a = n; } // 引数つきコンストラクタ。引数なしコンストラクタは定義しない … }; |
#include <iostream> using namespace std; class samp{ int a, b; public: samp(int n, int m){ a = n; b = m; } // 引数つきコンストラクタ int get_a(){ return a; } int get_b(){ return b; } }; int main(){ samp ob[4]={ samp(1,2), samp(3,4), samp(5,6), samp(7,8)}; // (※) samp *p; p = ob; // (※) 配列の開始アドレスを取得する。p = &ob[0] と書いても同じ。 for(int i=0 ; i<4 ; i++){ cout << p->get_a() << ' '; cout << p->get_b() << "\n"; p++; // (※) p=p+1 や p+=1 と同じ } cout << "\n"; return 0; } |
… for(int i=0 ; i<4 ; i++){ cout << p[i].get_a() << ' '; cout << p[i].get_b() << "\n"; } … |