Объект дээрх статик шинж чанар нь үүнийг илэрхийлдэг. Статик гишүүд ба статик өөрчлөгч

Хичээл 25

Өнөөг хүртэл таны үүсгэсэн объект бүр өөрийн гэсэн өгөгдлийн элементүүдтэй байдаг. Таны хэрэглээний зорилгоос хамааран нэг ангиллын объектууд нэг буюу хэд хэдэн өгөгдлийн гишүүнийг хуваалцах шаардлагатай нөхцөл байдал байж болно. Жишээлбэл, та 1000 ажилтны ажлын цагийг хянах төлбөрийн програм бичиж байна гэж бодъё. Татварын хувь хэмжээг тодорхойлохын тулд хөтөлбөр нь ажилтан бүрийн ажиллах нөхцөлийг мэддэг байх ёстой. Үүнд класс хувьсагч ашиглая ажлын_байдал.Гэсэн хэдий ч, хэрэв бүх ажилчид ижил нөхцөлд ажилладаг бол таны програм энэ төрлийн өгөгдлийн элементийг бүх төрлийн объектод ашиглах боломжтой ажилтан.Тиймээс таны програм ижил мэдээллийн 999 хуулбарыг хаяж, шаардлагатай санах ойн хэмжээг бууруулдаг. Ангийн элементийг хуваалцахын тулд та тухайн элементийг гэж зарлах ёстой статик (статик).Энэ хичээл нь олон объектын хооронд ангийн элементийг хуваалцахын тулд хийх шаардлагатай алхмуудыг багтаасан болно. Энэ хичээлийн төгсгөлд та дараах үндсэн ойлголтуудыг эзэмшсэн байх болно.

    C++ нь ангийн нэг буюу хэд хэдэн гишүүнийг хуваалцдаг ижил төрлийн объектуудтай байхыг зөвшөөрдөг.

    Хэрэв таны програм хуваалцсан элементэд утга оноох юм бол тухайн ангийн бүх объект тэр даруй шинэ утгад хандах эрхтэй болно.

    Хуваалцсан ангийн өгөгдлийн гишүүн үүсгэхийн тулд та ангийн гишүүний нэрийг угтвар тавих ёстой түлхүүр үг статик.

    Хөтөлбөр нь ангийн гишүүнийг зарласны дараа статик,энэ нь тухайн хуваалцсан ангийн гишүүнд тохирох глобал хувьсагчийг (ангиллын тодорхойлолтоос гадуур) зарлах ёстой.

    Таны програмууд түлхүүр үг ашиглах боломжтой статик,Програм нь тухайн ангийн объектыг хараахан зарлаагүй байхад ангийн аргыг дуудах боломжтой болгох.

ХУВААЛЦСАН ЗҮЙЛ

Ерөнхийдөө, та тодорхой ангийн объектыг үүсгэх үед объект бүр өөрийн өгөгдлийн гишүүдийн багцыг авдаг. Гэсэн хэдий ч нэг ангиллын объектууд нэг буюу хэд хэдэн өгөгдлийн элементийг хуваалцах шаардлагатай нөхцөл байдал байж болно. (статик eөгөгдлийн зүйл). Ийм тохиолдолд өгөгдлийн гишүүдийг зарлана ерөнхий лагТэгээд хувийн,дараа нь төрлийг түлхүүр үгээр угтаарай статик,дараах байдлаар:

хувийн: статик int хуваалцсан_утга;

Ангиа зарласны дараа доор үзүүлсэн шиг тухайн элементийг ангиас гадуур глобал хувьсагч болгон зарлах ёстой.

int ангийн_нэр::хуваалцсан_утга;

Дараах SHARE_IT.CPP программ нь ангиллыг тодорхойлдог номын_цуврал,хуваалцах элемент хуудасны_тоо,Энэ нь ангийн (цуврал) бүх объектын (ном) ижил байна. Хэрэв програм нь энэ элементийн утгыг өөрчилсөн бол өөрчлөлт нь ангийн бүх объектод шууд тусгагдана.

#оруулна

#оруулна

ангийн ном_цуврал

( 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 үнэ; );

int book_series::page__count;

хүчингүй номын цуврал:: багц_хуудас(инт хуудас)

( page_count = хуудас; )

book_series::book_series(чар *гарчиг, тэмдэгт *зохиогч, хөвөх үнэ)

( strcpy (номын_цуврал:: гарчиг, гарчиг); strcpy (номын_цуврал:: зохиогч, зохиогч); номын_цуврал:: үнэ = үнэ; )

хүчингүй номын цуврал :: номыг харуулах( хүчингүй)

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

( book_series programming("Learning to Program in C++", "Jamsa", 22.95); book_series word("Word for Windows-д ашиглаж сурах", "Wyatt", 19.95); word.set_pages(256); programming.show_book () ; word.show_book() ; cout<< endl << "Изменение page_count " << endl; programming.set_pages(512); programming.show_book(); word.show_book(); }

Таны харж байгаагаар анги тунхаглаж байна хуудасны_тооХэрхэн статик int.Ангийн тодорхойлолтын дараа программ нь элементийг зарладаг хуудасны_тооглобал хувьсагч болгон. Програм нь элементийг өөрчлөх үед хуудасны_тоо,өөрчлөлт нь ангийн бүх объектод шууд тусгагдсан болно номын_цуврал.

Ангийн гишүүдийг хуваалцах

Таны програмаас хамааран объектын олон тохиолдлын хооронд тодорхой өгөгдлийг хуваалцах шаардлагатай нөхцөл байдал байж болно. Үүнийг хийхийн тулд ийм элементийг статик гэж зарла. Дараа нь энэ элементийг ангиас гадуур глобал хувьсагч гэж зарлана. Таны програмын энэ элементэд хийсэн аливаа өөрчлөлт энэ ангийн объектуудад шууд тусгагдах болно.

Шинж чанар бүхий элементүүдийг ашиглахнийтийн статик бол объектууд байхгүй

Дөнгөж сая сурсанчлан ангийн гишүүнийг зарлахдаа статикЭнэ элементийг тухайн ангийн бүх объектууд хуваалцдаг. Гэсэн хэдий ч програм нь объектыг хараахан үүсгээгүй байгаа нөхцөл байдал байж болох ч элементийг ашиглах шаардлагатай болно. Элемент ашиглахын тулд таны програм үүнийг гэж зарлах ёстой олон нийтийнТэгээд статик.Жишээлбэл, дараах USE_MBR.CPP программ нь элементийг ашигладаг хуудасны_тооангиасаа номын_цуврал,энэ ангийн объектууд байхгүй байсан ч:

#оруулна

#оруулна

ангийн ном_цуврал

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

int book_series::page_count;

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

Энэ тохиолдолд анги нь тухайн ангийн элементийг тодорхойлдог тул хуудасны_тооХэрхэн олон нийтийн,программ нь тухайн ангийн объектууд байсан ч ангийн энэ элементэд хандаж болно номын_цувралбайдаггүй.

СТАТИК ГИШҮҮН ФУНКЦИЙГ АШИГЛАХ

Өмнөх програм нь ашиглалтыг харуулсан статикөгөгдлийн элементүүд. Үүний нэгэн адил C++ нь танд тодорхойлох боломжийг олгодог статикгишүүн функцууд (арга). Хэрэв та бүтээж байгаа бол статикАргын хувьд ямар ч объект үүсгэгдээгүй байсан ч таны програм тэр аргыг дуудаж болно. Жишээлбэл, хэрэв тухайн ангид ангиас гадуур өгөгдөлд ашиглаж болох арга байгаа бол та энэ аргыг хийж болно статик.Доорх анги байна цэс,дэлгэцийн дэлгэцийг цэвэрлэхийн тулд ANSI драйверын esc дарааллыг ашигладаг. Хэрэв таны системд ANSI.SYS драйвер суулгасан бол энэ аргыг ашиглаж болно цэвэр_дэлгэцдэлгэцийг цэвэрлэх. Учир нь энэ аргыг гэж зарласан статик,төрлийн объект байсан ч программ үүнийг ашиглаж болно цэсбайдаггүй. Дараах CLR_SCR.CPP програм нь аргыг ашигладаг цэвэр_дэлгэцдэлгэцийн дэлгэцийг цэвэрлэхийн тулд:

#оруулна

( public: static void clear_screen(void); // Бусад аргууд энд хувийн байх ёстой: int_options_options; );

хүчингүй цэс:: цэвэрлэх_дэлгэц (хүчингүй)

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

Ачааж байна...
Топ