gpt4 book ai didi

c++ - 使用具有指向派生类对象的指针的基类指针数组调用派生类方法

转载 作者:太空宇宙 更新时间:2023-11-04 13:08:12 26 4
gpt4 key购买 nike

我有一个基类 Player 和两个派生类 HumanComputerPlayer 是一个抽象类,它有一个纯虚方法PlayMove

现在,在 Game 类中,我想要一个包含游戏中所有玩家的数组。很少有玩家属于人类类型,其他玩家属于计算机类型。我想以这种方式实现它 - 对于数组中的每个玩家,我将调用 PlayMove 并根据播放器的类型,它自己的 PlayMove 应该接到电话。

例如,说数组 = {humanPlayer, computerPlayer}array[0].PlayMove() 应该落在 Human::PlayMove()array[1].PlayMove() 应该落在 Computer::PlayMove()

--

我做了什么-

class Game
{
Human &h;
Computer &c;
Player **allPlayers;
}

Game::Game()
{
h = new Human();
c = new Computer();
// problem is occuriung in following three line
allPlayers = new (Player*)[2];
allPlayers[0] = h;
allPlayers[1] = c;
}

我知道

Base *b;
Derived d;
b = &d;

这行得通。除了我需要指针数组之外,这种情况有何不同?

(很抱歉问题的标题很长。如果可以,请建议一个新标题)

最佳答案

我在您的代码中发现了几个错误。我已经在下面的代码中更正了这个错误,

class Player
{};
class Human : public Player
{};
class Computer : public Player
{};

class Game
{
public:
Game();
Human *h;
Computer *c;
Player **allPlayers;
};

Game::Game()
{
h = new Human();
c = new Computer();
// Following three lines are just fine
allPlayers = new Player*[2];
allPlayers[0] = h;
allPlayers[1] = c;
}

引用必须在构造初始化列表中初始化。也不允许引用临时对象,所以

"Game::Game():h(new Human),c(new Computer)"

是不允许的。解决方案是使用指针 h 和 c 而不是引用。

关于c++ - 使用具有指向派生类对象的指针的基类指针数组调用派生类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41199546/

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