ajmo redom:
@glorius
Nabavi čestitu knjigu za C++. Moj profesor Objektnog progamiranja kaže, a ja se slažem :), da su sve te knjige nauči nešto za 21 dan čista glupost (sve čekam kada će da izađe naučite da programirate svoj grafički OS za 21 dan). Naravno, pomenutu knjigu nisam čitao, pa možda i nije prikladno da govorim o njoj. Ali sve te "za 21 dan" knjige mi deluju kao šablonsko đubre za glupe Amerikance koji očekuju sve na gotovo i sve u nekoj instant varijanti (naravno, nisu svi amerikanci glupi, ali volim da koristim ovaj stereotip, jer ga svi razumemo ^_^). Knjiga koju ti ja toplo preporučujem je Laslo Kraus, "Programski jezik C++ sa rešenim zadacima". Zbirku zadataka istog autora pod imenom "Rešeni zadaci iz C++" ti
ne preporučujem iz prostog razloga što je dobar deo primera iz te zbirke već urađen (i detaljno objašnjen) u samoj knjizi. Knjiga nije skupa (mislim da je 800 dinara original) i vredi. Uglavnom je tipa praktičnog priručnika, ali se kroz nju prožima i malo C++ filozofije (npr polimorfizam). Mogu ti preporučiti i druge knjige, kao i on-line resurse. Npr intervjui sa B. Stroustrupom (
http://en.wikipedia.org/wiki/Bjarne_Stroustrup) su posebno interesantni, a naročito ovaj (
http://public.research.att.com/~bs/ieee_interview.pdf) - i ako već hoćeš da čitaš nešto od nekog stranog stručnjaka, bolje uzmi nešto njegovo, nešto sa dušom, nego te generičke "za 21 dan" knjige :)
A što se tiče const funkcija, apsolutno ne postoji ni jedan jedini razlog zašto ta funkcija ne bi smela da bude const. Čak smatram da je dobra praksa deklarisati je kao konstantnu, iz prostog razloga što će ti dozvoliti sabiranje dva konstantna objekta.
Nego, zašto bi u opšte hteo da preklapaš operator sabiranja kod klase Employee? Šta tu ima da se sabira? Mislim ono, MOŽEŠ da ga preklopiš da radi šta god ti srce ište, ali smatra se dobrom praksom da se operatori preklapaju tako da semantika C-a bude očuvana, što će reći da bude intuitivno jasno šta funkcija radi, zbog svih onih koji će koristiti tu funkciju kasnije, a koji ne moraju nužno imati uvid u implementaciju tog operatora (
http://en.wikipedia.org/wiki/Operator_overloading).
@vlaiv:
Uprvo zbog pravila očuvanja semantike nema svaka funkcija koja preklapa operator plus NE TREBA, VEĆ MORA biti deklarisana konstantnom. U tvom primeru programer je, kao što si sam rekao, odlučio da + znači njemu nešto interesantno, što nije korektno. U takvim slučajevima se ne preklapaju klase već se piše nova metoda, i ona se deklariše kao konstantna ili nekonstantna shodno tome šta radi. Ali operacija sabiranja ne menja ništa i ako ćeš to da promeniš, ne treba da je preklapaš :). A što se tiče tvog poslednjeg odgovora, to jest pitanja (koje mi deluje malo zbunjujuće, al' 'ajd' da probam): u izrazu tipa NeštoA = NeštoB + NeštoC, gde su NeštoA,NeštoB i NeštoC objekti neke klase Nešto (ne tvoje :)) a + pravilno preklopljen operator koji ne menja semantiku, rezultat sabiranja NIJE konstantan objekat klase Nešto, već najobičniji (nekonstantan, što će reći promenjiv) objekat klase Nešto. Ali bez obzira na to, rezultati se operatorom dodele (=) UVEK dodeljuju PO REFERENCI (osim ako si i njega preklopio tako da narušiš semantiku xD). Nadam se da je sada sve jasnije :)