【发布时间】:2013-03-27 05:23:55
【问题描述】:
我有一个基类类型指针的 std::vector:
vector<Base*> baseList;
然后我将派生类类型推送到向量上:
Derived* derivedObject = new Derived();
baseList.push_back(derivedObject);
但是当我迭代列表并调用派生类从基类覆盖的函数时,不会调用派生类中的代码。我是否以正确的方式使用向量?
我的基类在声明其函数之前使用了 virtual 关键字,而派生类通过以下方式派生基类:
class Derived : public Base
知道我在这里做错了什么吗?
编辑:
调用我声明的函数:
typedef vector<App*>::iterator AppIterator;
AppIterator begin() { return l_Apps.begin(); }
AppIterator end() { return l_Apps.end(); }
我这样调用函数:
for (AppIterator it = begin(); it != end(); ++it)
{
(*it)->Initialize();
}
问题可能出在这里吗?
【问题讨论】:
-
对我来说看起来不错。你是如何调用函数的?
-
请仔细检查您尝试调用的函数是否标记为
virtual。 -
需要更多细节。用最小(ish)基础和派生类做一个模型,并检查你是否可以重复这个问题。如果不是,请与您的实际使用情况进行比较以了解原因;如果是,请在此处报告。
-
我同意凯文巴拉德的观点。确保您的派生类也为其功能使用虚拟关键字。
标签: c++ inheritance polymorphism derived