我有以下代码(#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
)?