#include <iostream>
class Wielomian {
double *wsp;
int rzad;
public:
Wielomian(unsigned int r=0);
~Wielomian();
Wielomian(const Wielomian &w);
Wielomian operator= (const Wielomian &w);
void fill(double val);
void set(int n, double val);
friend std::ostream & operator<<(std::ostream &stream, const Wielomian &w);
};
std::ostream & operator<<(std::ostream &stream, const Wielomian &w) {
for (int i=0; i< w.rzad; i++)
stream << w.wsp[i] << ", ";
return stream;
}
void Wielomian::fill(double val) {
std::fill(wsp, wsp+rzad, val);
}
void Wielomian::set(int n, double val) {
if (n<rzad)
wsp[n] = val;
}
Wielomian::Wielomian(unsigned int r) {
wsp = new double[r];
if (wsp)
rzad = r;
}
Wielomian::~Wielomian() {
if (wsp)
delete [] wsp;
}
Wielomian::Wielomian(const Wielomian &w) {
wsp = new double[w.rzad];
std::copy(w.wsp, w.wsp+w.rzad, wsp);
rzad = w.rzad;
}
Wielomian Wielomian::operator= (const Wielomian &w) {
if (&w == this)
return *this;
// alokujemy nowe zasoby
double *tmp;
tmp = new double[rzad];
// kopiujemy
std::copy(w.wsp, w.wsp + w.rzad, tmp);
// zwalniamy pami��
delete [] wsp;
// "podpinamy" now� tablic� do naszego obiektu
rzad = w.rzad;
wsp = tmp;
return *this;
}
int main() {
Wielomian w1(3);
Wielomian w2 = w1;
std::cout << w1 << std::endl;
std::cout << w2 << std::endl;
w1.fill(1);
w2.set(1,2);
std::cout << w1 << std::endl;
std::cout << w2 << std::endl;
std::cout << "---------------\n";
Wielomian w3(3);
std::cout << w1 << std::endl;
std::cout << w3 << std::endl;
w3 = w1;
w1.set(0,0);
std::cout << w1 << std::endl;
std::cout << w3 << std::endl;
return 0;
}