首页 > 代码库 > 关于“为什么不加friend就会提示参数过多”

关于“为什么不加friend就会提示参数过多”

 1 #include <iostream> 2 using namespace std; 3  4 class Complex 5 { 6     double real, imag; 7 public: 8     Complex(double r, double i) :real(r), imag(i){} 9     Complex operator+(double r);10      Complex operator+ (double r, const Complex & c);//改为以下即可:friend Complex operator+ (double r, const Complex & c)11     void ValueGet(){12         cout << real << "," << imag << endl;13     }14 };15 Complex Complex::operator+(double r)16 {17     return Complex(real + r, imag);18 }19 20 int main()21 {22     Complex c1(3,2);23     c1=c1 + 3;24     c1.ValueGet();25 }

上述程序编译器会报错,错误是

Error 1 error C2804: binary ‘operator +‘ has too many parameters

原因就是,重载运算符时可以重载为成员函数和普通函数两种形式。

当重载为普通函数时,参数个数理应为运算符目数。 

当重载为成员函数时,参数个数理应为运算符目数减一。

对于这里要重载的+号而言,运算符目数为2.如果重载为普通函数,参数个数应该为2。如果重载为成员函数,参数个数应该为1.

而这正对应于这里的加不加friend。当加了friend时,表示这个函数虽然是在类内部,但是却是一个普通函数而不是成员函数。参数应该为2个。而不加friend表示这是一个类的成员函数,参数应该为1个才对。

 

关于“为什么不加friend就会提示参数过多”