关于“为什么不加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个才对。

 

posted @ 2014-09-06 21:59  Ryan in C++  阅读(406)  评论(0编辑  收藏  举报