gpt4 book ai didi

c++ - 如何从基类 vector 到达派生类变量?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:42:24 24 4
gpt4 key购买 nike

#include <iostream>
#include <vector>

class Entity
{
public:
bool hinders_sight = false;
};

class Pillar : public Entity
{
public:
bool hinders_sight = true;
};

int main()
{
std::vector<Entity*> Entities;

Pillar pillar;

Entities.push_back(&pillar);

std::cout << pillar.hinders_sight << std::endl;
std::cout << Entities[0]->hinders_sight << std::endl;

return 0;
}

pillar.hinders_sight 返回 true(它应该如此)

但是

Entities[0]->hinders_sight 返回 false

如何从 vector 到达 pillarhinders_sight

最佳答案

现在正在发生的事情是,在您的派生类中有两个名为 hinders_sight 的变量,一个来自基类,另一个来自派生类。

这里有两种主要方法可以解决这个问题(我不建议在基类和派生类中为同一事物保留两个单独的变量),或者您可以使变量成为基类中的 protected /私有(private)变量,并且然后根据需要提供获取和存储变量的函数,或者您可以使 get_hinders_sight() 函数成为虚拟函数。

class Entity {
public:
Entity(bool hinders_sight_in = false)
: hinders_sight{hinders_sight_in} {}
bool get_hinders_sight() { return this->hinders_sight; }
private:
bool hinders_sight = false;
};

class Pillar : public Entity {
public:
Pillar() : Entity{true} {}
};

或者

class Entity {
public:
virtual bool get_hinders_sight() { return false; }
};

class Pillar : public Entity {
public:
bool get_hinders_sight() override { return true; }
};

关于c++ - 如何从基类 vector 到达派生类变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44408192/

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