C++ 为什么在使用继承C++;?

C++ 为什么在使用继承C++;?,c++,inheritance,C++,Inheritance,那我就叫它 当在main中调用Aopsi时,它被替换为我之前设置的值。 但当我调用另一个类时,值并没有被替换 比如说,, 玩家选择2,然后将Aopsi从0替换为2。 我试着在main和classA_之后的functionA_shot上找到它。 那么输出就不同了 Aopsionmain=2 AopsionA_shot=0 应该是 Aopsionmain=2 AopsionA_shot=2 我必须使用继承。如果我理解正确,您现在遇到的问题是,Aopsi是类的一个成员变量,对于您为分数a_操作和a_之

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

比如说,, 玩家选择2,然后将Aopsi从0替换为2。 我试着在
main
和class
A_之后的
function
A_shot
上找到它。 那么输出就不同了

Aopsi
on
main
=2

Aopsi
on
A_shot
=0

应该是

Aopsi
on
main
=2

Aopsi
on
A_shot
=2


我必须使用继承。

如果我理解正确,您现在遇到的问题是,
Aopsi
是类的一个成员变量,对于您为
分数
a_操作
a_之后的
类声明的每个实例都是唯一的。由于您声明
Aopsi
的方式是这样的,因此获得所描述的结果是完全有效的行为,因为
Aopsi
变量已通过调用
s.setAopsi(a.Akick())为对象
Score s
更新。但是,此调用不会在A之后更新
A_的
Aopsi
变量您认为应该的对象。要获得该行为,您必须像下面这样声明
Score

 s.setAopsi(a.Akick());

这将
Aopsi
声明为一个静态变量,它对继承它的所有
Score
对象和类都是相同的,为您提供了我认为您想要的行为。

您正在尝试使用继承来构造序列 分享成员国aopsi状态的相关行动。但是,您使用的是每个分数派生类的不同实例。这样,每个实例都将有自己的独立状态

您可以通过从
A_操作
派生的
A_之后生成
A_,只在A
之后创建
A_的实例,并在
A
上执行所有操作来保持结构

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;
    }

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

(对aopsi使用静态将不起作用,因为您不能为每个玩家设置aopsi)


顺便说一句,避免在头文件中使用命名空间std
。C++示例经常使用它来保持代码简短(这对于在别处没有使用的短片段是完全有效的)。

您是否尝试使用调试器?请只发布不工作的代码和您期望的结果。现在,你的描述和你发布的代码令人困惑。你说的是“工作”、“不工作”、“注释掉的行”和“未注释掉的行”,等等。你说你已经“将Aopsi设置在
s.setAopsi(b.Bkick())
”,但在你显示的代码中没有这样的语句。提供意味着提供其他人可以用来重新创建与您相同问题的代码。你没有提供,所以没有人可以帮助。请不要用“我上面写的是错误的,应该是这样”来更新。只要修改你写的内容,使其正确。
scoreA
是未初始化的。
static
不太可能是解决此问题的正确方法。尽管如此,OP还是值得学习。@BenVoigt我完全同意你的观点,我认为一个好的方法是完全调整课程本身的结构。。。
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;
    }

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