A
仮想メソッドを持つというクラスを作成しましたdo_something
:
class A {
virtual int do_something() = 0;
}
B
サブクラスA
:
class B {
virtual int do_something() {
return 42;
}
}
私の主な機能のどこかで、これを行います。
vector<A> arr;
arr.push_back(B());
int val = arr[0].do_something();
do_something
ただし、純粋仮想関数であると文句を言うコンパイラエラーが発生します。これは、ベクトルが型のオブジェクトを含むように宣言したためでA
ありA
、抽象クラスであると思います。したがって、コンパイラは、が定義されているB
かどうかを確認するためにクラスを調べることを知りません。do_something
これを回避する方法はありますか?異なるタイプのオブジェクトのベクトルを保存できますか(共通の仮想関数を宣言しますが、共通のスーパークラスを使用します)?