コンストラクターを宣言および定義する基本クラスがありますが、何らかの理由で、パブリックに派生したクラスがそのコンストラクターを認識していないため、派生クラスで転送コンストラクターを明示的に宣言する必要があります。
class WireCount0 {
protected:
int m;
public:
WireCount0(const int& rhs) { m = rhs; }
};
class WireCount1 : public WireCount0 {};
class WireCount2 : public WireCount0 {
public:
WireCount2(const int& rhs) : WireCount0(rhs) {}
};
int dummy(int argc, char* argv[]) {
WireCount0 wireCount0(100);
WireCount1 wireCount1(100);
WireCount2 wireCount2(100);
return 0;
}
上記のコードでは、WireCount1 wireCount1(100)
宣言はコンパイラによって拒否されます (「'WireCount1::WireCount1(int)' の呼び出しに一致する関数はありません」) が、 mywireCount0
とwireCount2
宣言は問題ありません。
に示されている明示的なコンストラクターを提供する必要がある理由を理解しているかどうかはわかりませんWireCount2
。コンパイラが のデフォルトのコンストラクタを生成し、WireCount1
そのコンストラクタがコンストラクタを隠しているWireCount0
ためですか?
参考までに、コンパイラはi686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5659)
.