Witam. Piszę na zajęcia program dodający wektor liczb zespolonych. Mieliśmy mniej więcej podany na tablicy wzór jak mają wyglądać klasy i dopisać ciała funkcji. Tak więc program wygląda tak:
#include <iostream>
#include <math.h>
using namespace std;
class Liczba{
float re;
float im;
public:
Liczba(){re=0; im=0;}
Liczba(float a){re=a; im=a;}
Liczba(float a,float b){re=a; im=b;}
Liczba operator+(Liczba a){
Liczba c = Liczba();
c.re = re + a.re;
c.im = im + a.im;
return c;
}
friend ostream& operator<<(ostream& wyjscie, const Liczba& arg);
};
ostream& operator<<(ostream& wyjscie, const Liczba& arg){
return wyjscie<<arg.re<<" + "<<arg.im<<"i"<<endl;
}
class Wektor{
Liczba *A;
int dlugosc;
public:
Wektor(int n) {A = new Liczba[n]; dlugosc = n; cout<<"Konstruktor"<<endl;}
~Wektor(){cout<<"Destruktor"<<endl; delete A;}
Wektor operator+(Wektor w){
if(dlugosc==w.dlugosc){
Wektor c = Wektor(dlugosc);
for(int i=0;i<dlugosc;i++)
c.A[i] = A[i] + w.A[i];
return c;
}
else cout<<"Nie mozna dodawac wektorow o roznych dlugosciach"<<endl;
}
void Set(int i, Liczba zesp){
if(i<dlugosc)
A[i] = zesp;
else cout<<"Ten wektor ma "<<dlugosc<<" skladowych."<<endl;
}
void wyswietl(){
cout<<"Wektor: "<<endl;
for(int i=0;i<dlugosc;i++)
cout<<A[i];
}
};
int main(int argc, char *argv[]) {
Liczba a(2,3);
Liczba b(2,3);
Liczba c(8,7);
Liczba d(8,7);
Wektor X = Wektor(2);
Wektor Y = Wektor(2);
Wektor Z = Wektor(2);
X.Set(0,a);
X.Set(1,b);
Y.Set(0,c);
Y.Set(1,d);
cout<<"\nPrzed dodaniem: "<<endl;
X.wyswietl();
Y.wyswietl();
cout<<"\nPo dodaniu: "<<endl;
Z = X + Y;
Z.wyswietl();
return 0;
}
Problem polega na tym, że po wykonaniu na ekranie dostaje takie coś:
Konstruktor
Konstruktor
KonstruktorPrzed dodaniem:
Wektor:
2 + 3i
2 + 3i
Wektor:
8 + 7i
8 + 7iPo dodaniu:
Konstruktor
Destruktor
Destruktor
Destruktor
Wektor:
1.08969e+038 + 1.084936e+038i
0 + 0i
Destruktor
Destruktor
Destruktor
Program kompiluję pod DecC++ 5.2.0.3. Gdy wykomentuję destruktor wszystko działa jak należy, wynik dodawania jest 10 + 10i. Może mi ktoś wytłumaczyć dlaczego tak się dzieje, że są prawidłowo 4 konstruktory a aż 6 destruktorów i czemu one działają zanim przypiszę odpowiednie wartości do Z?