对象的引用如何工作?

时间:2014-04-12 05:29:38

标签: c++ class reference

例如在像这样的函数中:

void Monster::Attack(Player& player)

此函数将位于Monster类的.cpp文件中,并使用Player类的标题。

新对象播放器是否可以访问嵌入到Player类中的所有好东西。也是为什么不能:

void Monster::Attack(Player player)

要完成吗?

3 个答案:

答案 0 :(得分:1)

一旦了解了利弊,就可以选择合适的功能。

使用

void Monster::Attack(Player& player);

您可以避免制作输入参数副本的成本。您可以修改输入对象。根据您的要求,这可能是好事还是坏事。

使用

void Monster::Attack(Player player);

您要承担制作输入参数副本的费用。您可以修改函数中的player但不会更改调用函数中的对象。再一次,根据您的要求,这可能是好事还是坏事。

答案 1 :(得分:0)

我相信引用内部也是指针。语法与指针的语法略有不同,但同样的事情发生在幕后。您正在更改原始对象。

第二个方法声明的问题是它不使用指针或引用传递player参数,而是作为实际对象传递。这意味着传值,这意味着复制。然后你对副本进行了更改,会发生什么?原件保持不变,这可能不是你想要的。

答案 2 :(得分:0)

我的建议是首先理解引用,与函数参数的上下文分开。

以下是一些示例代码:

int a = 5;
int &b = a;

现在,ab都是同一变量的标签。此代码实际上与:

相同
int b = 5;
int &a = b;

您随后使用a的任何地方,您都可以使用b;这条规则没有例外。关键是您可以拥有多个标识同一变量的标识符。

转到功能上下文。如果你有:

int a;
foo(a);

foo(int &b)
{

然后main afoo' s b都是同一变量的标签。在b中的foo上执行操作与在a中对main执行操作完全相同。它们都是相同的变量,只是名称不同。类似于威廉王子和剑桥公爵是同一个人。