例如在像这样的函数中:
void Monster::Attack(Player& player)
此函数将位于Monster类的.cpp文件中,并使用Player类的标题。
新对象播放器是否可以访问嵌入到Player类中的所有好东西。也是为什么不能:
void Monster::Attack(Player player)
要完成吗?
答案 0 :(得分:1)
一旦了解了利弊,就可以选择合适的功能。
使用
void Monster::Attack(Player& player);
您可以避免制作输入参数副本的成本。您可以修改输入对象。根据您的要求,这可能是好事还是坏事。
使用
void Monster::Attack(Player player);
您要承担制作输入参数副本的费用。您可以修改函数中的player
但不会更改调用函数中的对象。再一次,根据您的要求,这可能是好事还是坏事。
答案 1 :(得分:0)
我相信引用内部也是指针。语法与指针的语法略有不同,但同样的事情发生在幕后。您正在更改原始对象。
第二个方法声明的问题是它不使用指针或引用传递player
参数,而是作为实际对象传递。这意味着传值,这意味着复制。然后你对副本进行了更改,会发生什么?原件保持不变,这可能不是你想要的。
答案 2 :(得分:0)
我的建议是首先理解引用,与函数参数的上下文分开。
以下是一些示例代码:
int a = 5;
int &b = a;
现在,a
和b
都是同一变量的标签。此代码实际上与:
int b = 5;
int &a = b;
您随后使用a
的任何地方,您都可以使用b
;这条规则没有例外。关键是您可以拥有多个标识同一变量的标识符。
转到功能上下文。如果你有:
int a;
foo(a);
和
foo(int &b)
{
然后main
a
和foo
' s b
都是同一变量的标签。在b
中的foo
上执行操作与在a
中对main
执行操作完全相同。它们都是相同的变量,只是名称不同。类似于威廉王子和剑桥公爵是同一个人。