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
和classA_之后的functionA_shot
上找到它。
那么输出就不同了
Aopsi
onmain
=2
Aopsi
onA_shot
=0
应该是
Aopsi
onmain
=2
Aopsi
onA_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());