@wiezaawieza:
Niestety Bracie, jest tutaj pewien trik powodujący, że rzecz cała okazuje się być nieco bardziej zagmatwana. Linijki:
Poly P1; //Declare object representing polynomial P1
P1[3] = 2; P1[1] = 3.6; P1[0] = 7; //Specify coefficients of P1 = 2x^3 + 3.6x + 7
tak naprawdę wyglądają tak:
Poly P1;
P1.operator[](3) = 2;//operator jest zwykłą funkcją, która zwraca coś, do czego można przypisać 2.
P1.operator[](1) = 3.6;
P1.operator[](0) = 7;
Co to dla nas oznacza - skoro mamy roboczo strukturkę Mono, to Poly::operator[] musi zwrócić referencję do niej (mam nadzieję, że referencje i wskaźniki masz opanowane). A skoro na wyjściu funkcji Poly::operator[] jest instancja Mono to oznacza, że linie coś = 2 coś = 3.6 będą działać z Mono. czyli tak finalnie wywoływane jest:
Poly P1;
P1.operator[](3).operator=(2);//P1.operator[](3) zwraca nienazwaną, chwilową referencję do Mono, czyli jest MonoReference.operator=(2)
jaki z powyższego wniosek? Trzeba dodać operator= dla struktury Mono.
Aby nie przedłużać pełna implementacja poniżej, przy czym UWAGA! Nie ma jeszcze obsłużonego Poly P2 = 5, to będzie twoje zadanie.
class Poly
{
struct Mono
{
char sign = 1;//w sumie sign to ładniejsza nazwa niż connector. Wartości to dodatnia albo 0 aby oznaczyć iż jednomian ma wartość dodatnią, ujemna jeśli cały jednomian jest ujemny. Wyjaśnienie czemu tak będzie jak się zabierzesz za poprawkę Mono::calculate() która będzie potrzebna do implementacji sumy i iloczynu wielomianów.
double power;
double multiplier;
void operator=(double multiplier)
{
this->multiplier = multiplier;
}
};
public:
void addPolyComponent(double multiplier , double power, char sign = 1)
{
Mono mono;
mono.multiplier = multiplier;
mono.power = power;
mono.sign = sign;
polyComponents.push_back(mono);
}
Mono& operator[](double power)
{
addPolyComponent(1, power);//1 jako mnożnik bo to, co dodajemy to jest Mono zbudowana częściowo jako że nie mamy jak przesłać mnożnika. Sign załatwi domyślna wartość parametru w addPolyComponents()
return polyComponents.back();
}
private:
vector<Mono> polyComponents;
};