c++ - 重载运算符 * C++

标签 c++ function operator-overloading

我一直在尝试编译这个程序,但它给我一个关于为函数之一重载 * 运算符的错误:complex operator *(double n)const

当我尝试编译时出现错误:no match for 'operator*' in '2 * c'

这是头文件:

复杂.h

#ifndef COMPLEX0_H
#define COMPLEX0_H

class complex {
    double realNum;
    double imagNum;
public:
    complex();
    complex(double x,double y);
    complex operator *(double n)const;
    complex operator *(const complex &c1)const;
   friend std::istream &operator>>(std::istream &is,complex &cm);
   friend std::ostream &operator<<(std::ostream &os,const complex &cm);
};

#endif

这是cpp:

复杂.cpp

 #include "iostream"
#include "complex0.h"

complex::complex() {
    imagNum = 0.0;
    realNum = 0.0;
}

complex::complex(double x, double y) {

    realNum = x;
    imagNum = y;
}

complex complex::operator *(const complex& c1) const{
complex sum;
sum.realNum=realNum*c1.realNum-c1.imagNum*imagNum;
sum.imagNum=realNum*c1.imagNum+imagNum*c1.realNum;
    return sum;
}

complex complex::operator *(double n)const{ 
    complex sum;
    sum.realNum=realNum*n;
    sum.imagNum=imagNum*n;
    return sum;

}
std::istream &operator >>(std::istream& is, complex& cm) {
    is >> cm.realNum>> cm.imagNum;
    return is;
}

std::ostream &operator <<(std::ostream& os, const complex& cm){
os<<"("<<cm.realNum<<","<<cm.imagNum<<"i)"<<"\n";    
return os;
}

main.cpp

#include <iostream>
using namespace std;
#include "complex0.h" 

    int main() {
        complex a(3.0, 4.0); 
        complex c;
        cout << "Enter a complex number (q to quit):\n";
        while (cin >> c) {
            cout << "c is " << c << "\n";
            cout << "a is " << a << "\n";
            cout << "a * c" << a * c << "\n";
            cout << "2 * c" << 2 * c << "\n";
            cout << "Enter a complex number (q to quit):\n";
        }
        cout << "Done!\n";
        return 0;
    }

有人可以向我解释我做错了什么吗?

最佳答案

只有当第一个 操作数是您的类类型时,成员函数运算符才适用。如果你想处理 second 操作数是你的类型的情况,你还需要一个自由函数(我们简单地通过操作的可交换性委托(delegate)给成员函数):

complex operator*(double n, complex const & x)
{
    return x * n;
}

(请注意,标准库已经包含 <complex> 。)

关于c++ - 重载运算符 * C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17708374/

相关文章:

c++ - : expected constructor,析构函数错误,还是 '' token之前的类型转换?

c++ - 需要支持 OpenGL 的跨平台 GUI 工具包

c++ - 二进制搜索算法 C++

c++ - OpenGL random size rectangle 代码改变绘制的矩形

c++ - C++ 中的返回函数类型示例

用于取消引用函数结果的 PHP 语法

c++ - 在 BST 中使用模板重载运算符

c++ - 在 while 循环中使用输入重定向

python - 有什么好的方法来探索Python数据类型吗?

c++ - 一组自定义类对象及其 < 运算符