我开始阅读一本关于C ++的书,并找到了以下代码。 这是一个关于如何通过引用发送传递参数的示例。
#include <iostream>
void swap(int &x, int &y);
int main()
{
int x = 5, y = 10;
std::cout << "Main. Before swap, x: " << x
<< " y: " << y << "\n";
swap(x, y);
std::cout << "Main. After swap, x: " << x
<< " y: " << y << "\n";
return 0;
}
void swap(int &rx, int &ry)
{
int temp;
std::cout << "Swap. Before swap, rx: " << rx
<< " ry: " << ry << "\n";
temp = rx;
rx = ry;
ry = temp;
std::cout << "Swap. After swap, rx: " << rx
<< " ry: " << ry << "\n";
}
Main. Before swap, x:5 y: 10
Swap. Before swap, rx:5 ry:10
Swap. After swap, rx:10 ry:5
Main. After swap, x:10, y:5
逻辑对我来说很清楚。 现在这可能是一个非常愚蠢的问题(我还不是很有经验),但为什么你不能只声明private:int x作为实例变量?在这种情况下,x是否可以在班级中的任何地方直接访问? (根本不需要指定参数)?提前感谢您的回答!
答案 0 :(得分:3)
有几个原因。
goto 5
。用你必须提供的值调用交换函数是不是更好,而不需要知道你必须首先设置一个特殊的x变量?只需通过引用传递值即可删除所有这些问题。真的很简单:)
希望这有帮助。
答案 1 :(得分:1)
通过参数将值传递给函数可确保代码中的模块化。听起来你刚刚开始使用C ++,所以我不确定你对面向对象编程有多熟悉。函数/方法代表encapsulation的一层。您的swap()函数应该封装执行其功能/目的所需的逻辑。呼叫者不应该关心如何实现这一点。如果你的swap()函数必须断言程序中有一个全局变量,那么它就不能完全封装“交换”的逻辑。
此外,让我们说你想在你的班级的其他地方重用这个功能。使用一组全局变量来调用此函数将是困难和笨拙的。此外,您的类中可能有其他位置引用这些全局变量,因此您对swap()的其他调用将更改这些值,从而可能导致代码的其他区域出现混淆。