- ベストアンサー
構造体?
以下は、あるC++のサンプルプログラムの頭の部分なのですが、構造体associateの中に、再びassociateが2回も出てきます。何をしている記述なのか教えてください。 #include <vector> #include <algorithm> #include <functional> #include <iostream> using namespace std; struct associate { int num; char chr; associate(int n, char c) : num(n), chr(c) {};←この業は何? associate() : num(0), chr('\0'){};←この行は何? }; bool operator<(const associate &x, const associate &y) { return x.num < y.num; } ostream& operator<<(ostream &s, const associate &x) { return s << "<" << x.num << ";" << x.chr << ">"; } int main () { vector<associate>::iterator i, j, k; associate arr[20] = {associate(-4, ' '), associate(16, ' '), ・ ・ ・ associate(-3, 'e'), associate(15, ' ')};
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
何をしているか?が知りたいんですね? 他の方も書かれていますが、クラス名と同じメンバ関数をコンストラクタと呼びます。 コンストラクタは、定義されているクラスを構築(実体化)した時に最初に呼び出される関数です。 また、そのコンストラクタが2つあるのは、オーバーロードと言って、引数によって呼び出される関数が自動的に決定される便利な機能です。 具体的に説明すると、 associate a(5,'A'); associate b; ↑この様にクラスを実体化します。 new演算子などを使用して実体化する方法もあります。 この時、実体aは、最初のコンストラクタが呼び出されます。→associate(int n, char c) : num(n), chr(c) {}; 実体bは、二番目のコンストラクタが呼び出されます。→associate() : num(0), chr('\0'){}; で、コンストラクタでは何をやってるかと言うと、最初のコンストラクタでは、引数で指定された値でメンバ変数を初期化しています。 次のコンストラクタでは、デフォルト値でメンバ変数を初期化しています。 クラスを構築した時点でコンストラクタが呼び出されてメンバ変数を初期化するので、その後は安心してクラスの実体を使用することができます。 双子の関数でデストラクタと言うものもあります。 こちらは実体が破棄される場合に呼び出される関数です。
その他の回答 (4)
- Tacosan
- ベストアンサー率23% (3656/15482)
C++ の struct は「デフォルトのアクセス制限が全て public になっている class」. だから struct A : B { .... }; は class A : public B { public: .... }; と同じ.
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
他の方が答えられているので他の部分の補足 C++で structというのは、単なるCでいう構造体ではなくて 拡張された構造体というか、名無しクラスというか、クラスと同じものです。(色々制限はあるが) メンバに型名と同じ名前の関数はコンストラクタになります。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
コンストラクタ。
- nanimania
- ベストアンサー率36% (34/93)
オブジェクト指向における、多態性です。 associate(int n, char c) : num(n), chr(c) {}; associate() : num(0), chr('\0'){}; associateが作られるときに、 引数が渡されていれば引数を使用し、 引数がなければ初期値を使う。 という意味です。
お礼
丁寧に有難う御座います。 このあたりの具体的な話題は、参考書で見つけられなかったのですが・・・