#include <iostream>
using namespace std;
class Score{
public :
int scoreA,Aopsi=0;
void setAopsi(int a){
this->Aopsi = a;
}
void goalA(int a){
if (a==1)scoreA = scoreA + 1;
}
};
class A_action: public Score{
public :
int Akick(){
int opsi;
cout << "Team A Select where to kick : ";
cin >> opsi;
return opsi;
}
};
class A_after: public Score{
public :
int A_shot(){
cout << Aopsi <<endl;
int opsiA = 0; //i update the code for shorter code, so if goal opsiA = 1
return opsiA; //opsiA and Aopsi is different
}
};
int main(){
Score s;
A_action a;
A_after A;
s.setAopsi(a.Akick());
cout << s.Aopsi <<endl;
s.goalA(A.A_shot());
}
我制作了一些关于“足球处罚”的简单游戏
我有
Aopsi
。 Aopsi
是玩家A选择在何处射击或在以后跳跃的地方。我将Aopsi设置为
s.setAopsi(a.Akick());
那我叫它
当Aopsi调用
main
时,它替换为我之前设置的内容。但是当我在另一个类中调用时,值不会被替换。
例如,
玩家选择2,然后将Aopsi从0替换为2。
我尝试在
main
和类A_after
函数A_shot
上引用它。然后输出是不同的。
Aopsi
上的main
= 2Aopsi
上的A_shot
= 0应该
Aopsi
上的main
= 2Aopsi
上的A_shot
= 2我必须使用继承。
最佳答案
如果我理解正确,那么您遇到的问题是,当前Aopsi
是该类的成员变量,对于您为Score
A_action
和A_after
类声明的每个实例都是唯一的。由于您声明Aopsi
的方式是这样的,因此获得描述的结果是完全正确的行为,因为已通过调用Aopsi
为对象Score s
更新了s.setAopsi(a.Akick());
变量。但是,此调用不会像您认为的那样更新Aopsi
对象的A_after A;
变量。要获得该行为,您将必须像这样声明Score
:
class Score{
public :
int scoreA = 0;
static int Aopsi = 0;
void setAopsi(int a){
this->Aopsi = a;
}
void goalA(int a){
if (a==1)scoreA = scoreA + 1;
}
};
这将
Aopsi
声明为一个静态变量,该变量对于继承它的所有Score
对象和类都是相同的,从而为您提供了我希望的行为。关于c++ - 为什么在调用int main和使用继承C++的类中值会有所不同?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50431442/