我有一个基类类型指针的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();
}
问题可能在这吗?
答案 0 :(得分:1)
我用iterator尝试了这个东西...这个代码对我来说很好,所以如果你的问题仍然存在,请考虑不同的编译器=)
#include <iostream>
#include <vector>
class Base
{
public:
virtual void f()
{
std::cout << "Base\n";
}
};
class Derived: public Base
{
public:
virtual void f()
{
std::cout << "Derived\n";
}
};
int main()
{
std::vector<Base*> s;
s.push_back(new Base());
s.push_back(new Derived());
s.push_back(new Base());
s.push_back(new Derived());
s.push_back(new Base());
s.push_back(new Derived());
for (std::vector<Base*>::iterator it = s.begin(); it != s.end(); ++it)
{
(*it)->f();
}
return 0;
}
我的输出:
Base
Derived
Base
Derived
Base
Derived
你也可以尝试按dynamic_cast<>
来强制转换指针,即使它违背了使用虚方法的全部要点。祝你好运。