首页 > 代码库 > 关于“为什么不加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就会提示参数过多”
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。