#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上引用它。
然后输出是不同的。
Aopsi上的main = 2
Aopsi上的A_shot = 0

应该
Aopsi上的main = 2
Aopsi上的A_shot = 2

我必须使用继承。

最佳答案

如果我理解正确,那么您遇到的问题是,当前Aopsi是该类的成员变量,对于您为Score A_actionA_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/

10-11 11:24