[ itf @ 13.03.2006. 14:00 ] @
Ja zaista ne mogu shvatiti čemu to služi. Što će mi statička varijabla u klasi, i čemu služe statičke funkcije kao članovi te klase? Može li mi itko na nekakvom primjeru objasniti? Hvala |
[ itf @ 13.03.2006. 14:00 ] @
[ gmail_ @ 13.03.2006. 14:45 ] @
Citat: itf: Što će mi statička varijabla u klasi pr: //Klasa.h class Klasa{ public: Klasa(){// konstruktor broj_Klasa_Objekta ++; obicana_varijabla++; } static int broj_Klasa_objekta; // staticka varijabla int obicna_varijabla;// obicna }; // recimo Klasa.cpp moze i u .h ali van tjela klase // definicija staticke varijable int Klasa::broj_Klasa_objekta = 1;// postavljanje na vrijdenost 1 ,ako se ne varam po //defaultu je 0 ali mora biti definirana //unutar nekog maina: ... cout << Klasa::broj_Klasa_objekta ; // ispisat ce 1 //primjeti da jos uvjek nemamo instacu klase Klasa Klasa k1;// instanca klase Klasa Klasa k2;// instanca klase Klasa Klasa k3;// instanca klase Klasa cou << k1.broj_Klasa_objekta ; // ispisat ce 2 cou << k2.broj_Klasa_objekta ; // ispisat ce 3 cou << k3.broj_Klasa_objekta ; // ispisat ce 4 //recimo da je pocetna vrijednost varijable obicna_varijabla = 0 //makar ce u ovom slucaju biti u njoj smece jer ju nismo definirali // ali teoretski uvjek ce ispisati 1 cou << k1.obicna_varijabla ; // ispisat ce 1 cou << k2.obicna_varijabla ; // ispisat ce 1 cou << k3.obicna_varijabla ; // ispisat ce 1 ... ZAKLJUCAK: staticka varijabla je djeljena izmedju svih objekta istog tipa i za nju se alocira prostor samo jednom i to prije nego se instancira klasa(u ovom slucaju prije nego se uslo u main) ( znaci laicki postoji samo jedna varijabla " broj_Klasa_objekta" bez obzira bilo 5 instanci klase Klasa ili nijedna) za funkcije ti je slicno: staticke funkcije su one funkcije koje mogu pristupiti samo statickim memberima klase uh al sam ga zakomplicirao ali nadam se da je bar malo pomoglo [Ovu poruku je menjao gmail_ dana 13.03.2006. u 15:46 GMT+1] [ X Files @ 13.03.2006. 14:58 ] @
Zamisli da tvoja klasa u sebi sadrži neki VELIKI BINARNI PODATAK, ka na primer neku
BITMAP-u od 2MB (Recimo sliku nečega). Zamisli šta bi se desilo da kreiraš 200 objekata te klase, a slika je naravno ista... static prosto kaze da je jedan primerak dovoljan. A evo ti i primer jednog vrhunskog programera radi slicnog problema: Citat: One more example. Once I created an imaging application, and the Image class had a 50k lookup table (precalculated data) to speed up some internal calculations. I accidentally made that lookup table a regular member, when it should have been a static member (the same pre-calculated data could have been shared by all instances). My mistake was not a traditional leak, because the memory was always deallocated, but I wasted unnecessarily too much memory. After having a hundred instances of that object, it became overwhelming, and I eventually got a memory leak complaint from the customer. No memory leak detector could find anything, while it was clear that the more objects I had, the available memory was decreasing rapidly, and after a careful look at the code, I spotted the "cockroach". It was one very hard to find problem. [Ovu poruku je menjao X Files dana 13.03.2006. u 15:59 GMT+1] [ itf @ 13.03.2006. 15:29 ] @
Sad kužim... Hvala
[ Dragi Tata @ 13.03.2006. 16:20 ] @
Citat: X Files: Zamisli da tvoja klasa u sebi sadrži neki VELIKI BINARNI PODATAK, ka na primer neku BITMAP-u od 2MB (Recimo sliku nečega). Zamisli šta bi se desilo da kreiraš 200 objekata te klase, a slika je naravno ista... Ovo je loš primer. Ako objekat sadrži veliki binarni podatak, kreiraj ga samo jednom i prosleđuj pointere ili reference na njega gde treba. [ Goran Arandjelovic @ 13.03.2006. 19:24 ] @
@itf
Npr. tako implementiraš reference counting u nekoj klasi... Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|