Az objektum statikus tulajdonsága azt jelenti. Statikus tagok és a statikus módosító

25. lecke

Eddig minden létrehozott objektum saját adatelemkészlettel rendelkezik. Az alkalmazás céljától függően előfordulhatnak olyan helyzetek, amikor az azonos osztályba tartozó objektumoknak egy vagy több adattagot kell megosztaniuk. Tegyük fel például, hogy egy fizetési programot ír, amely nyomon követi 1000 alkalmazott munkaidejét. Az adókulcs meghatározásához a programnak ismernie kell az egyes alkalmazottak munkakörülményeit. Ehhez használjunk osztályváltozót munkaállapot. Ha azonban minden alkalmazott azonos feltételek mellett dolgozik, a program megoszthatja ezt az adatelemet az összes típusú objektumhoz munkavállaló.Így a program csökkenti a szükséges memóriamennyiséget azáltal, hogy 999 másolatot dob ​​ki ugyanazon információkból. Egy osztály elemének megosztásához az elemet a következőként kell deklarálnia statikus (statikus). Ez a lecke bemutatja azokat a lépéseket, amelyeket meg kell tennie egy osztályelem több objektum közötti megosztásához. A lecke végére a következő alapfogalmakat sajátítja el:

    A C++ lehetővé teszi, hogy azonos típusú objektumok legyenek, amelyek egy vagy több tagot osztanak meg egy osztályban.

    Ha a program értéket rendel egy megosztott elemhez, akkor az adott osztály minden objektuma azonnal hozzáfér az új értékhez.

    Megosztott osztályadattag létrehozásához elő kell írnia az osztálytag nevét kulcsszó statikus.

    Miután a program osztálytagként deklarált statikus, deklarálnia kell egy globális változót (az osztálydefiníción kívül), amely megfelel az adott megosztott osztálytagnak.

    A programjai használhatják a kulcsszót statikus, hogy egy osztálymetódus hívható legyen, miközben a program még nem deklarálta az adott osztály egyetlen objektumát sem.

MEGOSZTOTT ELEMEK

Általában egy adott osztály objektumainak létrehozásakor minden objektum saját adattagkészletet kap. Előfordulhatnak azonban olyan helyzetek, amikor az azonos osztályba tartozó objektumoknak meg kell osztaniuk egy vagy több adatelemet. (statikus e adatelemek). Ilyen esetekben az adattagokat mint általános iszapÉs magán, majd fűzze a típus elé a kulcsszót statikus, az alábbi:

privát: statikus int megosztott_érték;

Az osztály deklarálása után az elemet globális változóként kell deklarálnia az osztályon kívül, az alábbiak szerint:

int osztálynév::megosztott_érték;

A következő SHARE_IT.CPP program határozza meg az osztályt könyv sorozat, megosztó elem oldalszám, amely egy osztály (sorozat) minden objektumára (könyvére) ugyanaz. Ha a program megváltoztatja ennek az elemnek az értékét, a változás azonnal tükröződik az osztály összes objektumában:

#beleértve

#beleértve

osztályú könyv_sorozat

( public: book_series(char *, char *, float); void show_book(void); void set_pages(int) ; private: static int page_count; char title; char author[ 64 ]; float price; );

int könyv_sorozat::oldal__szám;

void book_series::set_pages(int pages)

( oldalszám = oldalak; )

book_series::book_series(char *cím, karakter *szerző, változó ár)

( strcpy(könyvsorozat::cím, cím); strcpy(könyvsorozat::szerző, szerző); könyvsorozat::ár = ár; )

void könyv_sorozat::show_book(void)

(cout<< "Заголовок: " << title << endl; cout << "Автор: " << author << endl; cout << "Цена: " << price << endl; cout << "Страницы: " << page_count << endl; }

( book_series programing("Programozás megtanulása C++-ban", "Jamsa", 22.95); book_series word("A Word használatának megtanulása Windowshoz", "Wyatt", 19.95); word.set_pages(256); programing.show_book () szó.show_book() ; cout<< endl << "Изменение page_count " << endl; programming.set_pages(512); programming.show_book(); word.show_book(); }

Amint látja, az osztály kijelenti oldalszám Hogyan statikus int. Közvetlenül az osztálydefiníció után a program deklarál egy elemet oldalszám mint globális változó. Amikor egy program elemet változtat oldalszám, a változás azonnal tükröződik az osztály összes objektumában könyv sorozat.

Osztálytagok megosztása

A programtól függően előfordulhatnak olyan helyzetek, amikor bizonyos adatokat meg kell osztania egy objektum több példánya között. Ehhez deklaráljon egy ilyen elemet statikusnak. Ezután deklarálja ezt az elemet az osztályon kívül globális változóként. A program által ezen az elemen végrehajtott változtatások azonnal megjelennek az osztály objektumaiban.

Elemek használata attribútumokkalpublikus statikus ha objektumok nem léteznek

Ahogy most megtudtad, amikor egy osztály tagját a következőnek nyilvánítod statikus ezt az elemet az adott osztály összes objektuma megosztja. Előfordulhatnak azonban olyan helyzetek, amikor a program még nem hozta létre az objektumot, de használnia kell az elemet. Egy elem használatához a programnak a következőként kell deklarálnia nyilvánosÉs statikus. Például a következő USE_MBR.CPP program használja az elemet oldalszám osztályból könyv sorozat, még akkor is, ha ennek az osztálynak az objektumai nem léteznek:

#beleértve

#beleértve

osztályú könyv_sorozat

( public: static int page_count; private: char title ; char author; float price; );

int könyvsorozat::oldalszám;

void main(void) ( book_series::page_count = 256; cout<< "Текущее значение page_count равно " << book_series::page_count << endl; }

Ebben az esetben mivel az osztály az osztály egy elemét határozza meg oldalszám Hogyan nyilvános, a program hivatkozhat az osztály ezen elemére, még akkor is, ha az osztály objektumai könyv sorozat nem létezik.

STATIKUS TAGFUNKCIÓK HASZNÁLATA

Az előző program szemléltette a használatot statikus adatelemek. Hasonlóképpen, a C++ lehetővé teszi a definiálást statikus tagfüggvények (módszerek). Ha alkotsz statikus metódust, a program akkor is meghívhatja ezt a metódust, ha nem jött létre objektum. Például, ha az osztály olyan metódust tartalmaz, amely az osztályon kívüli adatokon használható, elkészítheti ezt a metódust statikus. Alul az osztály látható menü, amely az ANSI illesztőprogram esc szekvenciáját használja a képernyő törléséhez. Ha az ANSI.SYS illesztőprogram telepítve van a rendszerére, használhatja a módszert clear_screen a képernyő törléséhez. Mivel ez a módszer úgy van deklarálva statikus, a program akkor is tudja használni, ha típusú objektumok menü nem létezik. A következő CLR_SCR.CPP program használja a módszert clear_screen a kijelző tisztításához:

#beleértve

( public: static void clear_screen(void); // A többi metódusnak privátnak kell lennie: int a menüopciók_száma; );

void menü::clear_screen(void)

(cout<< "\033" << "}

Betöltés...
Top