我开始阅读一本关于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不是可以在类中的任何地方直接访问吗?(根本不需要指定参数)?提前感谢你的回答!
发布于 2011-09-16 22:09:14
有几个原因。
goto 5。使用您必须处理的值调用交换函数,而不需要知道您必须首先设置一个特殊的x变量,这不是更好吗?所有这些问题都可以通过简单地通过引用传递值来解决。实际上,这是一个很容易理解的问题:)
希望这能有所帮助。
发布于 2011-09-16 22:01:21
通过参数将值传递给函数可确保代码的模块化。听起来您刚刚开始接触C++,所以我不确定您对面向对象编程有多熟悉。函数/方法表示encapsulation的一层。您的function ()函数应该封装执行其函数/目的所需的逻辑。调用者不应该关心这是如何完成的。如果您的swap()函数必须断言程序中有一个全局变量可用,那么它就没有完全封装“交换”的逻辑。
另外,假设您想在类中的其他地方重用此函数。使用一组全局变量来调用此函数将是困难和笨拙的。此外,您的类中可能有引用这些全局变量的其他位置,因此对swap()的其他调用将更改这些值,这可能会在代码的其他区域造成混乱。
https://stackoverflow.com/questions/7445660
复制相似问题