gpt4 book ai didi

c++ - 在从抽象基类继承的类中添加方法?

转载 作者:行者123 更新时间:2023-11-28 04:26:36 25 4
gpt4 key购买 nike

我有如下代码

class GameObject
{
public:
virtual void update(...) = 0;
virtual void render(...) = 0;
};

class Sprite : public GameObject
{
public:

Sprite();
~Sprite()
{

}

void setSrcRect()noexcept
{
//Some code
}

void setDstRect()noexcept
{
//Some code
}

uint32_t getWidth() const noexcept { return width_; }
uint32_t getHeight() const noexcept { return height_; }

virtual void update(...) override
{
//Some code
}

virtual void render(...) override
{
//Some code
}
};

稍后我会像这样创建对象

GameObject* obj = new Sprite();

问题是我无法调用像这样的方法

obj->getWidth();

我可以在 GameObject 中添加这些方法,但我想保留它的纯接口(interface)。只有纯虚方法。我保持这样的 GameObject,因为它会在以后的游戏中有更多对象时给我带来优势。

我可以存储它们

std::vector<GameObject*> actors;

在渲染中我可以做到

 for(const auto actor: actors)
{
actor->render();
}

此外,目前的 sprite 可能还有一个 GameObject SpriteSheet 等等。我可以做些什么来实现这一目标?保持 GameObject 不变,但向从其继承的类添加方法。

我知道 Sprite 的类型仍然是 GameObject,方法调用只能在运行时解析。所以我要求任何替代方法来实现这一点?

最佳答案

使用dynamic_cast :

auto sprite_game_obj = dynamic_cast<Sprite*>(obj);
if(sprite_game_obj) sprite_game_obj->getWidth()

或较短的

dynamic_cast<Sprite*>(obj)->getWidth()

Here's a sample code snippet to show it in usage.

关于c++ - 在从抽象基类继承的类中添加方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54175012/

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