zoukankan      html  css  js  c++  java
  • 关于“为什么不加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个才对。

  • 相关阅读:
    预览graph取消item的value单位自动转换
    Elasticsearch内存分配设置详解
    Linux core 文件介绍
    案例一 整套项目打包部署
    Linux删除文件提示Operation not permitted的处理办法
    python优雅获取本机 IP 方法
    nginx open files limits 导致大量错误信息
    excel表格用协程插入到mysql
    mysql基本操作
    装饰器
  • 原文地址:https://www.cnblogs.com/forcheryl/p/3959865.html
Copyright © 2011-2022 走看看