Citat:
icobh: Kao početnik u dizajniranju i programiranju klasa u C++, imam nekoliko nedoumica vezanih za klase uopšteno. Zato sam složio par pitanja na datu temu:
1. Zanima me, kada bih pisao klasu koju bi trebao da čita neki drugi programer, bolji sigurno, kakav bi stil pisanja trebao primjeniti, da bih ostavio pozitivan utisak? Osim standardnog pravila, da ono što ne mora da se i ne piše, da li postoji još nešto, čisto estetske prirode? Ono, da li pisati private ili public na početku? I ako bih prvo pisao private članice klase, da li navoditi ono private ili ne?
Izaberi neki od code guidelina i sledi. Ionako ako radis u timu ne biras ti nego kako vec ide.
Stil je najmanje bitan.
Citat:
2. U čemu se sastoji Idiot Proof zaštita kod klasa? Mislim, vidio sam da se konstruktor kopije može zaobići ukoliko se radi prenos podataka po adresi. Kako to spriječiti i o čemu ostalom treba voditi računa prilikom pisanja klase?
Tako sto ono ide u private stavljas u private , ono sto ide u public stavljas u public.
Nije mi jasno sta hoces reci sa time da se kopi konstruktor moze zaobici? Kopi se poziva
u odredjenim situacijama, zasto bi zeleo da to bude neophodno i u kom slucaju.Primer?
Citat:
3. Zašto se ovaj code ne može kompajlirati u Dev-C++ sa MinGW kompajlerom? Vidim da je problem konstruktor kopije, no zanima se kako na BCC-u 5.5 prolazi kao od šale a uz to i radi...
E sad dolazi ono glavno.
Koristis getchar i EXIT_SUCCESS makro. Fale ti cstdlib i cstdio headeri.
Kopi konstruktor nema potpis Skup(Skup&); vec Skup(const Skup&);
pa sad malo komentara o tvom programu.
Ukoliko imas jedno od destruktor,assignemnt operator,kopi konstruktor, pravilo je
da implementiras sva tri.
Gledaj da izbegavas da ispisujes poruke u funkcijama gde to nije mesto.
Ako vec moras bolje je da uzmes pokazivac/referencu na ostream
nego da hardkodujes na cout. Razumem da je ovo test program ali bez obzira.
Isto vazi za input.
Shodno tome hendlovanje gresaka odradi tako da f-ja vrati kod greske
ili ako se vec opredelis za exception-e, izbaci isti iz funckije, gde ces
po potrebi istu prikazati proverom return koda ili u catch bloku.
Navikni se da koristis const za parametre funkcija koje ne menjaju vrednost istih.
Isto vazi i za member funckije. Nek one koje ne menjaju vrednost member varijabli budu
i same const.
Funkcija broj_skupova bi trebalo da bude static ili friend zbog toga sto ne pristupa non static
member varijablama.
I na kraju, izbegavaj da komentarises ocigledne stvari.
Pozdrav!