2016-12-31 1 views
0

J'ai une classe de base (Tableau) avec une fonction (appelée mise à jour) et à l'intérieur de cette fonction, j'appelle une autre fonction appelée updateCustom.override et héritage

Je souhaite hériter de ma classe Base avec ma classe JeuTaquin et pouvoir remplacer la fonction updateCustom dans JeuTaquin. Donc dans ma main quand j'appelle la mise à jour de la fonction en utilisant un objet JeuTaquin, je veux faire démarrer mon updateCustom de JeuTaquin mais je ne sais pas comment faire!

Voici ma fonction de mise à jour à l'intérieur 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; 
} 

Dans mon Tableau de classe, ma fonction updateCustom est vide (mais il est déclaré). Dans ma classe de JeuTaquin, je passer outre ma fonction updateCustom comme ceci: (mais il n'a pas vraiment de voir ce qui est à l'intérieur de cette fonction)

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; 
    } 



} 

Je ne pouvais pas trouver des conseils sur internet, quand je lance ma mise à jour Fonctionne avec un objet JeuTaquin, il lance mon updateCustom vide de ma classe Parent au lieu de mon updateCustom de ma classe enfant (JeuTaquin). Merci pour l'aide.

+0

est '' updateCustom' virtual'? – Unimportant

+0

non, updateCustom n'est pas virtuel –

+0

Eh bien, il devrait être, lire à propos de 'virtual'. – Unimportant

Répondre

0

J'ai ajouté virtuel dans ma fonction updateCustom (seulement dans mon .h) et ça marche! Et quand je redéfinis mise à jour personnalisée, type I

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

au lieu de

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