如何从C++中的另一个实例访问实例中的信息?
问题描述:
我刚刚开始学习OOP概念并帮助自己学习,我创建了一个Characters类。从这门课我做了一个叫做main的实例和一个叫做monster的实例。这里是该类的代码:如何从C++中的另一个实例访问实例中的信息?
#include <iostream>
#include <string>
using namespace std;
class Character {
public:
string name;
float health;
int attackLevel;
int defenseLevel;
void setAttr(string sName,float sHealth, int sAttackLevel, int sDefenseLevel) {
name = sName;
health = sHealth;
attackLevel = sAttackLevel;
defenseLevel = sDefenseLevel;
}
void attack(int whatInstanceToAttack) {
whatInstanceToAttack.hitpoints -= 20; //obviously not valid but how do i do this?
return whatInstanceToAttack;
}
int defend(string defend) {
int damageRelieved = defenseLevel * 2;
return damageRelieved;
}
};
int main() {
Character main;
Character monster;
main.setAttr("Rafael",200,100,30);
monster.setAttr("Monster1",30,40,30);
cout << "Default Values for Raf are;" << endl;
cout << main.name << endl;
cout << main.health<< endl;
cout << main.attackLevel << endl;
cout << main.defenseLevel << endl;
cout << "Default values for monster are" << endl;
cout <<monster.name << endl;
cout <<monster.health << endl;
cout << monster.attackLevel<< endl;
cout << monster.defenseLevel << endl;
return 0;
}
基本上我想要做的就是通过主实例访问怪物实例。我想通过运行攻击方法来做到这一点。所以如果我运行
main.attack(monster);
然后我想让怪物失去20点生命值。
我该如何去做这件事?
答
重载方法攻击,您可以按照您的要求传递值或引用。
无效攻击(字符CHR) 或 无效攻击(字符& CHR)
+0
'无效攻击(Character Chr)'不起作用。重点是更改实例中的值。所以按价值调用不会有任何意义。 –
答
是的,你可以从同一类的其他实例访问实例的变量。您需要使用对象的引用来确保更改反映在其他实例中。所以这里是你的攻击函数应该是什么样子。
void attack(Character &c)
{
c.hitpoints - = 20;
}
现在,当您从main()
函数调用main.attack(怪物),怪物的hitpoints
将得到由20
递减作为一个侧面说明,它被认为是一个很好的做法,使一类私人数据成员,以避免非法访问/修改数据。始终使用成员函数作为您的类实例的接口。
如果你不通过一个'int'而是一个'Character&'(引用一个字符)来'攻击',它应该会更好。 –
只是注意到你试图让你的'attack'函数返回一个'int'值,因为'attack'已被声明为'void'函数(即它没有返回值),所以这将不起作用。有一些关于函数参数和返回类型的阅读[这里](http://www.cplusplus.com/doc/tutorial/functions/)可能会有所帮助。 – Laserbreath