Zwracanie obiektu typu pochodnego przez klase polimorficzna.

0

Hej,

Mam napisać klase abstrakcyjna - liczba i dziedziczace z niej klasy np. ulamek. Problem polega na tym, ze nie wiem jak napisac wirtualne operatory - np. +.

Pierwszy pomysł było stworzenie metod typu:
Ulamek operator+(Ulamek&, Ulamek&)
Ale jak w takim wypadku powinna wyglądać deklaracja operator+ w abstrakcyjnej klasie podstawowej liczba?

Macie jakies pomysly na rozwiązanie takiego zadania?

0

Oj coś mi się wydaje, że to nie jest najszczęśliwsze rozwiązanie.
Powiedziałbym nawet, że togo się nie da zrobić z operatorami, które mają zwracać coś przez wartość!
Sprecyzuj bardziej problem to może coś z tego będzie.

0

Wcale nie muszą zwracać przez wartość.

Ale.. jeśli miałby zwracać referencje to byłaby to referencja do lokalnego obiektu, więc też się nie da.

Część zadania jest taka:
a) napisać klasę abstrakcyjną liczba
b) napisać jej klasy pochodne ulamek, zmiennopozycyjna, zespolona itd. Przeciążyć operatory.

0

no właśnie nie ma nic o tym, że operatory powinny wykorzystywać polimorfizm!
Polimorfizm możesz wykorzystać przy metodach takich jak:

string toString();
bool isZero();
bool isNegative();
void setFromString(const string& txt);
Liczba& operator+=(int);
Liczba& operator+=(double);
Liczba& operator*=(int);
Liczba& operator*=(double);
Liczba& operator/=(int);
Liczba& operator/=(double);

// może jeszcze coś się znadzie

inne operatory po prostu się nie nadają do zastosowania polimorfizmu, z powodu ich charakterystyki.

0

Dalsza część zadania jest kompletnie sztuczna.

Mam przerobić napisaną już wcześniej klasę Macierz, tak aby mogła przechowywać elementy reprezentujące typy pochodne od Liczba. Nie mogę użyć do tego szablonów.

Pomysł był więc taki, żeby przechowywać wskaźnik do Liczba w Macierzy, w zależności od jakiegoś zawartego w obiekcie macierz int/enum alokowac pamięć na odpowiednie liczby i później we wszystkich innych metodach korzystać z polimorficznych wywołań operatorów.

0

Zbierz do kupy wszystkie takie problemy i idź do zleceniodawcy by wyjaśnił o co mu chodzi, względnie by stwierdził, że oczekuje cudów. Oczywiste jest, że zleceniodawcą jest jakiś nauczyciel.

0

Tak właśnie jest...

Dzięki za upewnienie mnie, że się nie da.

0

Na siłę by się dało, ale sprowadzało by się to to sprawdzania typów w czasie działania programu i wtedy zastosowanie statycznych metod, co oczywiście nie ma sensu. Prościej i efektywniej zastosować szablony i zwykłe przeciążone metody/operatory.

1 użytkowników online, w tym zalogowanych: 0, gości: 1