Witam, piszę kalkulator wielomianów, właściwie drugi raz bo teraz chcę to zrobić "ładniej" i nie jestem pewny co mam wpisać w destruktor.
main.cpp:
#include <iostream>
#include "result.h"
using namespace std;
int main()
{
Result r(0,0);
r.gatherWxPx();
return 0;
}
result.h:
#include <iostream>
using namespace std;
class Result
{
private:
int dWx; //degree of polynomial W(x)
int dPx; //degree of polynomial P(x)
public:
void gatherWxPx(); //gathering polynomial W(x) from user
Result(int, int);
~Result();
void addition(); //adding polynomials
void subtraction(); //subtracting polynomials
void multiplication(); //multiplying polynomials
void division(); //dividing polynomials
};
gather.cpp:
#include <iostream>
#include "result.h"
using namespace std;
void Result::gatherWxPx()
{
cout<<"Input degree of polynomial W(x): ";
cin>>dWx;
while (dWx<=0)
{
cout<<"Degree of polynomial has to be greater than 0, try again: ";
cin>>dWx;
}
int HelperWx=dWx;
cout<<"Input degree of polynomial P(x): ";
cin>>dPx;
while (dPx<=0)
{
cout<<"Degree of polynomial has to be greater than 0, try again: ";
cin>>dPx;
}
int HelperPx=dPx;
float *cWx; //
cWx = new float [dWx+1]; //dynamically allocating arrays for W(x)
cout<<"Input coefficients and constant of polynomial W(x): ";
cout<<endl;
for (int i=dWx; i>=0; i--)
{
cin>>cWx[i]; //gathering coefficients of W(x)
}
cout<<"W(x)= "; //show W(x)
for (int i=dWx; i>=0; i--)
{
if (cWx[i]>0 && i!=HelperWx)
{
cout<<"+";
}
if ((cWx[i]<0 && i==0 && i==dWx) || cWx[i]==-1)
{
cout<<"-";
}
if (cWx[i]!=0)
{
if ((cWx[i]!=1 && cWx[i]!=-1) || i==0)
{
cout<<cWx[i];
}
if (i!=0)
{
cout<<"x";
}
if (i!=0 && i!=1)
{
cout<<i;
}
}
else if (cWx[i]==0)
{
HelperWx--;
}
if (i<=0 && HelperWx==-1)
{
cout<<"0";
}
}
cout<<endl;
delete [] cWx;
float *cPx; //
cPx = new float [dPx+1]; //dynamically allocating arrays for P(x)
//
cout<<"Input coefficients and constant of polynomial P(x): ";
cout<<endl;
for (int i=dPx; i>=0; i--)
{
cin>>cPx[i]; //gathering coefficients of P(x)
}
cout<<"P(x)= "; //show P(x)
for (int i=dPx; i>=0; i--)
{
if (cPx[i]>0 && i!=HelperPx)
{
cout<<"+";
}
if ((cPx[i]<0 && i==0 && i==dPx) || cPx[i]==-1)
{
cout<<"-";
}
if (cPx[i]!=0)
{
if ((cPx[i]!=1 && cPx[i]!=-1) || i==0)
{
cout<<cPx[i];
}
if (i!=0)
{
cout<<"x";
}
if (i!=0 && i!=1)
{
cout<<i;
}
}
else if (cPx[i]==0)
{
HelperPx--;
}
if (i<=0 && HelperPx==-1)
{
cout<<"0";
}
}
cout<<endl;
delete [] cPx;
}
Result::Result(int Wx, int Px)
{
dWx=Wx;
dPx=Px;
}
Result::~Result()
{
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
}
Mój plan na program to stworzenie w osobnych plikach funkcji dodawania, odejmowania, mnozenia i dzielenia i wywolanie w mainie:
gatherWxPx()
switch z wszystkimi operacjami (dodawanie, odejmowanie, mnozenie, dzielenie)
zapetlony caly program aby sie nie wylaczal po 1 obliczeniu
I teraz pytanie: Co mam umiescic w destruktorze funkcji gatherWxPx?
Mógłbym tam dać delete [] cWx oraz delete [] cPx, ale czy moge tak zrobic? Nie wiem jak to dokladnie dziala prosze o wytlumaczenie ale na moje myslenie to jak to usune to nie bede mogl pozniej wykonywac zadnych operacji, tak czy nie? Poza tym w innych funkcjach bede mial tez inne destruktory zapewne, chociaz nie wiem jak to dziala do konca, ale bede musial dynamicznie alokowac nowe szufladki np dla wyniku dodawania.
Destruktor znajduje sie na samym dole i jest zaznaczony wykrzyknikami.