gpt4 book ai didi

c++ - 将派生对象存储在基本类型的 vector 中

转载 作者:行者123 更新时间:2023-11-28 07:41:10 24 4
gpt4 key购买 nike

我有一个基类类型指针的 std::vector:

vector<Base*> baseList;

然后我将派生类类型推送到 vector 上:

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

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

我的基类在声明其函数之前使用了 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();
}

问题会不会出在这里?

最佳答案

我用迭代器试过了......这段代码对我来说工作正常,所以如果你的问题仍然存在,请考虑不同的编译器 =)

#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<> 来转换指针,即使它破坏了使用虚拟方法的全部意义。祝你好运。

关于c++ - 将派生对象存储在基本类型的 vector 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15823025/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com