gpt4 book ai didi

c++ - 派生类对象覆盖对象 vector 中基类的函数

转载 作者:行者123 更新时间:2023-11-30 02:49:35 25 4
gpt4 key购买 nike

所以当派生类存储在其基类的数组中时,我遇到了调用派生类的覆盖函数的问题。

基类叫做Obstacle,派生类是Cliff。 Obstacle有一个drawToBackground虚函数,Cliff继承Obstacle还有一个drawToBackground函数,都是void。

然后我有一个障碍 vector ,称为 obstsVec。在这个 vector 中,我存储了一堆障碍物和一个悬崖。现在说悬崖是 vector 的第五个元素。当我调用 obstsVec[5].drawToBackground();它从 Obstacle 类而不是悬崖类调用 drawToBackground 函数。

这是 c++ 中的一个特性还是我只是声明了一些错误?

谢谢

最佳答案

您的类(class)可能类似于:

#include <iostream>
#include <vector>

class Obstacles {
public:
Obstacles() {};
virtual void drawToBackground() {
std::cout << "Obstacle ";
}
};

class Cliff : public Obstacles {
public:
Cliff() : Obstacles() {};
virtual void drawToBackground() {
std::cout << "Cliff ";
}
};



int main(int argc, char* argv[]) {
std::vector<Obstacles*> vec;
vec.push_back(new Obstacles());
vec.push_back(new Cliff());
vec[1]->drawToBackground();
delete vec[1];
delete vec[0];
vec.clear();
}

您在上面提到了数组...请确保永远不要以多态方式使用数组,因为这会导致未定义的行为。

关于c++ - 派生类对象覆盖对象 vector 中基类的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21120285/

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