• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:仮想関数について困っています)

仮想関数について困っています

このQ&Aのポイント
  • C++を勉強中で仮想関数について困っています。クラスの継承において仮想関数を使うと、派生クラスのメンバ関数を呼び出すことができます。
  • しかし、テンプレートクラスを使用する場合、仮想関数がうまく動作しません。テンプレートクラスを使ってデータを管理する場合、正しい派生クラスのメンバ関数を呼び出す方法はありますか?
  • どなたか解決策をご存知の方がいらっしゃいましたら、教えていただけると助かります。

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

それは arrayクラスの中を見ないとわからないです. data[0] で参照が返っていれば大丈夫なはず.

mentalplus
質問者

お礼

多くの方回答ありがとうございました。 どうやら自分の勘違いだったようで、array<test*>がarray<test>になっていたようでした。 ご迷惑おかけして申し訳ありませんでした。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.4

arrayテンプレートはstd::vectorみたいなもんと思えばいいだろうという想定は付くにしても、そもそもdataの各要素のインスタンスはどうやって作ってますか?

すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

#1 はおかしい部分があるので補足: array の中身によっては, 「[] が参照を返す」としても駄目なことがあります. array の中で (オブジェクト自身を持つのではなく) 「オブジェクトへのポインタを持つ」ようにしていればできると思うけど. いずれにしても, array が「自作」である以上その中身はあなたにしか分かりません. そして, このコードがあなたの期待したように動くかどうかは完全に中身に依存します.

すると、全ての回答が全文表示されます。
  • titokani
  • ベストアンサー率19% (341/1726)
回答No.2

>array<test*> data; で、あるなら、 >data[0].run(); ではなくて、 data[0]->run(); と、なるのが普通かと思いますけど・・・。 #1さんと同じく、arrayの中身がわからないので、なんともいえないですね。

すると、全ての回答が全文表示されます。

関連するQ&A