c++ - 为什么在调用 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());
}
我做了一些关于足球点球的简单游戏Aopsi
。Aopsi
是玩家 A 选择在哪里射击或稍后跳到哪里。
我设置了 Aopsi
s.setAopsi(a.Akick());
然后我在 Aopsi 调用时调用它main
,它替换为我之前设置的。但是当我在另一个类中调用时,值不会被替换。
例如,玩家选择 2,然后将 Aopsi 从 0 替换为 2。我尝试main
在 class A_after
function和 on 上计算它A_shot
。那么输出就不一样了。
Aopsi
开main
= 2
Aopsi
开A_shot
= 0
应该
Aopsi
开main
= 2
Aopsi
开A_shot
= 2
我必须使用继承。
解决方案
您正在尝试使用继承来构建共享成员 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++ 示例经常使用它来保持代码简短(这对于其他地方没有使用的短片段完全有效)。
推荐阅读
- spring - Spring Data JPA - NoSuchBeanDefinitionException
- karate - 空手道:匹配时将 JSON 转换为字符串([object Object])
- python - 在以值为条件的新熊猫列中加入列名
- php - 似乎不太了解如何使用构造函数
- azure-devops - 如何使用 XUnit (.Net Core 2.1) 和 AzureDevOps 进行自动化集成测试?
- javascript - RN - 如何创建组件并将其他组件放入其中
- c# - 如何调整无边框 MDI 表单的大小?
- python - 快速且不占用内存的 k 最近邻搜索
- javascript - 如何从用户 discord.js v12 中删除所有角色?
- laravel - Laravel 8 - 路由找不到控制器:目标类 [Auth\LoginController] 不存在