首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用父类时访问子函数

在使用父类时访问子函数
EN

Stack Overflow用户
提问于 2013-04-25 10:26:50
回答 2查看 1.2K关注 0票数 0

我正在为大学的课程做作业,我和我的搭档有问题。我们正在制作的程序是一个游戏。

我们有几个类,它们都是从基类继承的,称为生物。这些都是玩家需要对付的敌人,他们都有自己的人工智能。有4种不同类型的子类,都在命名空间生物(包括父类、生物类)中,其中一个类只有它需要的特殊功能。这门课叫兔子。

现在,我的工作是根据需要调用AI函数。问题是,当我要求棋盘告诉我我得到了什么生物时,我并不总是知道我在喊什么类别。

所有的敌人都被保存为像这样的指针,在棋盘方块中:

代码语言:javascript
复制
    struct Square
    {   
        // Pointers to Morso class, where the enemy is saved
        Creature::Creature* creature;
        //Undeeded stuff removed

    };

现在,这一切都很好,直到我们需要访问特殊的功能。如果某些条件被填满,浦布会成倍增长。因此,在Pupu中,我需要调用几个函数来确保它正确地执行它的操作。

然而,问题来了。

我给我们的董事会类打电话给我我给它的坐标中的生物。

代码语言:javascript
复制
void GameEngine::GameEngine::runAI()
{
    Creature::Creature* creature= NULL;

    for(unsigned int y = 0; y < dimY; y++)
    {
        for(unsigned int x = 0; x < dimX; x++)
        {
            Coordinate target;

            target.setX(x);
            target.setY(y);

            creature= board_->returnCreature(target);

            //If there is a creature in the target, run its AI
            if(creature!= NULL)
            {

                //If it is, check special procedures
                if(creature->returnType() == "bunny")
                {
                    bunnyReproduce(creature);
                }

                creature->ai();
            }

        }//for x

    }//for y
}

现在,:

代码语言:javascript
复制
void GameEngine::GameEngine::bunnyReproduce(Ccreature::Creature* creature)
{

//Checks that it really is a bunny
if( creature->returnType() != "bunny"){ return; }

//Check is there another bunny near
creature->checkForMate();


}

问题是,在这一点上,生物不能调用checkForMate,它是兔子的公共成员,而不是生物。我们需要把虚拟功能变成生物吗?

我试着把checkForMate变成了生物::兔子,但是由于我尝试给它的原始值是生物类,所以我不能这样做。我们是否需要在生物类中创建一个空虚拟函数,然后重写它,Bunnyclass?

我使用QT5.0.2运行2.7.0。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-25 10:54:47

您应该将virtual函数reproduce添加到Creature类中,并在Bunny或以后添加到游戏中的任何其他生物中实现它。这样任何生物都会以自己的方式繁殖。在这种情况下,你甚至不需要检查生物类型。因为如果您有一些不可复制的生物,那么您只需将reproduce实现为空方法,就什么也不做了。

票数 3
EN

Stack Overflow用户

发布于 2013-04-25 11:18:09

理想情况下,你的引擎根本不需要关心它使用的是哪种生物。

如果你想让兔子在ai()的每一步上复制,为什么不在兔子的ai()上做呢?

毕竟,决定何时繁殖不是兔子的责任吗,而不是某种强大的外部引擎?

代码语言:javascript
复制
void Creature::Bunny::ai()
{
    if (niceMateNearby())
        reproduce();
    else
        eatCarrotsAndJumpAround();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16212307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档