Witam,
jeśli ten problem już pojawił się na forum to przepraszam za robienie szumu :)
Problem mam następujący: w programie mam dwie klasy, podstawowa A i pochodna od niej klasa B (dziedziczona publicznie). Mam też dwie globalne funkcje operatorowe:
istream& operator>>(istream& istr, A &foo) //zaprzyjaźniona z klasą A, nazywajmy ją funkcja1
istream& operator>>(istream& istr, B &bar) //zaprzyjaźniona z klasą B, nazywajmy ją funkcja2
Ich zadaniem jest wczytywanie danych ze strumienia do obiektów tych klas.
Gdzie pojawia się problem:
Tworzę obiekt klasy B i chcę coś do niego wczytać:
B costam;
jakisstrumien>>costam;
W swoim kodzie funkcja2 wywołuje funkcję1 w ten sposób:
operator>>(istr, bar);
...tu wczytywanie reszty pól...
W tym momencie kończą mi się pomysły. Jak spowodować, żeby wywołała się funkcja1 zamiast funkcji2 w tym przypadku? Kompilator ostrzega mnie:
warning C4717: 'operator>>' : recursive on all control paths, function will cause runtime stack overflow
Rzutowanie bar na typ A odpada, bo wtedy dane nie są wczytywane - tak jakby to rzutowanie powodowało przekazanie parametru do funkcji1 przez wartość, a nie referencję. Ktoś ma na to pomysł?
(Wiem, sama koncepcja takiego programu jest zła, no ale to siła wyższa, tak ma działać ten program i nie ode mnie to zależy).