我有一个带有函数的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。谢谢你的帮助。
答案 0 :(得分:0)
我在updateCustom函数中添加了virtual(仅在我的.h中)并且它有效!当我重新定义更新自定义时,我输入
void JeuTaquin<T>::updateCustom(char input)
而不是
void Tableau<T>::updateCustom(char input)