使用类添加复数

Addition of complex numbers using classes

本文关键字:添加      更新时间:2023-10-16

我正在尝试将2个复数添加在一起,但是我会遇到错误:

无操作员" "匹配这些操作数

无操作员"<<"匹配这些操作数

#include <iostream>
using namespace std;

class complex
{
public:
    double get_r() { return r; }
    void set_r(double newr) { r=newr; }
    double set_i() { return i; }
    void set_i(double newi) { i = newi; }
private:
    double r, i;
};
int main()
{
complex A, B;
A.set_r(1.0);
A.set_i(2.0);
B.set_r(3.0);
B.set_i(2.0);
complex sum = A+B;
cout << "summen er: " << sum << endl;
        system("PAUSE");
return 0;
};

我是编程的新手,但是我看不出为什么它不会将这些数字添加在一起。我做错了什么?

您必须超载运算符 and&lt;&lt;(以及您需要的每一个)适用于您定义的类。请注意,运算符仅比具有特定定义语法的特定函数(例如:C = a b可以理解为c = a.sum(b))。在这里,有关http://en.cppreference.com/w/cpp/language/operators

的链接

运算符 定义为内置类型和标准库中的某些类型。由于complex在这里是自定义类,因此您必须定义所有应该对其作用的操作员。

operator +可以定义为:

class complex {
    ...
    complex operator + (const complex& other) {
        return complex(get_r() + other.get_r(), get_i() + other.get_i());
    }
    ...
};

提防既不允许A++也不允许A-B的软件。他们需要(分别)complex & operator ++()complex operator - (const complex &)

对于流插入,第一个参数是流本身,因此您必须定义一个在类外部使用2个参数的朋友操作员:

outstream& opererator << (outstream &out, const complex& val) {
    // output it the way you want
    return out;
}

复数是C 标准的一部分。这是http://en.cppreference.com/w/cpp/numeric/complex。

的示例
#include <iostream>
#include <iomanip>
#include <complex>
#include <cmath>
int main()
{
    using namespace std::complex_literals;
    std::cout << std::fixed << std::setprecision(1);
    std::complex<double> z1 = 1i * 1i;
    std::cout << "i * i = " << z1 << 'n';
    std::complex<double> z2 = std::pow(1i, 2);
    std::cout << "pow(i, 2) = " << z2 << 'n';
    double PI = std::acos(-1);
    std::complex<double> z3 = std::exp(1i * PI);
    std::cout << "exp(i * pi) = " << z3 << 'n';
    std::complex<double> z4 = 1. + 2i, z5 = 1. - 2i;
    std::cout << "(1+2i)*(1-2i) = " << z4*z5 << 'n';
}

尝试自己实现班级复合物将需要您定义加法,平等和Ostream。而且您只有5%的完全实现的班级。查看标题本身将揭示那些编写C 标准库的人如何实现整个过程。

所有算术运算符,例如plus,减,乘法或仅与预定的数据类型一起工作,例如int,char,float等。

现在,如果您想在课堂中添加一些内容,则必须使用OO编程的基本方面,即操作员超载。

这是您可以实现它的方式。

#include <iostream>
using namespace std;
class complex
{
    float x, y;
public:
    complex()
    {
    }
    complex(float real, float img)
    {
        x = real;
        y = img;
    }
friend complex operator+(complex,complex);
    void display(void);
};
complex operator+(complex c,complex d)
{
    complex t;
    t.x = d.x + c.x;
    t.y = d.y + t.y;
    return(t);
};
void complex::display(void)
{
    cout << x << "+i" << y << endl;
}


int main()
{
    complex c1, c2, c3;
    c1 = complex(2.5, 3.5);
    c2 = complex(1.5, 5.5);
    c3 = c1 + c2;//c3=opra+(c1,c2)
    cout << "C1:" << endl;
    c1.display();
    cout << "C2:" << endl;
    c2.display();
    cout << "C3:" << endl;
    c3.display();
}