Chciałbym jednak, aby w domyślnym konstruktorze, do zmiennej name była doklejona wartość zmiennej i, czyli wynikiem przy tworzeniu nowego obiektu ma być: “Bird#1”, przy kolejnych zmienia się tylko numer. Próbowałem tą zmienną jakoś rzutować na napis a potem dołączyć do napisu “Bird#”, ale nic mi z tego nie wyszło.
Ja tam się dziwię. To, że nie zastosowałem listy inicjalizacyjnej, a wszystkie funkcje włącznie z przeciążonym operatorem zrobiłem inline, nie znaczy, że od razu jest źle. Chociaż faktycznie zapomniałem dopisać const w argumentach funkcji. Nie rozumiem natomiast po co jest return w definicji operatora<<. Działa mi to tak samo zarówno z tym nim jak i bez niego. Jeśli chodzi o twoje rozwiązanie, to owszem jest dobre, chociaż nie chodziło mi o tworzenie zmiennej przechowującej unikatową wartość, tylko o dodanie wartości statycznej to napisu. W sumie jednak efekt jest ten sam, i póki co musi mi chyba wystarczyć, więc dzięki. Tak szczerze mówiąc to myślałem, że jest może jakaś funkcja lub coś podobnego dla klasy string, ale widzę że jednak nie - szkoda.
Nie możesz definiować funkcji w ciele klasy, w ciele klasy możesz definiować tylko metody. Kompilator powinien wywalić błąd, ale możliwe że akurat ten kompilator w ramach rozszerzenia możliwości rozpoznał po klauzule friend że jednak to nie jest metoda. W każdym razie źle nie inline, źle - niezgodność że standardem.
Jeżeli piszesz x=a+b*c; to najpierw się mnoży b \ *c , wynik tej operacji dodaje się do wartości a , wynik dodawania wpisuję się do x;
dokładnie tak samo jest w przypadku cout<<"objekt "<
do cout wrzucony zostaje napis, wynikiem tej operacji jest referencja na ten sam cout, do wyniku zostaje wrzucony obj wynikiem powinna być znowu referencja na cout, ponieważ właśnie do wyniku zostanie wrzucony endl;
Jeżeli działa bez tego to jest to szczęśliwy zbieg okoliczności, w rejestrze EAX przypadkiem został adres tego cout.