• ベストアンサー

引数のオブジェクト

C++のクラスを引数にするとき、そのコンストラクタがオーバーロードされている場合、その引数のところにオーバーロードされているパターンの型を指定できるのでしょうか? また、引数があるクラスで、そのクラスのコンストラクタに更に別のクラスが指定されている場合に、そのクラスのコンストラクタにその指定ができるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.2

>といった呼び出しができるかという質問です。 随分と質問が短かくなってますが。 Foo(XClass(3)); とかなら XClass オブジェクトから YClass オブジェクトへの暗黙的な キャストが行われるので合法ですが、int から YClass への暗黙的なキャスト方法は 用意されていないので、コンパイルエラーになると思われます。

noname#230240
質問者

補足

キャストというのはコンストラクタの呼び出しと考えてよいのでしょうか?

その他の回答 (2)

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.3

>キャストというのはコンストラクタの呼び出しと考えてよいのでしょうか? コンストラクタの呼び出しは XClass(3); で、キャストは (XClass)3; または static_cast<XClass>(3); キャスト演算子が実際にどのようにオブジェクト 3 に作用するかは XClass の実装次第です。

noname#230240
質問者

お礼

ありがとうございました。これで解決しました。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

>その引数のところにオーバーロードされている > パターンの型を指定できるのでしょうか? 質問の意図がよくわかりません 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 のインスタンスを生成したいということですか? 不完全でも良いので、したいことをコードで書くとアドバイスが得られるでしょう。

noname#230240
質問者

補足

ありがとうございます。 僕がしたいコードは、 class XClass{   …   public:   XClass(int) }; class YClass{   …   public:   YClass(const XClass&); }; void Func(YClass obj) { … } int main() {   Func(3);   return 0; } といった呼び出しができるかという質問です。

関連するQ&A