首页 > 解决方案 > 为什么在调用 int main 和在使用继承 C++ 的类中值不同?

问题描述

#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在 class A_afterfunction和 on 上计算它A_shot。那么输出就不一样了。

Aopsimain= 2

AopsiA_shot= 0

应该

Aopsimain= 2

AopsiA_shot= 2

我必须使用继承。

标签: c++inheritance

解决方案


您正在尝试使用继承来构建共享成员 aopsi 状态的相关操作序列。但是,您正在使用每个 Score 派生类的不同实例。这样,每个实例都会有自己独立的状态。

您可以通过A_after从 派生A_action、仅创建 的实例A_after a并对其执行所有操作来保持您的结构a

a.setAopsi(a.Akick());
a.goalA(a.A_shot());

您可以为每个玩家执行此操作。还要确保scoreA = 0在您的类定义中进行初始化。

(从那以后你不能为每个玩家设置 aopsi)。

顺便说一句,避免using namespace std在头文件中。C++ 示例经常使用它来保持代码简短(这对于其他地方没有使用的短片段完全有效)。


推荐阅读