作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
#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
= 2
Aopsi
A_shot
= 0
应该是
Aopsi
在 main
= 2
Aopsi
A_shot
= 2
我必须使用继承。
最佳答案
如果我理解正确,你遇到的问题是当前 Aopsi
是类的成员变量,它对于你为 Score
声明的每个实例都是唯一的A_action
和 A_after
类。由于您声明 Aopsi
的方式使它成为这种方式,因此您将获得您描述的结果是完全有效的行为,因为 Aopsi
变量已为对象更新Score s
通过调用 s.setAopsi(a.Akick());
。但是,此调用不会像您认为的那样更新 A_after A;
对象的 Aopsi
变量。要获得该行为,您必须像这样声明 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++ - 为什么在使用继承 C++ 的类中调用 int main 时值不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50431442/
我是一名优秀的程序员,十分优秀!