A
(抽象基本クラス)を継承する4つのクラスB,C,D,E
があるとします。 また、内容が B,C,D,E
のオブジェクトを指すA*
のコンテナ(std::vector
)があります。 ここにいくつかの規則があります: B
オブジェクトとC
オブジェクトが対話する場合、それらはベクトルから取り除かれ、代わりにD
オブジェクトが作成されます。多態性とC++でのオブジェクト型の取得
また、C + D = E
は今、私がランダムに言ったベクトルの内容のいずれかを選択したとします。相互作用の仕組みを実装するためにどのオブジェクトがどのタイプであるかを知ることはどうすればよいでしょうか?
注:typeid
演算子、動的キャストまたはフラグは使用しません。その他のソリューション?ここで
は、いくつかのコード
#include <iostream>
class A {
protected:
int v;
public:
A(){}
~A(){}
};
class B :public A {
public:
B(){}
~B(){}
};
class C : public A {
public:
C(){}
~C(){}
};
class D : public A {
public:
D(){}
~D(){}
};
class E : public A {
public:
E(){}
~E(){}
};
int main()
{
std::vector<A*> container;
return 0;
}
どのように相互作用機能(複数可)を実装しているのですか?
を行うには、仮想関数を使用することができ、([、最小完全、かつ検証例]を作成してみてくださいhttp://stackoverflow.com/help/mcve)をご覧ください。 –
* "interact"とは何ですか?そして、あなたが知っているアイテムの位置は、それらが "相互作用する" *ときにどのように取り除かれるのですか? – StoryTeller
「get object type」に関しては、特にC++では実行時のオーバーヘッドが発生します。仮想関数を使用して異なるクラスの動作を異なる方法で処理する設計は、通常、実行する方法です。 –