Mam za zadanie stworzyć klasę która reprezentuje wielomian n-tego stopnia (przy zadanym n) i wyposażyć ją w operatory dodawania, odejmowania i mnożenia.
Oto mój kod (+ funkcja main sprawdzająca poprawność obliczeń)
#include <iostream>
const int n=3;
class Rn
{
double *wsk;
public:
Rn(void);
~Rn(void);
Rn operator+(Rn &a);
Rn operator-(Rn &a);
Rn operator*(Rn &a);
Rn operator*(double &a);
friend std::ostream& operator<<(std::ostream &a, Rn b);
void wczytaj();
};
Rn::Rn()
:wsk(new double[n])
{}
Rn::~Rn(void)
{
delete[]wsk;
wsk=0;
std::cout<<"Skasowane";
}
Rn Rn::operator+(Rn &a)
{
Rn c;
for(int i=0;i<n;i++)
{
c.wsk[i]=wsk[i]+a.wsk[i];
}
return c;
}
Rn Rn::operator-(Rn &a)
{
Rn c;
for(int i=0;i<n;i++)
{
c.wsk[i]=wsk[i]-a.wsk[i];
}
return c;
}
Rn Rn::operator*(Rn &a)
{
Rn c;
for(int i=0;i<n;i++)
{
c.wsk[i]=0;
{
for(int j=0;j<=i;j++)
{
c.wsk[i]+=(wsk[j]*a.wsk[i-j]);
}
}
}
return c;
}
Rn Rn::operator*(double &a)
{
Rn c;
for(int i=0;i<n;i++)
{
c.wsk[i]=a*wsk[i];
}
return c;
}
std::ostream& operator<<(std::ostream &a, Rn b)
{
if(b.wsk[0]!=0)
a<<b.wsk[0];
for(int i=1;i<n;i++)
{
if(b.wsk[i]>0)
a<<"+";
if(b.wsk[i]!=0)
a<<b.wsk[i]<<"x^"<<i;
}
return a;
}
void Rn::wczytaj()
{
std::cout<<"Wprowadz "<<n<<" wspolczynników:\n";
for(int i=0;i<n;i++)
{
std::cout<<"a_"<<i<<": ";
std::cin>>wsk[i];
}
}
int main(void)
{
Rn a;
Rn b;
a.wczytaj();
b.wczytaj();
Rn c;
std::cout<<"a: "<<a<<"\n"
<<"b: "<<b<<"\n"
<<"a+b: "<<a+b<<"\n"
<<"a-b: "<<a-b<<"\n"
<<"a*b: "<<a+b<<"\n";
return 0;
}
Niestety za każdym razem po uruchomieniu programu otrzymuje komunikat o błędzie (mimo że wypisywane są poprawne wartości) Nie mam pomysłu na to, co może być przyczyną błędu. (to moje pierwsze "starcie" z dynamiczną tablica jako składnikiem klasy) Może przeoczyłem coś elementarnie prostego?