Не срабатывает перегрузка оператора вывода в C++

Рейтинг: 0Ответов: 0Опубликовано: 12.02.2023

я новичок в c++, не понимаю, но перегрузка оператора просто не срабатывает при попытке вывести в консоль с помощью метода cout

Main.cpp

#include "DinamicArray.cpp"
using namespace std;

int main()
{
    setlocale(LC_ALL, "RUS");
    const int N = 3;
    DinamicArray* dinArr = new DinamicArray(N);
    try
    {
        for (int i = 0; i < N; i++)
        {
            dinArr->add(rand() % 7 + 1, rand() % 7 + 1);
        }
        std::cout << dinArr<< endl;
    }
    catch (const std::exception& e)
    {
        std::cerr << e.what() << '\n';
    }
    complex sum = dinArr->sumcomp();
    cout << "Комплексное число, как сумма всех комплексных чисел:" << sum.re << "+" << sum.im << "i" << endl;
    complex number_with_maxabs = dinArr->maxabs();
    cout << "Комплексное число c максимальным модулем:" << number_with_maxabs.re << "+" << number_with_maxabs.im << "i" << endl;
    int c = dinArr->minmultiply();
    cout << "Минимальное произведение исходного и сопряженного ему комплексных чисел: " << c << endl;
}

DinamicArray.cpp

#include <iostream>
using namespace std;

struct complex
{
    float re;
    float im;
};

class DinamicArray
{
private:
    complex* base;
    int pSize = 0;
    int pLen = 0;

public:
    DinamicArray()
    {
        pSize = 10;
        base = new complex[pSize];
    }

    DinamicArray(int size)
    {
        pSize = size;
        base = new complex[pSize];
    }

    DinamicArray(const DinamicArray& p1)
    {
        pSize = p1.pSize;
        pLen = p1.pLen;
        base = p1.base;
    }

    ~DinamicArray()
    {
        delete base;
        pSize = 0;
        pLen = 0;
        std::cout << "Сработал деструктор";
    }

    void add(int a, int b)
    {
        if (pLen == pSize)
        {
            throw "В заданном массиве нет места";
        }
        base[pLen].re = a;
        base[pLen++].im = b;
    }


    complex sumcomp()

    {
        complex sum;
        for (int i = 0; i < pLen; i++)
        {
            sum.re += base[i].re;
            sum.im += base[i].im;
        }
        return sum;
    }
    complex maxabs()
    {
        complex number;
        float maxabs=0;
        for (int i = 0; i < pLen; i++)
        {
            if (base[i].re * base[i].re + base[i].im * base[i].im > maxabs)
            {
                maxabs = base[i].re * base[i].re + base[i].im * base[i].im;
                number.re = base[i].re;
                number.im = base[i].im;
            }
        }
        return number;
    }

    int minmultiply()
    {
        int mm = base[0].re * base[0].re + base[0].im * base[0].im;
        for (int i = 1; i < pLen; i++)
        {
            if (mm > base[i].re * base[i].re + base[i].im * base[i].im)
            {
                mm = base[i].re * base[i].re + base[i].im * base[i].im;
            }
        }
        return mm;
    }

    complex* getBase() {
        return base;
    }

    int getLen() {
        return pLen;
    }

    int getSize() {
        return pSize;
    }

    void setBase(complex* sBase) {
        base = sBase;
    }

    void setLen(int sLen) {
        pLen=sLen;
    }

    void setSize(int sSize) {
        pSize = sSize;
    }
    friend std::ostream& operator<<(std::ostream& out, const DinamicArray& dinArr);
};

std::ostream& operator<< (std::ostream& out, const DinamicArray& dinArr)
{
    throw "Я тут";
    if (dinArr.pLen == 0)
    {
        throw "Массив пуст";
    }
    for (int i = 0; i < dinArr.pLen; i++)
    {
        if (dinArr.base[i].im < 0)
        {
            out << dinArr.base[i].re << dinArr.base[i].im << 'i' << endl;
        }
        else
        {
            out << dinArr.base[i].re << "+" << dinArr.base[i].im << 'i' << endl;
        }
    }
    return out;
}

Ответы

Ответов пока нет.