C++语言编译,在main()函数输出时语句报错

问题遇到的现象和发生背景

C++语言编译 复数类,测试输入输出

问题相关代码,请勿粘贴截图

#include
#include
#include<stdio.h>
using namespace std;
//在程序中想要直接使用 cin 和 cout ,必须作正确的文件包含。

class Complex //定义复数类
{
private:
float real, imag;
public:
Complex(); //构造无参函数
Complex(float r = 0, float i = 0); //带参构造函数
Complex(const Complex& cx); //拷贝构造函数
~Complex(); //析构函数
Complex add(Complex c); //类中的成员函数,表示一个复数具有的行为
Complex minus(Complex c); //类中的成员函数,表示一个复数具有的行为
Complex multiply(Complex c); //类中的成员函数,表示一个复数具有的行为
Complex dicision(Complex c); //类中的成员函数,表示一个复数具有的行为
void Display();//实现复数的输出
};

//类外实现公有成员函数
Complex::Complex()//无参函数
{
real = 0;
imag = 0;
cout << "The complex is constructed." << endl;
}

Complex::Complex(float real, float imag)//带参构造函数
{
this->real = real;
this->imag = imag;
}
Complex::Complex(const Complex& m)//拷贝构造函数
{
this->real = m.real;
this->imag = m.imag;
}
Complex::~Complex()//析构函数
{
}

Complex Complex::add(Complex c)//复数加法
{
real += c.real;
imag += c.imag;
return *this;
}

Complex Complex::minus(Complex c)//复数减法
{
real -= c.real;
imag -= c.imag;
return *this;
}

Complex Complex::multiply(Complex c)//复数乘法
{
real = realc.real-imagc.imag;
imag = realc.imag+imagc.real;
return *this;
}

Complex Complex::dicision(Complex c)//复数除法
{
float t = c.real * c.real + c.imag * c.imag;
real = (realc.real+imagc.imag)/t;
imag = (imagc.real-realc.imag)/t;
return *this;
}

void Complex::Display()//复数输出
{
if(imag > 0)
{
cout << real << "+" << imag << "i" << endl;
}
else if (imag < 0)
{
cout << real << imag << "i" << endl;
}
else {
cout << real << endl;
}
}
int main()
{
Complex c1 = Complex(3, 4);
Complex c2 = Complex(9, -4);
Complex c3 = Complex(4, 9);
Complex c4 = Complex(8, 4);
Complex c5 = Complex(21, 7);
cout << "输入的复数如下:\n";
c1.Display();
c2.Display();
c3.Display();
c4.Display();
c5.Display();
cout << "得到的运算结果如下:\n";
Complex t01 = c1.add(c2);
c2.Display();
c1.Display();
t01.Display();
Complex t02 = c2.minus(c3);
cout<< "t02 = " << t02<< endl;
t02.Display();
Complex t03 = c4.add(c2);
t03.Display();
Complex t04 = c5.minus(c3);
t04.Display();
Complex t05 = c1.add(c1);
t05.Display();
}

运行结果及报错内容

img

我的解答思路和尝试过的方法

在用cout<<"t02="<<t02<<endl;作为输出语句时,“<<” 报错

我想要达到的结果

正常输出语句即可

Complex类没有重载<<运算符,所以在使用cout<<t02的时候会报错。在Complex类中重载<<运算符就可以了,代码修改如下(修改部分有注释):

#include <iostream>

using namespace std;
//在程序中想要直接使用 cin 和 cout ,必须作正确的文件包含。

class Complex //定义复数类
{
private:
    float real, imag;
public:
    Complex(); //构造无参函数
    Complex(float r = 0, float i = 0); //带参构造函数
    Complex(const Complex& cx); //拷贝构造函数
    ~Complex(); //析构函数
    Complex add(Complex c); //类中的成员函数,表示一个复数具有的行为
    Complex minus(Complex c); //类中的成员函数,表示一个复数具有的行为
    Complex multiply(Complex c); //类中的成员函数,表示一个复数具有的行为
    Complex dicision(Complex c); //类中的成员函数,表示一个复数具有的行为
    void Display();//实现复数的输出

    friend ostream& operator<<(ostream& os, const Complex& c); //修改,重载<<运算符
};

//类外实现公有成员函数
Complex::Complex()//无参函数
{
    real = 0;
    imag = 0;
    cout << "The complex is constructed." << endl;
}

Complex::Complex(float real, float imag)//带参构造函数
{
    this->real = real;
    this->imag = imag;
}
Complex::Complex(const Complex& m)//拷贝构造函数
{
    this->real = m.real;
    this->imag = m.imag;
}
Complex::~Complex()//析构函数
{
}

Complex Complex::add(Complex c)//复数加法
{
    real += c.real;
    imag += c.imag;
    return *this;
}

Complex Complex::minus(Complex c)//复数减法
{
    real -= c.real;
    imag -= c.imag;
    return *this;
}

Complex Complex::multiply(Complex c)//复数乘法
{
    real = real*c.real - imag*c.imag;
    imag = real*c.imag + imag*c.real;
    return *this;
}

Complex Complex::dicision(Complex c)//复数除法
{
    float t = c.real * c.real + c.imag * c.imag;
    real = (real*c.real + imag*c.imag) / t;
    imag = (imag*c.real - real*c.imag) / t;
    return *this;
}

void Complex::Display()//复数输出
{
    if (imag > 0)
    {
        cout << real << "+" << imag << "i" << endl;
    }
    else if (imag < 0)
    {
        cout << real << imag << "i" << endl;
    }
    else {
        cout << real << endl;
    }
}
//修改,重载<<运算符
ostream& operator<<(ostream& os, const Complex& c)
{
    os << c.real << "+" << c.imag << "i";
    return os;
}


int main()
{
    Complex c1 = Complex(3, 4);
    Complex c2 = Complex(9, -4);
    Complex c3 = Complex(4, 9);
    Complex c4 = Complex(8, 4);
    Complex c5 = Complex(21, 7);
    cout << "输入的复数如下:\n";
    c1.Display();
    c2.Display();
    c3.Display();
    c4.Display();
    c5.Display();
    cout << "得到的运算结果如下:\n";
    Complex t01 = c1.add(c2);
    c2.Display();
    c1.Display();
    t01.Display();
    Complex t02 = c2.minus(c3);
    cout << "t02 = " << t02 << endl;
    t02.Display();
    Complex t03 = c4.add(c2);
    t03.Display();
    Complex t04 = c5.minus(c3);
    t04.Display();
    Complex t05 = c1.add(c1);
    t05.Display();
}

t02是对象不能直接输出,你只能输出对象的属性

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632