gpt4 book ai didi

c++ - (初学者)C++关于继承

转载 作者:行者123 更新时间:2023-11-28 00:17:54 25 4
gpt4 key购买 nike

我正在尝试解决 C++ 中有关继承的问题,并想知道如何正确地进行处理。

我设置了 3 个类: - 敌人(具有成员数据:int Damage、int Health 和 int Level) - 狼 - 熊

我的继承设置方式是:Wolf is-a Enemy and Bear is-a Enemy。换句话说,Wolf 和 Bear 都继承自 Enemy。

我想设置我的程序,这样当我像这样创建一个新的 Enemy 时:

Enemy anEnemy; 

然后在 Enemy::Enemy() 构造函数中,它将随机决定敌人是狼还是熊。

如何解决这个问题?我知道我必须在 Enemy::Enemy() 构造函数中生成一个随机数,并根据随机数的结果将敌人变成熊或狼。但我就是想不通如何将它(敌人)“变成狼或熊”。

任何帮助将不胜感激。谢谢!

最佳答案

要在运行时随机决定类型,然后为了类型安全,您实际上必须使用动态分配,例如

Enemy* p_enemy = random_enemy();

// Use p_enemy here, e.g. p_enemy->make_noises(), then:
delete p_enemy;

其中 random_enemy 是一个类似的函数

auto random_enemy()
-> Enemy*
{
return (my_random_number() > 0.5? new Wolf : new Bear);
}

然而,正如您会发现的那样,在许多/大多数情况下,手动删除 很难做到正确。因此,通常通过使用 std::unique_ptrstd::shared_ptr 等智能指针来自动化。那么使用代码可能如下所示:

unique_ptr<Enemy> p_enemy = random_enemy();

// Use p_enemy here, e.g. p_enemy->make_noises(), then it auto-deletes.

还有类似的功能

auto random_enemy()
-> unique_ptr<Enemy>
{
return unique_ptr<Enemy>(
my_random_number() > 0.5? new Wolf : new Bear
);
}

关于c++ - (初学者)C++关于继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29088854/

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