【发布时间】:2012-02-05 08:33:20
【问题描述】:
我想在一个向量中存储几个类的实例。由于所有类都继承自同一个基类,这应该是可能的。
想象一下这个程序:
#include <iostream>
#include <vector>
using namespace std;
class Base
{
public:
virtual void identify ()
{
cout << "BASE" << endl;
}
};
class Derived: public Base
{
public:
virtual void identify ()
{
cout << "DERIVED" << endl;
}
};
int main ()
{
Derived derived;
vector<Base> vect;
vect.push_back(derived);
vect[0].identify();
return 0;
}
我希望它打印“DERIVED”,因为“identify”方法是虚拟的。相反,'vect[0]' 似乎是一个 'Base' 实例,它会打印
基础
我想我可以以某种方式编写自己的容器(可能从向量派生)能够做到这一点(也许只保存指针......)。我只是想问一下是否有更多的 C++ish 方法可以做到这一点。而且我希望完全兼容矢量(只是为了方便其他用户使用我的代码)。
【问题讨论】:
-
我想知道如果你创建一个带有纯虚函数
identify的基类,然后让你的Base和Derived都继承自该基类会发生什么。 -
@Mr Lister 感谢您的评论,但这不会改变结果。
-
另见this。
标签: c++ polymorphism object-slicing