ホームに戻る
 クラスの初期化

#include <iostream>
#include <string>

/*
*
*   クラスの初期化
*
*   クラスの初期化には以下のような方法がある。
*   もちろんメンバ関数を介して代入しても問題は無い。
*
*   クラスはディフォルトコンストラクタを1つ持つ。
*   通常は A() などであり省略が可能である。
*   ただし A(int n = 1) など引数に値が与えられると、
*   ディフォルトコンストラクタとして定義できる。
*   この場合 A() と A(int n = 1) は同時に定義できない。
*
*/

class A{
  std::string name;
  int num;
public:
  A() : name("default"), num(0){};             // 値を初期化
  A(int n) : name("default"), num(n){};        // 値を初期化
  //A(int n = 1) : name("default"), num(n){};  // A() と同時に定義できない
  A(std::string , int = 100);
  std::string getName() const {return name;}
  int getNum() const {return num;}
};

A::A(std::string s, int n){
  name = s;  // コンストラクタ内の代入であり初期化でない
  num = n;   // コンストラクタ内の代入であり初期化でない
}

using namespace std;

int main(){
  A a1;
  A a2(50);
  A a3("a");
  A a4("b", 150);

  cout << a1.getName() << a1.getNum() << endl;
  cout << a2.getName() << a2.getNum() << endl;
  cout << a3.getName() << a3.getNum() << endl;
  cout << a4.getName() << a4.getNum() << endl;

  return 0;
}

 結果

default0
default50
a100
b150

inserted by FC2 system