Не срабатывает перегрузка оператора вывода в C++
я новичок в 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;
}
Источник: Stack Overflow на русском