class A{
public:
void Loop(){}
}
class B : public A{
public:
void Loop(){
exit();
}
}
のようにA,Bを用意して、
vector<A> Vec;
B testB;
Vec.push_back( testB );
Vec[0].Loop();
としたときに、Vec[0].Loop() では、Vec[0]はBなのに、AのほうのLoopが呼ばれますよね?
これを、AのときはAのLoop、BのときはBのLoopが呼ばれるようにするにはどのようにすればよいのでしょうか?
宜しくお願いします。
vector<A> ですか?本当に?
これではスライシングが起こってしまうので期待通りの動きはしませんよ。
vec[0] には testB の一部 (A 部分) だけしか入っていません。
polymophic な vector が欲しい場合は vector<A*> 等にする必要があります。
スマートポインタと併用すると吉。
>polymophic な vector が欲しい場合は vector<A*> 等にする必要があります。
さらに、Loop() を virtual にする必要があります。
すみません。また、追加。
さらに A のデストラクタを virtual にする必要があります。
そうしないと、
A *a = new B;
delete a;
としたときに、正しくデストラクトされません。
ツイート | ![]() |