コンストラクタの初期化とメンバ変数の初期化

これどういうルールだったか忘れた

ロベールのp.647

#include<iostream>
using namespace std;

class ABase {
public:
  ABase() : m_x(0) {} //このコンマなんだっけ
  virtual ~ABase() {}
  void Set(int x){ m_x = x;}
protected;
  int m_x;
}

ロベール本 pp.351-353

コンマを使って基底クラスのコンストラクタを呼べる

この記法はメンバ変数のコンストラクタを呼ぶときにも使う

double型のような基本型もコンストラクタを持つ

ということなので、
ABase() : m_x(0) {}
はABaseコンストラクタ(この場合は実装がないのでデフォルトコンストラクタと一緒)が呼び出された時に
メンバ変数であるm_xをゼロで初期化することになる。
→m_xはint型、Protected(基底クラスなのでPrivateにはなっていない)で宣言されている
→int型のような基本型はコンストラクタを持ち、”変数名()”という形式
→m_x(0) はm_xをゼロで初期化(”代入”ではなく!)することになる