C++ 为什么该值不增加1?
我正在尝试使用friend进行一元运算符重载。 然而,该值并没有像预期的那样增加1 有什么原因吗C++ 为什么该值不增加1?,c++,C++,我正在尝试使用friend进行一元运算符重载。 然而,该值并没有像预期的那样增加1 有什么原因吗 #include<iostream> #include<iomanip> using namespace std; class Sample{ private: double x; public: Sample() { /*No comment*/ } ~Sample() { /*No com
#include<iostream>
#include<iomanip>
using namespace std;
class Sample{
private:
double x;
public:
Sample()
{
/*No comment*/
}
~Sample()
{
/*No comment*/
}
void setX(double recieveX)
{
x = recieveX;
}
double getX()
{
return x;
}
friend void operator++(Sample s1);
};
void operator++(Sample s1)
{
s1.x++;
}
int main()
{
class Sample s1;
s1.setX(30);
++s1;
cout << s1.getX();
return 0;
}
答案应该是31,并且在没有朋友的情况下工作。问题是运算符++按值获取其参数。这就是它在副本上递增x的原因
您可以通过引用获取参数来解决此问题:
void operator++(Sample &s1) {
s1.x++;
}
我认为您首先需要理解通过值传递参数和通过引用传递参数,这是使用函数的两个基本概念 通过值传递时,函数将生成变量的本地副本,其范围仅限于函数,对其所做的任何修改仅保留在此范围内,不会反映外部 例如:
void operator++(Sample s1)
{
s1.x++;
}
void operator++(Sample &s1)
{
s1.x++;
}
而当通过引用传递时,函数会生成一个引用变量,该引用变量实际上引用的是同一个传递的变量,对它所做的任何修改也会反映在其范围之外
例如:
void operator++(Sample s1)
{
s1.x++;
}
void operator++(Sample &s1)
{
s1.x++;
}
但是,函数调用将不受影响,并且仍然是:
++s1;
您忘记在运算符++中通过引用传递示例。