#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
= 2 上的 main
Aopsi
= 0
A_shot
应该是
Aopsi
= 2 上的 main
Aopsi
= 2
A_shot
我必须使用继承。
答案 0 :(得分:0)
如果我理解正确,那么您遇到的问题是,当前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
对象和类都是相同的,为您提供我认为您想要的行为。
答案 1 :(得分:0)
您正在尝试使用继承来构建序列 分享成员aopsi状态的相关行动。但是,您使用的是每个Score派生类的不同实例。这样,每个实例都将拥有自己独立的状态。
您可以通过从A_after
派生A_action
来保持您的结构,只创建A_after a
的实例,并在a
上执行所有操作。
a.setAopsi(a.Akick());
a.goalA(a.A_shot());
这可以为每个玩家做。还要确保在类定义中初始化scoreA = 0
。
(对aopsi使用static不起作用,因为你不能为每个玩家设置aopsi。)
顺便说一句,请避免在头文件中使用using namespace std
。 C ++示例通常使用它来保持代码简短(这对于其他地方没有使用的短片段非常有效。)