使用其声明文件之外的对象(C ++)

时间:2016-07-23 19:44:02

标签: c++ class object scope static

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

所以这是一个显示我的问题的例子

我有班级怪物

class Monster{
public:
Monster();

void attack();

private:
int _health;
int _damage;
};

我有班级等级

class Level{
Level();
};

我在“main.cpp”

中创建了Monster类中的对象“snake”
#include "Monster.h"

int main(){

Monster snake;

}

现在,如果我想在“Level”课程中使用“snake”,我该怎么办?如果我想做“snake.attack();”在“Level.cpp”中,例如?

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

我一直把我的类的成员函数保持为静态,所以我可以做“Monster :: attack();”在我的程序中的任何地方,但有了这个tachnique我不能有多个对象做不同的事情取决于他们的属性(snake1,snake2,bat1等...)

提前感谢您的帮助! (并对可能重新审核的问题表示抱歉)

3 个答案:

答案 0 :(得分:1)

假设那些剪辑是你的.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;
};

和monster.cpp

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

答案 1 :(得分:0)

我无法完全理解你的问题。但是从我理解的内容来看。我想你想要访问一个在main()中实例化的Monster对象,以便在level里使用。所以,这是你可以做的。在里面添加一个构造函数将一个怪物对象作为参数的等级类。然后实例化一个关卡对象并将怪物对象传递给它。就像这样, 等级l =新等级(蛇);

答案 2 :(得分:0)

通过声明一个类,你没有创建任何对象。您通常通过包含相应的头文件来声明一个类。

所以,在Level.h#include <Monster.h>,你可以在Level内引用它。

但严重的是,如果不了解声明与定义,头文件(.h),类与对象,指针和引用等基本内容,就不能编写很多C ++代码。最好投资在一本书中或至少在线阅读一些教程。