c++ - 在其声明文件之外使用对象 (C++)

标签 c++ class object scope static

(这个问题可能已经被问得很频繁了,我对这次转发感到抱歉,但我发现的任何东西都没有帮助我,因为我是 c++ 的初学者)

所以这是一个例子来说明我的问题

我有类(class)怪物

class Monster{
public:
Monster();

void attack();

private:
int _health;
int _damage;
};

我有类(class)水平

class Level{
Level();
};

我在我的“main.cpp”中创建了类 Monster 中的对象“snake”

#include "Monster.h"

int main(){

Monster snake;

}

如果我想在我的“Level”类中使用“snake”,我该怎么办?如果我想做“snake.attack();”例如在“Level.cpp”里面?

如果我在“Level.cpp”中再次声明它,它将是一个具有自己属性的独立对象,不是吗?

直到现在,我一直将我的类的成员函数设为静态,所以我可以做“Monster::attack();”在我的程序中的任何地方,但使用这种技术,我不能让多个对象根据它们的属性(snake1、snake2、bat1 等...)做不同的事情

提前感谢您的帮助! (对于可能重复出现的问题感到抱歉)

最佳答案

假定这些片段是您的 .h 文件。

你的 level.cpp 应该是这样的:

#include "level.h"   // its own header
#include "monster.h" // header with Monster::attack() declaration

Level::DoAttack(Monster& monster) { // using snake as parameter.
  health = health - monster.attack(); // monster hits us, subtract health.
}

monster.h 会是

class Monster{
public:
  Monster();

  void attack();

private:
  int _health;
  int _damage;
};

和怪物.cpp

Monster::attack() {
  // code to calculate the attack
}

关于c++ - 在其声明文件之外使用对象 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38545805/

相关文章:

C++:尝试在二进制到十进制转换器中多次将非常大的整数加在一起,而您的输入是字符串值

c++ - 错误 LNK2019 : unresolved external symbol _lbfgs_ within GPLVM code

java - 非静态变量 this 不能从静态内容 Java 中引用

javascript - 如何检查 JavaScript 对象是否为 DOM 对象?

c++ - 康威生命游戏 C++ 的包装

c++ - boost 内存映射文件 : they go to disk instead of RAM 的问题

java - 抽象类中 LinkedHashMap 的初始容量应该始终为零吗?

c++ - (C++) OOP - 用类扩展 - 初学者的困境

python - 有没有办法让numpy矩阵来存储对象?

c++ - 在哪里声明这个记录器对象?