※ ChatGPTを利用し、要約された質問です(原文:仮想関数について困っています)
仮想関数について困っています
このQ&Aのポイント
C++を勉強中で仮想関数について困っています。クラスの継承において仮想関数を使うと、派生クラスのメンバ関数を呼び出すことができます。
しかし、テンプレートクラスを使用する場合、仮想関数がうまく動作しません。テンプレートクラスを使ってデータを管理する場合、正しい派生クラスのメンバ関数を呼び出す方法はありますか?
どなたか解決策をご存知の方がいらっしゃいましたら、教えていただけると助かります。
仮想関数について困っています
C++を現在勉強中でその中で困ったことができました。
仮想関数についてまだ分かっていないことが多いのですが、一応以下のように使うものだと学びました。
class test{
public:
virtual void run(){
std::cout<<"testクラス"<<std::endl;
}
};
class test_sub:public test{
public:
void run(){
std::cout<<"test_subクラス"<<std::endl;
}
};
int main(){
test *t_s;
t_s=new test_sub;
t_s->run();
}
※includeは省略させていただきます
こうすれば「test_subクラス」と出力されるはずです。
そこで本題なのですが自作のarrayクラスのようなものはテンプレートクラスになっているのですが
array<test*> data;
data[0].run();
のように使うと「testクラス」と表示されてしまいます。
これを解決する方法は何かないでしょうか?
ご存じの方がいましたら教えていただけると助かります。
お礼
多くの方回答ありがとうございました。 どうやら自分の勘違いだったようで、array<test*>がarray<test>になっていたようでした。 ご迷惑おかけして申し訳ありませんでした。