アイテムのコレクション「ItemA」を含むクラス「BaseA」があるとします。ここで、「BaseA」を拡張して機能を追加したいので、「BaseA」から「DerivedA」を派生させます。「DerivedA」の特徴の 1 つは、「ItemA」アイテムではなく、より洗練された「DerivedITemA」アイテムを処理する必要があることです。
class BaseA {
protected:
vector<ItemA> x;
void m1(int i) { x.m1(i); }
};
class ItemA {
protected:
void m1(int i) { ... }
};
class DerivedItemA : public ItemA {
void m2(int i) { ... }
};
今、私はこの種の何かを処理したいと思います:
class DerivedA : public BaseA {
vector<DerivedItemA> x;
void m2(int i) { x[i].m2(); }
};
つまり、Derived クラスで派生アイテムを処理します。上記の x の定義は、BaseA のものと衝突するため、正しくありません。しかし、アイデアは、x を処理する BaseA のすべてのメソッドを、ItemA 要素を処理し、DerivedItemA 型のデータの余分な複雑さを処理するための DerivedA の拡張メソッドを持っている限り、再利用できるようにしたいということです。
なにか提案を?私の現在の考えは、x の新しいデータ型 (たとえば、VectorOfItemA) を定義し、そこから VectorOfDerivedItemA を派生させることです。よりシンプルでより良い解決策があるのだろうか。
ありがとう