2016-12-31 2 views
0

У меня есть базовый класс (Tableau) с функцией (называемой обновлением) и внутри этой функции, я вызываю другую функцию, называемую 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; 
} 

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

+0

ли '' updateCustom' virtual'? – Unimportant

+0

нет, updateCustom не является виртуальным –

+0

Ну, это должно быть, читать о 'virtual'. – Unimportant

ответ

0

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

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

вместо

void Tableau<T>::updateCustom(char input) 
Смежные вопросы