PTVIです。
脱線します。
class A
{
public:
Mutex m_x;
Mutex m_y;
const int m_e;
--その他のメンバ省略--
A( )
: m_x("ユニークな文字その1")
, m_y("ユニークな文字その2")
, m_e(100)
, --省略--
{ --省略-- }
A(int a)
: m_x("ユニークな文字その1")
, m_y("ユニークな文字その2")
, m_e(100)
, --省略--
{ --省略-- }
};
同じもの書かなきゃならないなんて面倒じゃないかと思ったことはある。
m_xがデフォルトコンストラクタで初期化された後、
initメンバ関数で再度初期化することになる。
m_xがコンストラクタでしか初期化できないものかもしれない。
ということかしら。
私はJavaを知りません。推測ですので嘘を言っているかもしれません。あしからず。
Javaでは : のところではメンバを初期化しない、
this( )と基底クラスのコンストラクタの呼び出しの重複を回避しているということ
かしら。
Javaを知らないので間違えているかもしれませんが
具体的に言うと以下のようになるということか?。
class B : X
{
public B( )
: // ここではメンバ変数の初期化が出来ない。
{ --省略-- }
public B(int a)
{
this(5.5); // Xのコンストラクタは、B(int)から直接は呼ばれない
// すでにthis(...)があるので、ここからXのコンストラクタを呼べない
}
public B(double a)
{
super(a); // Xのコンストラクタのコール
// すでにsuperがあるので、ここからBのコンストラクタを呼べない
}
public B(string a)
{
// thisもsuperも記述しなければ自動的にsuper(void)がコールされる。
}
};
脱線します。
class A
{
public:
Mutex m_x;
Mutex m_y;
const int m_e;
--その他のメンバ省略--
A( )
: m_x("ユニークな文字その1")
, m_y("ユニークな文字その2")
, m_e(100)
, --省略--
{ --省略-- }
A(int a)
: m_x("ユニークな文字その1")
, m_y("ユニークな文字その2")
, m_e(100)
, --省略--
{ --省略-- }
};
同じもの書かなきゃならないなんて面倒じゃないかと思ったことはある。
m_xがデフォルトコンストラクタで初期化された後、
initメンバ関数で再度初期化することになる。
m_xがコンストラクタでしか初期化できないものかもしれない。
ということかしら。
私はJavaを知りません。推測ですので嘘を言っているかもしれません。あしからず。
Javaでは : のところではメンバを初期化しない、
this( )と基底クラスのコンストラクタの呼び出しの重複を回避しているということ
かしら。
Javaを知らないので間違えているかもしれませんが
具体的に言うと以下のようになるということか?。
class B : X
{
public B( )
: // ここではメンバ変数の初期化が出来ない。
{ --省略-- }
public B(int a)
{
this(5.5); // Xのコンストラクタは、B(int)から直接は呼ばれない
// すでにthis(...)があるので、ここからXのコンストラクタを呼べない
}
public B(double a)
{
super(a); // Xのコンストラクタのコール
// すでにsuperがあるので、ここからBのコンストラクタを呼べない
}
public B(string a)
{
// thisもsuperも記述しなければ自動的にsuper(void)がコールされる。
}
};