переопределение и наследование

У меня есть базовый класс (Tableau) с функцией (называется update), и внутри этой функции я вызываю другую функцию под названием updateCustom.

Я хочу унаследовать мой базовый класс с моим классом JeuTaquin и иметь возможность переопределить функцию updateCustom внутри JeuTaquin. Поэтому в основном, когда я вызываю обновление функции с помощью объекта JeuTaquin, я хочу, чтобы мой updateCustom от JeuTaquin начинался, но я не знаю, как это сделать !

Вот моя функция обновления внутри 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;
}

В моей таблице классов моя функция 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 из моего родительского класса вместо моего updateCustom из моего дочернего класса (JeuTaquin). Спасибо за помощь.

1 ответ

  1. Я добавил virtual в функции updateCustom (только в моей .h) И это работает ! И когда я переопределяю пользовательские обновления, я печатаю

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

    вместо

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