覆盖和继承

时间:2016-12-31 17:06:13

标签: c++ override overloading

我有一个带有函数的Base类(Tableau)(称为update),在该函数内部,我调用另一个名为updateCustom的函数。

我想用JeuTaquin类来修改我的Base类,并且能够覆盖JeuTaquin中的updateCustom函数。因此,当我通过使用JeuTaquin对象调用函数更新时,我希望从JeuTaquin开始我的updateCustom,但我不知道该怎么办!

这是我在Tableau中的更新功能:

template<class T>
void Tableau<T>::update()
{
int p1 = 1, p2 = 1;
int currentTurn = 1;
while(currentTurn!=tour || tour == 0){


    cout<<*this<<endl;

    updateCustom(getInput()); //HERE I CALL MY UPDATECUSTOM FUNCTION
    if(p2 == 1) 
        computerTurn();
    else
        cout<<"player 2 game end"<<endl;

    p1 = endTurn(plateau1);
    p2 = endTurn(plateau2);
    if(endCheck(p1))
        break;
    currentTurn++;
}
cout<<"game ended"<<endl;
}

在我的Tableau类中,我的函数updateCustom为空(但声明了它)。在我的JeuTaquin类中,我重写了我的updateCustom函数:(但是看看这个函数里面的内容并不重要)

template<class T>
void Tableau<T>::updateCustom(char input)
{
    int i, j;
    Case<T> *neighbours;
    while(true)
    {       
        neighbours = Tableau<T>::checkNeighbours(Tableau<T>::plateau1, i, j);
        if(input == 'z' && neighbours[0] !=nullptr)
        {
            swap(plateau1[i][j],plateau1[i-1][j]);
            cout<<"Mouvement OK"<<endl;
            break;
        }
        else if(input == 'd' && neighbours[1] !=nullptr)
        {
            swap(plateau1[i][j],plateau1[i][j+1]);
            cout<<"Mouvement OK"<<endl;
            break;
        }
        else if(input == 's' && neighbours[2] !=nullptr)
        {
            swap(plateau1[i][j],plateau1[i+1][j]);
            cout<<"Mouvement OK"<<endl;
            break;
        }
        else if(input == 'q' && neighbours[3] !=nullptr)
        {
            swap(plateau1[i][j],plateau1[i][j-1]);
            cout<<"Mouvement OK"<<endl;
            break;
        }


        cout<<"Mouvement IMPOSSIBLE"<<endl;
    }



}

我在互联网上找不到任何提示,当我用JeuTaquin对象运行我的更新功能时,它从我的父类运行我的空updateCustom而不是我的子类(JeuTaquin)的updateCustom。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

我在updateCustom函数中添加了virtual(仅在我的.h中)并且它有效!当我重新定义更新自定义时,我输入

void JeuTaquin<T>::updateCustom(char input)

而不是

void Tableau<T>::updateCustom(char input)