Przeciążenie operator<<

Przeciążenie operator<<
RO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 32
0

Witam mam problem z następującym zagadnieniem. Próbuję przeciążyć operator<< w takim sposób by obsługiwał przykładowy zapis (<< ma przyjmować manipulator):

Kopiuj
nazwa_obiektu<<endl;

Niestety spotykam z błędem: nie znaleziono, żadnego operatora, który przyjmuje lewostronny operand typu: "nazwa_klasy"

Kopiuj
nazwa klasy& operator<<(ostream& o);

Czy mógłby ktoś doradzić mi jak poradzić sobie z tym problemem?

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
1
rolniczy napisał(a):

Witam mam problem z następującym zagadnieniem. Próbuję przeciążyć operator<< w takim sposób by obsługiwał przykładowy zapis (<< ma przyjmować manipulator):

Kopiuj
nazwa_obiektu<<endl;

I co miałoby to zrobić?

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
0

Przede wszystkim: https://dsp.krzaq.cc/post/304/jak-przeladowywac-operatory-w-mojej-klasie/

Odpowiadając na twój problem XY
Poniższy kod przepuści element iostream (ale nie zrobi nic sensownego, bo nie ma sensu):

Kopiuj

struct foo
{
    foo& operator<<(ostream&) {
        return *this;
    }
};

int main()
{
    foo f;
    f << cout;
}

std::endl jest szablonem funkcji:

Kopiuj
struct foo
{
    foo& operator<<(basic_ostream<char>&(*func)(basic_ostream<char>&))
    {
        // func == endl
        return *this;
    }
};

int main()
{
    foo f;
    f << endl;
}

Tylko odpowiedz sobie na pytanie: co rzeczywiście chcę zrobić i zaimplementuj operator<< idiomatycznie - tj jako operację przesunięcia bitowego albo jako zapis do ostream.

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
ostream &tab(ostream &s) { return s<<'\t'; }

int main()
{
    cout<<"ColA"<<tab<<"ColB"<<endl;
    return 0;
}

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.