次のコードがあります(#include
s とusing namespace std
省略):
class A {
public:
void call(){callme();}
private:
virtual void callme() {cout << "I'm A" << endl;}
};
class B : public A {
private:
virtual void callme() {cout << "I'm B" << endl;}
};
class C : public B {
public:
virtual void callme(){ cout << "I'm C" << endl;}
};
int main(){
vector<A> stuff = {
A(), B(), C(),
};
stuff[0].call(); // output: I'm A
stuff[1].call(); // output: I'm A
stuff[2].call(); // output: I'm A
return 0;
}
コメントで述べたように、上記のプログラムの出力は次のとおりです。
I'm A
I'm A
I'm A
ただし、対応する要素が作成された型を C++ が自動的に認識するようにしてほしい。つまり、C++の出力が欲しい
I'm A
I'm B
I'm C
(つまり、コンパイラは適切なサブクラスを選択します。)
このシナリオでこれは可能ですか (つまり、すべての要素が a から出てくる場合vector
)?