przeładowanie operatora << w klasie pochodnej

0

Witam,

Mam przeładowany operator << w klasie 'vect'

ostream & operator <<(ostream &ekran, const vect &copy)
{
    ekran << "[";
    for(int i = 0; i < copy.dlugosc; i++)
    {
        ekran << copy.v_tab[i] << " ";
    }
    ekran << "]" << endl;

    return ekran;
}

w pochodnej klasie chcę zdefiniować przeładowanie tego operatora korzystając z tego powyżej, tylko dodając jedną funkjcę

ostream & operator <<(ostream &ekran, const svect &copy)
{
    copy.sort();
    ekran << (vect&)copy;//ta linijka jest zła, wywołanie przeładowania z klasy podstawowej
    return ekran;
}

Nie wiem jak sobie z tym poradzić, ma ktoś jakiś pomysł?

0
copy.sort();
return operator<<(ekran,(const vect&)copy);
0

niestety mam taki błąd, niem wiem jak to przeskoczyć

błąd: passing 'const svect' as 'this' argument of 'void svect::sort()' discards qualifiers [-fpermissive]

1

No bo:

... , const svect &copy) // tu przejmujesz referencje na stałą
{
    copy.sort(); // tu prawdopodobnie próbujesz tą stałą zmienić
0

Masz rację!
Przeoczyłem to, z rozpędu dałem const.
Dziękuję za pomoc :)

1

nie z rozpędu, ale z prawidłowej praktyki. masz strasznie dziwny wymóg co do tego operatora: drukuj posortowane, to jest sprzeczne z oczekiwaniem jak taki operator powinien działać!
Trwałe łączenie takich funkcjonalności źle się kończy. IMO te funkcjonalności (sort i drukowanie do strumienia) powinny pozostać rozłączne.

Offtopic: Nadmierne nawpisywanie operatorów to samo zło, na które namiętnie rzucają się wszyscy początkujący. Czy nie lepiej, czytelniej i bezpieczniej zrobić taką metodę:

ostream &svect::sortAndPrintToStream(ostream &out)
0

Chciałem aby w klasie pochodnej przy wyświetlaniu wektora był on od razu posortowany, stąd to moje połączenie wywołania metody w operatorze << .
Czyli rozumiem, że proponujesz bezpieczniejsze rozwiązanie zdefiniowanie nowej metody, która będzie to wykonywać, a nie zaślepiać w klasie pochodnej operator <<?
Dobrze rozumiem?

0

Nie rób tego przy wyświetlaniu, rób to przy wpisywaniu lub ma żądanie.

0

metoda sort jest protected, więc jawnie nie mogę jej wywołać.
Czyli posortować wektor przy nowo przeładowanym operatorze >> w klasie pochodnej?

0

sort() - protected? Po kiego?
Przy operatorze>> już od biedy może być.

0

Tak mam narzucone z góry od zleceniodawcy, że protected.

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