Przeciążanie operatorów
Benny: Powiedzmy, że mam klasę zespolona. Jaki jest sens robienia funkcji wypisz skoro można
przeciążyć operator <<?
4 sty 21:40
Dziadek Mróz:
Bo funkcję wypisz używają początkowi programiści podczas nauki, a przeciążanie operatorów jest
jakieś 5 działów dalej w OOP
4 sty 22:40
Benny: Mam jeszcze pytanie odnośnie kawałka kodu.
friend istream&operator>>(istream &, zespolona &);
friend ostream&operator<<(ostream &, zespolona);
Czemu w jednym jest & a w drugim nie? Co to oznacza?
4 sty 22:44
Mariusz:
Poczytaj o referencji albo poczekaj na Dziadka
5 sty 14:08
jc: A w javie właściwie nie ma przeciążania, niejawnej konwersji i być może kilku podobnych
rzeczy i jakoś programiści sobie radzą.
5 sty 14:30
Benny: Nie jestem programistą
5 sty 14:34
Metis: A powinnieneś !
5 sty 14:38
Benny: Jakoś mnie to nie kręci
5 sty 14:53
KKrzysiek: Metis, masz jakieś ksiązki do algebry?
5 sty 14:55
Mariusz:
Niedawno zainteresowałeś się strukturami danych
Myślę że możesz zacząć od listy z funkcjami do obsługi stosu i kolejki
W Pascalu umieszczasz wszystko w jednym pliku
uses nazwa;
interface
{dyrektywy kompilatora, deklaracje modułów pomocniczych
deklaracje stałych , definicje typów, nagłówki procedur i funkcji}
implementation
{procedury i funkcje których nagłówki nie zostały wymienione w części interface
nagłówki funkcji i procedur razem z ciałami }
begin
end.
W C część interface umieszczasz w pliku nagłówkowym *.h
a część implementation oraz główny blok kodu w oddzielnych plikach *.c
5 sty 15:12
Dziadek Mróz:
Zgodnie z zasadami i logiką powinno być:
tu jest const bo wysyłasz stały obiekt do strumienia
vvvv
friend std::ostream &operator <<(std::ostream &os, const zespolona &z);
tu nie ma const bo zmieniasz obiekt przez strumień
vvvv
friend std::istream &operator >>(std::istream &is, zespolona &z);
Klasy iostream nie posiadają konstruktora kopiującego, więc należy zwrócić kopię w referencji.
std::cout zwraca referencję do std::ostream:
std::cout << 1 << 2 << 3;
to samo:
((std::cout << 1) << 2) << 3;
((coś od std::cout) << 2) << 3 ... (coś od std::cout) << 3 ... coś od std::cout
Twój zapis zwróci błąd bo kompilator będzie szukał konstruktora kopiującego dla iostream.
5 sty 23:01
Benny: Za dużo z tego nie rozumiem.
Kolejne pytanie:
W pewnej klasie określam sobie modyfikator praw dostępu jako private i pod tym definiuje sobie
zmienne float. Jaki jest ich zasięg w programie?
6 sty 13:56
Benny: Tylko w danej klasie mogę z nich korzystać, tak?
6 sty 13:57
Mariusz:
Z prywatnych tak
Spróbuj się pobawić kodem
Napisz sobie jakąś klasę a następnie klasę która dziedziczy po tej klasie
i jeszcze jedną klasę która nie dziedziczy po pierwszej klasie i przetestuj
działanie modyfikatorów private, protected i public
6 sty 14:09
Dziadek Mróz:
Atrybuty prywatne są dostępne w danej klasie i w klasach zaprzyjaźnionych
6 sty 14:16
Dziadek Mróz:
Atrybuty chronione są dostępne również w klasach dziedziczonych, publiczne są dostępne w całym
programie
6 sty 14:17