gpt4 book ai didi

c++ - 为什么在使用继承 C++ 的类中调用 int main 时值不同?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:40:59 25 4
gpt4 key购买 nike

#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());
}

我制作了一些关于足球点球的简单游戏我有 AopsiAopsi 是玩家 A 选择在哪里射击或稍后跳到哪里。

我打开 Aopsi

 s.setAopsi(a.Akick());

那我就叫它当 Aopsi 调用 main 时,它被替换为我之前设置的。但是当我调用另一个类时,值没有被替换。

例如,一个玩家选择 2,然后 Aopsi 从 0 替换为 2。我尝试在 main 和类 A_after 函数 A_shot 中计算它。那么输出就不同了。

Aopsimain = 2

Aopsi A_shot = 0

应该是

Aopsimain = 2

Aopsi A_shot = 2

我必须使用继承。

最佳答案

如果我理解正确,你遇到的问题是当前 Aopsi 是类的成员变量,它对于你为 Score 声明的每个实例都是唯一的A_actionA_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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com