przeładowanie operatora << w klasie pochodnej

przeładowanie operatora << w klasie pochodnej
LI
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 8 lat
  • Postów:86
0

Witam,

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

Kopiuj
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ę

Kopiuj
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ł?

_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:8 dni
0
Kopiuj
copy.sort();
return operator<<(ekran,(const vect&)copy);

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
LI
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 8 lat
  • Postów:86
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]

_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:8 dni
1

No bo:

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

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon
LI
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 8 lat
  • Postów:86
0

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

MarekR22
Moderator C/C++
  • Rejestracja:ponad 17 lat
  • Ostatnio:mniej niż minuta
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ę:

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

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 3x, ostatnio: MarekR22
LI
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 8 lat
  • Postów:86
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?

edytowany 1x, ostatnio: littlejohn
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:8 dni
0

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
LI
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 8 lat
  • Postów:86
0

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

_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:8 dni
0

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
LI
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 8 lat
  • Postów:86
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.