如何从c ++中的另一个实例访问实例中的信息?

时间:2015-10-07 08:18:40

标签: c++ oop object instance

我刚开始学习OOP概念并帮助自己学习,我创建了一个Characters类。从这个类我已经创建了一个名为main的实例和一个名为monster的实例。这是该类的代码:

#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个生命值。

我该怎么做?

3 个答案:

答案 0 :(得分:1)

你需要的只是在攻击方法中传递Character的引用。 我认为你必须意识到价值传递和传递参考概念。如果没有,你可以阅读它here

void attack(Character &whatInstanceToAttack)  {

    whatInstanceToAttack.hitpoints -= 20;  //obviously not valid but how do i do this?

}

答案 1 :(得分:1)

是的,您可以从同一个类的另一个实例访问实例的变量。您需要使用对象的引用以确保更改反映在另一个实例中。所以这就是你的攻击功能应该是什么样的。

void attack(Character &c)
{
    c.hitpoints - = 20;
}

现在当你从main()函数调用main.attack(monster)时,怪物的hitpoints将减少20个。

作为旁注,将类的数据成员设为私有是一种良好的做法,以避免非法访问/修改数据。始终使用成员函数作为类实​​例的接口。

答案 2 :(得分:-1)

重载方法攻击,您可以根据需要传递值或引用。

虚空攻击(角色chr) 要么 虚空攻击(Character&amp; chr)