- ベストアンサー
引数のオブジェクト
C++のクラスを引数にするとき、そのコンストラクタがオーバーロードされている場合、その引数のところにオーバーロードされているパターンの型を指定できるのでしょうか? また、引数があるクラスで、そのクラスのコンストラクタに更に別のクラスが指定されている場合に、そのクラスのコンストラクタにその指定ができるのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>といった呼び出しができるかという質問です。 随分と質問が短かくなってますが。 Foo(XClass(3)); とかなら XClass オブジェクトから YClass オブジェクトへの暗黙的な キャストが行われるので合法ですが、int から YClass への暗黙的なキャスト方法は 用意されていないので、コンパイルエラーになると思われます。
その他の回答 (2)
- koko_u_
- ベストアンサー率18% (459/2509)
>キャストというのはコンストラクタの呼び出しと考えてよいのでしょうか? コンストラクタの呼び出しは XClass(3); で、キャストは (XClass)3; または static_cast<XClass>(3); キャスト演算子が実際にどのようにオブジェクト 3 に作用するかは XClass の実装次第です。
お礼
ありがとうございました。これで解決しました。
- koko_u_
- ベストアンサー率18% (459/2509)
>その引数のところにオーバーロードされている > パターンの型を指定できるのでしょうか? 質問の意図がよくわかりません void foo(AClass); というプロトタイプの関数があって AClass のコンストラクタが AClass::AClass() { /* ... */ } AClass::AClass(int) { /* ... */ } と複数あるときに foo(AClass(5)); と foo を呼び出したいということですか? >引数があるクラスで、 引数があるクラスとは何ですか? > そのクラスのコンストラクタに更に別のクラスが指定されている場合に、 AClass::AClass(BClass b) { /* .. */ } ということですか? > そのクラスのコンストラクタにその指定ができるのでしょうか? 「その指定」とは何の指定ですか? BClass のコンストラクタがやはり BClass::BClass() { /* ... */ } BClass::BClass(char) { /* ... */ } と複数あって、 AClass aObj(BClass('b')); と AClass のインスタンスを生成したいということですか? 不完全でも良いので、したいことをコードで書くとアドバイスが得られるでしょう。
補足
ありがとうございます。 僕がしたいコードは、 class XClass{ … public: XClass(int) }; class YClass{ … public: YClass(const XClass&); }; void Func(YClass obj) { … } int main() { Func(3); return 0; } といった呼び出しができるかという質問です。
補足
キャストというのはコンストラクタの呼び出しと考えてよいのでしょうか?