2013-04-04 60 views
0

我有一个std ::基类型的指针向量:储存在基本类型的矢量导出对象

vector<Base*> baseList; 

我推派生类型到向量:

Derived* derivedObject = new Derived(); 
baseList.push_back(derivedObject); 

但是当我迭代列表并调用派生类从基类重写的函数时,派生类中的代码不会被调用。我是否以正确的方式使用矢量?

我的基类有使用虚拟关键字声明它的功能之前和派生类派生的基类:

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

看起来很好。你如何调用函数? – 2013-04-04 22:46:12

+7

请仔细检查您尝试呼叫的功能是否标记为“虚拟”。 – 2013-04-04 22:47:18

+0

告诉我们一些代码 – taocp 2013-04-04 22:47:56

回答

1

我试着用迭代的东西...此代码工作正常,我,因此,如果您的问题仍然存在,考虑不同的编译器=)

#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<>来投射指针,即使它违背了使用虚拟方法的整个观点。祝你好运。

相关问题