Òåìà : Îáúåêòíî-îðèåíòèðîâàííîå ïðîåêòèðîâàíèå íà Borland C++
1. Îáùèå ñâåäåíèÿ î ïðîãðàììàõ íà Borland C++
2. Ñòðóêòóðà ãîëîâíîãî ôàéëà ïðîåêòà
3. Ñòðóêòóðà ôàéëîâ ìîäóëåé ôîðì
4. Îáëàñòè âèäèìîñòè è äîñòóï ê îáúåêòàì ìîäóëÿ
Ðàññìîòðèì âîïðîñû îáùåé îðãàíèçàöèè
ïðèëîæåíèÿ C++ è äîñòóïà ê îáúåêòàì, èõ ñâîéñòâàì è ìåòîäàì.
Ïðèëîæåíèå íà C++ ñîñòîèò èç
îáúÿâëåíèé (ïåðåìåííûõ, êîíñòàíò, òèïîâ, êëàññîâ, ôóíêöèé) è îïèñàíèé ôóíêöèé.
Ñðåäè ôóíêöèé âñåãäà èìååòñÿ ãëàâíàÿ - WinMain äëÿ ïðèëîæåíèé Windows. Èìåííî
ýòà ôóíêöèÿ âûïîëíÿåòñÿ ïðè çàïóñêå ïðèëîæåíèÿ, è âûïîëíÿåò òîëüêî íåêîòîðûå
ïîäãîòîâèòåëüíûå îïåðàöèè, íåîáõîäèìûå äëÿ íà÷àëà ðàáîòû. À äàëåå ïðè ÎÎ
ïîäõîäå ðàáîòà ïðèëîæåíèÿ îïðåäåëÿåòñÿ ïðîèñõîäÿùèìè ñîáûòèÿìè è ðåàêöèåé íà
íèõ îáúåêòîâ.
Êàê ïðàâèëî, ïðîãðàììû ñòðîÿòñÿ ïî
ìîäóëüíîìó ïðèíöèïó è ñîñòîÿò èç ìíîæåñòâà ìîäóëåé. ×åòêîå ñîáëþäåíèå ïðèíöèïîâ
ìîäóëüíîñòè â ñî÷åòàíèè ñ ïðèíöèïîì ñîêðûòèÿ èíôîðìàöèè ïîçâîëÿåò âíóòðè ëþáîãî
ìîäóëÿ ïðîâîäèòü íåîáõîäèìûå ìîäèôèêàöèè, íå çàòðàãèâàÿ ïðè ýòîì îñòàëüíûõ
ìîäóëåé è ãîëîâíóþ ôóíêöèþ.
Âñå îáúåêòû êîìïîíåíòîâ ðàçìåùàþòñÿ â
îáúåêòàõ - ôîðìàõ. Äëÿ êàæäîé ôîðìû C++Builder ñîçäàåò îòäåëüíûé ìîäóëü. Èìåííî
â ìîäóëÿõ è îñóùåñòâëÿåòñÿ ïðîãðàììèðîâàíèå çàäà÷è.  îáðàáîò÷èêàõ ñîáûòèé
îáúåêòîâ ðàçìåùàþòñÿ âñå àëãîðèòìû. Â îñíîâíîì îíè ñâîäÿòñÿ ê îáðàáîòêå
èíôîðìàöèè, ñîäåðæàùåéñÿ â ñâîéñòâàõ îäíèõ îáúåêòîâ, è çàäàíèè ïî ðåçóëüòàòàì
îáðàáîòêè ñâîéñòâ äðóãèõ îáúåêòîâ. Ïðè ýòîì ïîñòîÿííî ïðîèñõîäèò îáðàùàåíèå ê
ìåòîäàì ðàçëè÷íûõ îáúåêòîâ.
Ñîãëàñíî ïðèíöèïàì ñîêðûòèÿ
èíôîðìàöèè ìîäóëü ñîñòîèò èç çàãîëîâî÷íîãî ôàéëà, êîòîðûé ñîäåðæèò îáúÿâëåíèÿ
êëàññîâ, ôóíêöèé, ïåðåìåííûõ è ò.ï., è ôàéëà ðåàëèçàöèè, â êîòîðîì ñîäåðæèòñÿ
îïèñàíèå ôóíêöèé. Ñòàíäàðòíîå ðàñøèðåíèå çàãîëîâî÷íûõ ôàéëîâ - .h. Ñòàíäàðòíîå
ðàñøèðåíèå ôàéëîâ ðåàëèçàöèè - .ñðð.
Ïîñëå òîãî, êàê ïðèëîæåíèå íàïèñàíî,
íà åå îñíîâå ñîçäàåòñÿ âûïîëíÿåìûé ôàéë (ìîäóëü). Ýòîò ïðîöåññ îñóùåñòâëÿåòñÿ â
íåñêîëüêî ýòàïîâ.
Ñíà÷àëà ðàáîòàåò ïðåïðîöåññîð, êîòîðûé
ïðåîáðàçóåò èñõîäíûé òåêñò. Ïðåïðîöåññîð îñóùåñòâëÿåò ïðåîáðàçîâàíèÿ â
ñîîòâåòñòâèè ñî ñïåöèàëüíûìè äèðåêòèâàìè ïðåïðîöåññîðà, êîòîðûå ðàçìåùàþòñÿ â
èñõîäíîì òåêñòå. Ïðåïðîöåññîð ìîæåò â ñîîòâåòñòâèè ñ ýòèìè äèðåêòèâàìè âêëþ÷àòü
òåêñòû îäíèõ ôàéëîâ â òåêñòû äðóãèõ, ðàçâåðòûâàòü ìàêðîñû - ñîêðàùåííûå
îáîçíà÷åíèÿ ðàçëè÷íûõ âûðàæåíèé è âûïîëíÿòü ìíîæåñòâî äðóãèõ ïðåîáðàçîâàíèé.
Ïîñëå ïðåïðîöåññîðà ðàáîòàåò
êîìïèëÿòîð. Åãî çàäà÷à - ïåðåâåñòè òåêñòû ìîäóëåé â îáúåêòíûé êîä.  ðåçóëüòàòå
äëÿ êàæäîãî èñõîäíîãî ôàéëà .ñðð ñîçäàåòñÿ îáúåêòíûé ôàéë, èìåþùèé ðàñøèðåíèå
.obj.
Ïîñëå êîìïèëÿòîðà ðàáîòàåò
êîìïîíîâùèê, êîòîðûé îáúåäèíÿåò îáúåêòíûå ôàéëû â åäèíûé çàãðóçî÷íûé
âûïîëíÿåìûé ìîäóëü, èìåþùèé ðàñøèðåíèå .åõå. Ýòîò ìîäóëü ìîæíî çàïóñêàòü íà
âûïîëíåíèå.
 ïðîöåññå ïðîåêòèðîâàíèÿ ïðèëîæåíèÿ
C++Builder àâòîìàòè÷åñêè ñîçäàåò êîäû ãîëîâíîãî ôàéëà ïðîåêòà, êîäû îòäåëüíûõ
ìîäóëåé è êîäû èõ çàãîëîâî÷íûõ ôàéëîâ. Ãîëîâíîé ôàéë ïðîåêòà ñîäåðæèò ôóíêöèþ WinMain.
 ïðî÷èå ìîäóëè ââîäèòå ñâîé êîä, ñîçäàâàÿ îáðàáîò÷èêè ðàçëè÷íûõ ñîáûòèé. Â
çàãîëîâî÷íûå ôàéëû ýòèõ ìîäóëåé ïîìåùàþòñÿ âñå îáúÿâëåíèÿ. Íî ãîëîâíîé ìîäóëü,
êàê ïðàâèëî, íå ðåäàêòèðóåìûé. Òîëüêî â èñêëþ÷èòåëüíûõ ñëó÷àÿõ íàäî ÷òî-òî
èçìåíÿòü â òåêñòå ãîëîâíîãî ìîäóëÿ, ñãåíåðèðîâàííîì C++Builder. Òåì íå ìåíåå,
íàäî âñå-òàêè ïðåäñòàâëÿòü âèä ãîëîâíîãî ôàéëà ïðîåêòà è ïîíèìàòü, ÷òî îçíà÷àþò
åãî îïåðàòîðû.
Ïðîñìîòðåòü êîä ãîëîâíîãî ôàéëà
ïðîåêòà ìîæíî ÷åðåç ïóíêò ìåíþ Project | View Source. Òèïè÷íûé ãîëîâíîé ôàéë
ïðîåêòà èìååò ñëåäóþùèé âèä:
(1)
Íà÷èíàåòñÿ ôàéë ãîëîâíîãî ìîäóëÿ
äèðåêòèâàìè ïðåïðîöåññîðà, íàèáîëåå âàæíû äèðåêòèâû #include. Ýòè äèðåêòèâû ïîäêëþ÷àþò â äàííûé ôàéë òåêñòû óêàçàííûõ â
íèõ ôàéëîâ.  ÷àñòíîñòè, ïîäîáíûìè äèðåêòèâàìè âêëþ÷àþòñÿ â òåêñò çàãîëîâî÷íûå
ôàéëû. Äèðåêòèâà #include <vcl.h>
ïîäêëþ÷àåò çàãîëîâî÷íûé ôàéë vcl.h, ñîäåðæàùèé îáúÿâëåíèÿ, èñïîëüçóåìûå â
áèáëèîòåêå âèçóàëüíûõ êîìïîíåíòîâ C++Builder.
Ïîñëå äèðåêòèâ ïðåïðîöåññîðà â ôàéëå
ðàçìåùåíû ïðåäëîæåíèÿ USERES è USEPORM. Ýòî ìàêðîñû, èñïîëüçóåìûå äëÿ
ïîäêëþ÷åíèÿ ê ïðîåêòó ôàéëîâ ôîðì, ðåñóðñîâ è äð. Ïðåïðîöåññîð ðàçâåðíåò ýòè
ìàêðîñû â ñîîòâåòñòâóþùèé êîä. C++Builder àâòîìàòè÷åñêè ôîðìèðóåò
ñîîòâåòñòâóþùåå ïðåäëîæåíèå ñ ìàêðîñîì USEFORM äëÿ êàæäîé ôîðìû, âíîñèìîé â
ïðîåêò. Ïåðâûé ïàðàìåòð ìàêðîñà ñîäåðæèò èìÿ ôàéëà ìîäóëÿ, ñîîòâåòñòâóþùåãî
ôîðìå (íàïðèìåð, «Unit1.cpp»), à âòîðîé ïàðàìåòð - èìÿ ôîðìû.
Äàëåå ðàñïîëîæåíà ãëàâíàÿ ôóíêöèÿ
ïðîãðàììû - WinMain.
 òåëå ýòîé ôóíêöèè â ôèãóðíûõ
ñêîáêàõ ðàçìåùåíû ñëåäóþùèå îïåðàòîðû:
Application->Initialize
èíèöèàëèçèðóåò îáúåêòû êîìïîíåíòîâ äàííîãî ïðèëîæåíèÿ.
Application->CreateForm ñîçäàþò îáúåêòû ñîîòâåòñòâóþùèõ
ôîðì. Ôîðìû ñîçäàþòñÿ â òîé ïîñëåäîâàòåëüíîñòè, â êîòîðîé ñëåäóþò ýòè
îïåðàòîðû. Ïåðâàÿ èç ñîçäàâàåìûõ ôîðì ÿâëÿåòñÿ ãëàâíîé.
Application->Run íà÷èíàåò ñîáñòâåííî âûïîëíåíèå ïðîãðàììû. Ïîñëå ýòîãî
îïåðàòîðà ïðîãðàììà æäåò ñîîòâåòñòâóþùèõ ñîáûòèé, êîòîðûå è óïðàâëÿþò åå õîäîì.
Òåëî ôóíêöèè WinMain çàêëþ÷åíî â
áëîêè try è catch. Ýòî ñòðóêòóðà, ñâÿçàííàÿ ñ îáðàáîòêîé òàê íàçûâàåìûõ
èñêëþ÷åíèé - àâàðèéíûõ ñèòóàöèé, âîçíèêàþùèõ ïðè ðàáîòå ïðîãðàììû. Åñëè òàêàÿ
àâàðèéíàÿ ñèòóàöèÿ âîçíèêíåò, òî áóäóò âûïîëíåíû îïåðàòîðû, ðàñïîëîæåííûå â
áëîêå catch. Ïî óìîë÷àíèþ â ýòîì
áëîêå ðàñïîëîæåí ñòàíäàðòíûé îáðàáîò÷èê èñêëþ÷åíèé ñ ïîìîùüþ ôóíêöèè Application->ShowException.
Ïîñëåäíèé îïåðàòîð òåëà ôóíêöèè
WinMain - îïåðàòîð return 0;,
çàâåðøàþùèé ïðèëîæåíèå ñ êîäîì çàâåðøåíèÿ 0.
Âñå îïèñàííûå âûøå îïåðàòîðû
ãîëîâíîãî ôàéëà ïðèëîæåíèÿ çàíîñÿòñÿ â íåãî àâòîìàòè÷åñêè â ïðîöåññå
ïðîåêòèðîâàíèÿ ïðèëîæåíèÿ. Íàïðèìåð, ïðè äîáàâëåíèè â ïðîåêò íîâîé ôîðìû â ôàéë
àâòîìàòè÷åñêè âñòàâëÿþòñÿ ñîîòâåòñòâóþùåå ïðåäëîæåíèå USEFORM è îïåðàòîð Application->CreateForm,
ñîçäàþùèé ôîðìó. Òàê ÷òî îáû÷íî íè÷åãî â ãîëîâíîì ôàéëå èçìåíÿòü íå íàäî è äàæå
íåò íåîáõîäèìîñòè åãî ñìîòðåòü.
Èìÿ ãîëîâíîãî ôàéëà ïðîåêòà ïî
óìîë÷àíèþ äàåòñÿ ñòàíäàðòíîå: Project1, Project2 è ò.ï. Ýòî æå èìÿ áóäåò è ó
âûïîëíÿåìîãî ìîäóëÿ ïðîãðàììû. Òàê ÷òî æåëàòåëüíî èçìåíèòü èìÿ ïî óìîë÷àíèþ.
Äëÿ ýòîãî äîñòàòî÷íî ñîõðàíèòü ãîëîâíîé ôàéë ïðîåêòà ïîä ñîîòâåòñòâóþùèì
èìåíåì.
Âñåãäà íóæíî ñîõðàíÿòü ïðîåêò ïîä
êàêèì-òî îñìûñëåííûì èìåíåì. Èíà÷å î÷åíü ñêîðî ìîæíî çàïóòàòüñÿ â áåñêîíå÷íûõ
ïðîãðàììàõ Project1.
Ðàññìîòðèì òåïåðü òåêñòû ìîäóëåé
ôîðì. Êàæäûé òàêîé ìîäóëü ñîñòîèò èç äâóõ ôàéëîâ: çàãîëîâî÷íîãî, ñîäåðæàùåãî
îïèñàíèå êëàññà ôîðìû, è ôàéëà ðåàëèçàöèè. Íèæå ïðèâåäåíû òåêñòû ýòèõ ôàéëîâ
ìîäóëÿ ôîðìû, íà êîòîðîé ðàçìåùåí îäèí êîìïîíåíò òèïà TLabel è îäèí êîìïîíåíò
òèïà TButton. Ïîäðîáíûå êîììåíòàðèè â ýòîì òåêñòå ïîÿñíÿþò, êóäà è ÷òî â ýòîò
êîä ìîæåòå äîáàâëÿòü.
(2)
Çàãîëîâî÷íûé ôàéë:
(3)
Ôàéë ðåàëèçàöèè:
Ðàññìîòðèì ïîäðîáíåå ýòè ôàéëû.
Çàãîëîâî÷íûé ôàéë íà÷èíàåòñÿ ñ àâòîìàòè÷åñêè âêëþ÷åííûõ â íåãî äèðåêòèâ ïðåïðîöåññîðà.
 ÷àñòíîñòè, C++Builder ñàì ïîìåùàåò òóò äèðåêòèâû include, ïîäêëþ÷àþùèå êîïèè
ôàéëîâ, â êîòîðûõ îïèñàíû òå êîìïîíåíòû, ïåðåìåííûå, êîíñòàíòû, ôóíêöèè,
êîòîðûå èñïîëüçóþòñÿ â äàííîì ìîäóëå. Îäíàêî äëÿ íåêîòîðûõ ôóíêöèé òàêîå
àâòîìàòè÷åñêîå ïîäêëþ÷åíèå íå ïðîèçâîäèòñÿ.  ýòèõ ñëó÷àÿõ ðàçðàáîò÷èê äîëæåí
äîáàâèòü ñîîòâåòñòâóþùèå äèðåêòèâû include âðó÷íóþ.
Äàëåå ñëåäóåò îïèñàíèå êëàññà ôîðìû.
Èìÿ êëàññà ôîðìû - TForm1. Êëàññ
ñîäåðæèò òðè ðàçäåëà: published -
îòêðûòûé ðàçäåë, ñîäåðæàùèé îáúÿâëåíèÿ ðàçìåùåííûõ íà ôîðìå êîìïîíåíòîâ è
îáðàáîò÷èêîâ ñîáûòèé â íèõ, private
- çàêðûòûé ðàçäåë êëàññà, è public -
îòêðûòûé ðàçäåë êëàññà.  äàííîì ñëó÷àå â ðàçäåëå published ìîæåòå âèäåòü îáúÿâëåíèÿ óêàçàòåëåé íà äâà êîìïîíåíòà:
êîìïîíåíò Button1 òèïà TButton è
êîìïîíåíò Label1 òèïà TLabel è òàì
æå îáúÿâëåíèå ôóíêöèè Button1Click -
ââåäåííîãî ïîëüçîâàòåëåì îáðàáîò÷èêà ñîáûòèÿ ùåë÷êà íà êíîïêå Button1. Âñå, ÷òî èìååòñÿ â ðàçäåëå
published, C++Builder âêëþ÷àåò â íåãî àâòîìàòè÷åñêè â ïðîöåññå ïðîåêòèðîâàíèÿ
ôîðìû. À â ðàçäåëû private è public
ìîæåòå äîáàâëÿòü ñâîè îáúÿâëåíèÿ òèïîâ, ïåðåìåííûõ, ôóíêöèé. Òî, ÷òî îáúÿâëåíî
â ðàçäåëå public, áóäåò äîñòóïíî äëÿ
äðóãèõ êëàññîâ è ìîäóëåé. Òî, ÷òî îáúÿâëåíî â ðàçäåëå private, äîñòóïíî òîëüêî
â ïðåäåëàõ äàííîãî ìîäóëÿ. Êàê ìîæåòå âèäåòü, åäèíñòâåííîå, ÷òî C++Builder
ñàìîñòîÿòåëüíî âêëþ÷èë â ðàçäåë public,
ýòî îáúÿâëåíèå (ïðîòîòèï) êîíñòðóêòîðà ôîðìû TForm1.
Ïîñëå îáúÿâëåíèÿ êëàññà ñëåäóåò
ïðåäëîæåíèå PACKAGE, êîòîðîå âêëþ÷àåòñÿ
â ôàéë àâòîìàòè÷åñêè. Ïîñëå ýòîãî ìîæåòå ðàçìåñòèòü îáúÿâëåíèÿ òèïîâ,
ïåðåìåííûõ, ôóíêöèé, ê êîòîðûì ïðè ñîáëþäåíèè íåêîòîðûõ äîïîëíèòåëüíûõ óñëîâèé
áóäåò äîñòóï èç äðóãèõ ìîäóëåé, íî êîòîðûå íå âêëþ÷àþòñÿ â êëàññ ôîðìû.
Òåïåðü ðàññìîòðèì òåêñò ôàéëà
ðåàëèçàöèè ìîäóëÿ. Ïîñëå àâòîìàòè÷åñêè âêëþ÷åííûõ â ýòîò ôàéë äèðåêòèâ
ïðåïðîöåññîðà ñëåäóåò òîæå àâòîìàòè÷åñêè âêëþ÷åííîå îáúÿâëåíèå óêàçàòåëÿ íà
îáúåêò ôîðìû Form1, à çàòåì - âûçîâ
êîíñòðóêòîðà ôîðìû. Òåëî ñîîòâåòñòâóþùåé ôóíêöèè ïóñòîå, íî ìîæåòå âêëþ÷èòü â
íåãî êàêèå-òî îïåðàòîðû. Ïîñëå ýòîãî ðàçìåùàþòñÿ îïèñàíèÿ âñåõ ôóíêöèé,
îáúÿâëåííûõ â çàãîëîâî÷íîì ôàéëå. Çäåñü òàêæå ìîæíî ðàçìåùàòü îáúÿâëåíèÿ ëþáûõ
òèïîâ, êîíñòàíò, ïåðåìåííûõ, íå îáúÿâëåííûõ â çàãîëîâî÷íîì ôàéëå, è ðàçìåùàòü
îïèñàíèÿ ëþáûõ ôóíêöèé, íå óïîìÿíóòûõ â çàãîëîâî÷íîì ôàéëå. Èìåíà ôàéëàì
ìîäóëåé C++Builder äàåò ïî óìîë÷àíèþ: äëÿ ïåðâîãî ìîäóëÿ èìÿ ðàâíî Unit1, äëÿ
âòîðîãî Unit2 - è ò.ä.
4.1 Ïðèìåð ìîäóëÿ, ñîäåðæàùåãî
îáúåêòû è ïðîöåäóðû
Ðàññìîòðèì, êàê ìîæíî ââîäèòü â
ìîäóëü ïåðåìåííûå, ôóíêöèè è îñó- îñóùåñòâëÿòü ê íèì äîñòóï. Íèæå ïðèâåäåí
òåêñò êîäà ìîäóëÿ, â êîòîðîì íà ôîðìå ðàçìåùåíû äâà êîìïîíåíòà: êíîïêà Button1 òèïà TButton è ìåòêà Label1 òèïà
TLabel. Êðîìå òîãî, â ìîäóëå ââåäåí îáðàáîò÷èê ñîáûòèÿ, ñâÿçàííîãî ñî
ùåë÷êîì ïîëüçîâàòåëÿ íà êíîïêå, è â ðàçíûõ ìåñòàõ ìîäóëÿ ââåäåíû ïåðåìåííûå è
ôóíêöèè, ÷òîáû ìîæíî áûëî âèäåòü, êàê ïîëó÷èòü ê íèì äîñòóï.
Çàãîëîâî÷íûé ôàéë:
(5)
Ôàéë ðåàëèçàöèè:
Ïîìèìî ôóíêöèè Button1Click â êîä ìîäóëÿ âíåñåíû ôóíêöèè: Fl-F4, è ñèìâîëüíûå
ïåðåìåííûå: Ch1-Ch4. Ðàññìîòðèì
ïîäðîáíî ýòè ôóíêöèè. Íàì âàæíî ïîíÿòü, êàê èç ôóíêöèé îáðàùàòüñÿ ê ðàçëè÷íûì
îáúåêòàì è ïåðåìåííûì. Íî êðàòêîå îïèñàíèå òîãî, ÷òî äåëàþò ýòè ôóíêöèè, íàäî
äàòü.
Êàæäàÿ èç ôóíêöèé F1-F4 áåðåò
çíà÷åíèå ñâîéñòâà Caption ìåòêè TLabel,
ïðèáàâëÿåò ê íåé ñèìâîë, ïåðåäàííûé â íåå êàê ïàðàìåòð Ch, ïðèáàâëÿåò äàëåå ñèìâîë, õðàíÿùèéñÿ â ïåðåìåííîé Ch1, è âîçâðàùàåò íàäïèñü ñ ýòèìè
äîáàâëåíèÿìè îáðàòíî â ìåòêó.
Îáðàáîò÷èê TForm1::Button1Click
çàäàåò ïåðåìåííûì Ch1-Ch4 çíà÷åíèÿ
ñèìâîëîâ "-", "À", "Â" è "Ñ", çàòåì
î÷èùàåò ñâîéñòâî Caption ìåòêè Label1, çàíîñÿ â íåãî ïóñòóþ ñòðîêó, à
çàòåì ïîî÷åðåäíî îáðàùàåòñÿ ê ôóíêöèÿì Fl-F4, ïåðåäàâàÿ â íèõ â êà÷åñòâå
ïàðàìåòðîâ ðàçëè÷íûå ñèìâîëû.  çàêëþ÷åíèå íàäïèñü ìåòêè îêðàøèâàåòñÿ â êðàñíûé
öâåò ñâîéñòâîì Font->Color.
Çíà÷åíèå ýòîãî ñâîéñòâà èçìåíÿåò ïîñëåäíèé îïåðàòîð ïðîöåäóðû TForm1::Button1Click.
4.2 Äîñòóï ê ñâîéñòâàì è ìåòîäàì
îáúåêòîâ
Ðàññìîòðèì òåïåðü, êàê ïîëó÷èòü èç ïðîãðàììû
äîñòóï ê ñâîéñòâàì è ìåòîäàì îáúåêòîâ. Äîñòóï ê îáúåêòàì-êîìïîíåíòàì ìîæíî
ïîëó÷èòü ÷åðåç îáúÿâëåííûå â çàãîëîâî÷íîì ôàéëå ìîäóëÿ óêàçàòåëè íà ýòè
îáúåêòû. Íàïðèìåð, â îáúÿâëåíèè êëàññà ôîðìû TForm1 â çàãîëîâî÷íîì ôàéëå
èìååòñÿ ñòðîêà
TLabel *Label1;
Ýòà ñòðîêà îáúÿâëÿåò Label1 êàê
óêàçàòåëü íà ìåòêó - îáúåêò òèïà TLabel. Äîñòóï ê ýëåìåíòàì êëàññà
îáåñïå÷èâàåòñÿ ñ ïîìîùüþ îïåðàöèè ñòðåëêà.  ôàéëå ðåàëèçàöèè ìîäóëÿ â òåêñòàõ
ôóíêöèé F1 è F2 âûðàæåíèÿ âèäà Label1->Caption îçíà÷àþò: ñâîéñòâî Caption
îáúåêòà Label1. Èíîãäà ñâîéñòâî îáúåêòà ÿâëÿåòñÿ â ñâîþ î÷åðåäü îáúåêòîì. Òîãäà
â îáðàùåíèè ê ýòîìó ñâîéñòâó óêàçûâàåòñÿ âñÿ öåïî÷êà ïðåäøåñòâóþùèõ îáúåêòîâ.
Íàïðèìåð, ìåòêè èìåþò ñâîéñòâî Font - øðèôò, êîòîðîå â ñâîþ î÷åðåäü ÿâëÿåòñÿ
îáúåêòîì. Ó ýòîãî îáúåêòà èìååòñÿ ìíîæåñòâî ñâîéñòâ, â ÷àñòíîñòè, ñâîéñòâî
Color - öâåò øðèôòà. ×òîáû ñîñëàòüñÿ íà öâåò øðèôòà ìåòêè Label1, íàäî íàïèñàòü
Label1->Font->Color. Ýòî îçíà÷àåò: ñâîéñòâî Color îáúåêòà Font,
ïðèíàäëåæàùåãî îáúåêòó Label1. Àíàëîãè÷íàÿ íîòàöèÿ èñïîëüçóåòñÿ è äëÿ äîñòóïà ê
ìåòîäàì îáúåêòà.
Íàïðèìåð, äëÿ ìåòêè îïðåäåëåí ìåòîä Hide,
êîòîðûé äåëàåò ìåòêó íåâèäèìîé. Åñëè â êàêîé-òî ìîìåíò ðåøèëè ñäåëàòü ìåòêó Label1 íåâèäèìîé, ìîæåòå íàïèñàòü
îïåðàòîð
Label1->Hide();
4.3 Ðàçëè÷èå ïåðåìåííûõ è ôóíêöèé,
âêëþ÷åííûõ è íå âêëþ÷åííûõ â îïèñàíèå êëàññà
Ðàññìîòðèì, ÷åì ðàçëè÷àþòñÿ
ïåðåìåííûå è ôóíêöèè, âêëþ÷åííûå è íå âêëþ÷åííûå â îïèñàíèå êëàññà. Ïåðåìåííûå
è ôóíêöèè, âêëþ÷åííûå â îïèñàíèå êëàññà, îáû÷íî íàçûâàþòñÿ ñîîòâåòñòâåííî
äàííûìè-ýëåìåíòàìè è ôóíêöèÿìè-ýëåìåíòàìè. Ïðèìåíèòåëüíî ê ÎÎÏ â C++Builder èõ
íàçûâàþò ñâîéñòâàìè è ìåòîäàìè. Â ïðèâåäåííîì ïðèìåðå ïåðåìåííàÿ Ñh è ôóíêöèè
F1 è F2 âêëþ÷åíû â îïèñàíèå êëàññà, à ïåðåìåííûå Ch2, Ch3 è ôóíêöèè F3 è F4
îáúÿâëåíû âíå êëàññà.  ÷åì áóäåò ïðîÿâëÿòüñÿ ðàçëè÷èå â èõ èñïîëüçîâàíèè?
Åñëè â ïðèëîæåíèè ñîçäàåòñÿ òîëüêî
îäèí îáúåêò äàííîãî êëàññà (â ïðèìåðå - òîëüêî îäèí îáúåêò ôîðìû êëàññà
TForm1), òî ðàçëè÷èå â îñíîâíîì ÷èñòî âíåøíåå. Äëÿ ôóíêöèé, îáúÿâëåííûõ â
êëàññå, â èõ îïèñàíèè ê èìåíè ôóíêöèè äîëæíà äîáàâëÿòüñÿ ññûëêà íà êëàññ ñ
ïîìîùüþ îïåðàöèè ãëîáàëüíîãî ðàçðåøåíèÿ îáëàñòè äåéñòâèÿ (::). Â íàøåì ïðèìåðå
èìåíà ôóíêöèé F1, F2 è Button1Click â îïèñàíèè ýòèõ ôóíêöèé çàìåíÿþòñÿ íà
TForm1::Fl, TForm1::F2 è TForm1::Button1Click. Òåì ñàìûì óêàçûâàåòñÿ, ÷òî ðå÷ü
èäåò î ôóíêöèÿõ êëàññà TForm1. Äëÿ ôóíêöèé F3 è F4, îáúÿâëåííûõ âíå êëàññà,
òàêîãî äîïîëíåíèÿ ê èìåíè íå òðåáóåòñÿ.
Íåîáõîäèìîñòü äîáàâëåíèÿ â èìåíà
ôóíêöèé, îïèñàííûõ â êëàññå, ññûëîê íà êëàññ îáúÿñíÿåòñÿ ïðîñòî. Ìîæåòå âíå
êëàññà îïèñàòü äðóãóþ ñâîþ ôóíêöèþ ñ òåì æå èìåíåì (íàïðèìåð, F1), ÷òî è ó
ôóíêöèè êëàññà. È òîãäà èç ôóíêöèé, íå îïèñàííûõ â êëàññå, ñìîæåòå ññûëàòüñÿ íà
îáå ýòè ôóíêöèè F1, òîëüêî íà îäíó èç íèõ íåïîñðåäñòâåííî - ïî èìåíè F1, à íà
äðóãóþ ÷åðåç îáúåêò êëàññà - Form1::Fl. Áëàãîäàðÿ ýòîìó, ïðè îïèñàíèè ñâîèõ
ôóíêöèé âíå êëàññà ìîæåòå äàæå íå çíàòü èìåí âñåõ ôóíêöèé, îïèñàííûõ â êëàññå.
Íèêàêîé ïóòàíèöû ïðè ýòîì íå âîçíèêíåò.
Òàêèì îáðàçîì, ïðèìåíåíèå îïåðàöèè
ãëîáàëüíîãî ðàçðåøåíèÿ îáëàñòè äåéñòâèÿ ïîçâîëÿåò îáúÿâèòü â ðàçíûõ êëàññàõ è
âíå êëàññîâ ïåðåìåííûå è ôóíêöèè ñ îäèíàêîâûìè èìåíàìè.  ýòîì ñëó÷àå îïåðàöèÿ
ðàçðåøåíèÿ îáëàñòè äåéñòâèÿ óêàçûâàåò, î êàêîé èìåííî ïåðåìåííîé èëè ôóíêöèè
èäåò ðå÷ü.  íåêîòîðûõ ñëó÷àÿõ ïðè ðàáîòå ñ C++Builder ðàçðåøåíèå îáëàñòè
äåéñòâèÿ ïðèõîäèòñÿ äåëàòü âðó÷íóþ. Ýòî ïðîèñõîäèò â òåõ ñëó÷àÿõ, êîãäà
êîìïèëÿòîð âûäàåò ñîîáùåíèå, ÷òî íå ìîæåò âûáðàòü îäíó èç íåñêîëüêèõ
àëüòåðíàòèâ, íàïðèìåð, íå çíàåò, ê êàêîìó êëàññó îòíîñèòñÿ óêàçàííûé ìåòîä.
Îáðàùåíèå ê ïåðåìåííûì è ôóíêöèÿì,
îïèñàííûì âíóòðè è âíå êëàññà, èç ôóíêöèé, îïèñàííûõ âíå êëàññà, ðàçëè÷àåòñÿ. Ê
ïåðåìåííûì è ôóíêöèÿì, îïèñàííûì âíå êëàññà, îáðàùåíèå ïðîèñõîäèò ïðîñòî ïî èõ
èìåíàì, à ê ïåðåìåííûì è ôóíêöèÿì, îïèñàííûì â êëàññå, ÷åðåç èìÿ îáúåêòà
êëàññà. Ïîýòîìó â ïðèìåðå â ôóíêöèÿõ F3 è F4 îáðàùåíèå ê ïåðåìåííîé Ñh èìååò âèä Form1->Ch1. Ïî òîé æå
ïðè÷èíå è îáðàùåíèå ê ñâîéñòâó Caption îáúåêòà Label1 â ýòèõ ôóíêöèÿõ èìååò âèä
Form1->Label1->Caption. Òîëüêî ÷åðåç ññûëêó
íà îáúåêò Form1 âíåøíèå ïî îòíîøåíèþ ê êëàññó ôóíêöèè ìîãóò ïîëó÷èòü äîñòóï êî
âñåìó, îáúÿâëåííîìó â êëàññå.
Âñå ýòè ññûëêè íà îáúåêò íå òðåáóþòñÿ
â ôóíêöèÿõ, îáúÿâëåííûõ â êëàññå. Ïîýòîìó â ôóíêöèÿõ TForm1::Fl, TForm1::F2 è
TForm1::Button1Click ññûëêè íà ïåðåìåííóþ Ñh è íà îáúåêò Label1 íå ñîäåðæàò
äîïîëíèòåëüíûõ ññûëîê íà îáúåêò ôîðìû.
Åñëè â ïðèëîæåíèè ñîçäàåòñÿ íåñêîëüêî
îáúåêòîâ îäíîãî êëàññà, íàïðèìåð, íåñêîëüêî ôîðì êëàññà TForm1, òî ïðîÿâëÿþòñÿ
áîëåå ïðèíöèïèàëüíûå ðàçëè÷èÿ ìåæäó ïåðåìåííûìè, îïèñàííûìè âíóòðè è âíå
êëàññà. Ïåðåìåííûå âíå êëàññà (â íàøåì ïðèìåðå Ch2 è Ch3) òàê è îñòàþòñÿ â
îäíîì ýêçåìïëÿðå. À ïåðåìåííûå, îïèñàííûå â êëàññå (â íàøåì ïðèìåðå Ñh), òèðàæèðóþòñÿ ñòîëüêî ðàç, ñêîëüêî
îáúåêòîâ äàííîãî êëàññà ñîçäàíî. Ò.å. â êàæäîì îáúåêòå êëàññà TForm1 áóäåò ñâîÿ
ïåðåìåííàÿ Ñh è âñå îíè äðóã ñ äðóãîì íèêàê íå
áóäóò ñâÿçàíû. Òàêèì îáðàçîì, â ïåðåìåííóþ, îïèñàííóþ âíóòðè êëàññà, ìîæíî
çàíîñèòü êàêóþ-òî èíôîðìàöèþ, èíäèâèäóàëüíóþ äëÿ êàæäîãî îáúåêòà äàííîãî
êëàññà. À ïåðåìåííàÿ, îïèñàííàÿ â ìîäóëå âíå îïèñàíèÿ êëàññà, ìîæåò õðàíèòü
òîëüêî îäíî çíà÷åíèå.
Îòìåòèì åùå îäíó îñîáåííîñòü. Ïåðåä
èìåíàìè ôóíêöèé-ýëåìåíòîâ êëàññà ñòàâèòñÿ îïöèÿ êîìïèëÿòîðà _fastcall. Íå
âäàâàÿñü â äåòàëè ñêàæåì, ÷òî ýòà îïöèÿ âëèÿåò íà ïðîöåññ êîìïèëÿöèè è
îáåñïå÷èâàåò ïåðåäà÷ó ïàðàìåòðîâ ôóíêöèè â áûñòðûå ðåãèñòðû, ÷òî óñêîðÿåò âûçîâ
ôóíêöèè. Äëÿ ôóíêöèé-ýëåìåíòîâ êëàññîâ ýòó îïöèþ ñëåäóåò óêàçûâàòü âñåãäà. Äëÿ
äðóãèõ ôóíêöèé åå ìîæíî óêàçûâàòü, à ìîæíî è íå óêàçûâàòü. Âïðî÷åì, ýòó îïöèþ
öåëåñîîáðàçíî óêàçûâàòü è äëÿ ôóíêöèé, íå ÿâëÿþùèõñÿ ýëåìåíòàìè êëàññà.
 çàêëþ÷åíèå ïðîñóììèðóåì èçëîæåííûå ïðàâèëà.
§ Â ðåàëèçàöèþ ôóíêöèé-ýëåìåíòîâ äîëæíà
äîáàâëÿòüñÿ ññûëêà íà êëàññ ñ ïîìîùüþ îïåðàöèè ãëîáàëüíîãî ðàçðåøåíèÿ îáëàñòè
äåéñòâèÿ (::).
§ Ôóíêöèè-ýëåìåíòû îáúÿâëÿþòñÿ è
îïèñûâàþòñÿ ñ ïðèìåíåíèåì îïöèè êîìïèëÿòîðà _fastcall.
§ Â ôóíêöèÿõ-ýëåìåíòàõ îáðàùåíèå ê
äðóãèì ôóíêöèÿì-ýëåìåíòàì è äàííûì-ýëåìåíòàì òîãî æå êëàññà ìîæåò
îñóùåñòâëÿòüñÿ áåç óêàçàíèÿ íà îáúåêò.
§ Â ôóíêöèÿõ, íå ÿâëÿþùèõñÿ ýëåìåíòàìè
êëàññà äàííîãî îáúåêòà, äîñòóï ê ìåòîäàì è ñâîéñòâàì îñóùåñòâëÿåòñÿ ÷åðåç
óêàçàòåëü íà îáúåêò ñ ïîìîùüþ îïåðàöèè ñòðåëêà (->) èëè ñ ïîìîùüþ
ðàçûìåíîâàíèÿ óêàçàòåëÿ íà îáúåêò è îïåðàöèè òî÷êà (.).
4.4 Îáëàñòè âèäèìîñòè ïåðåìåííûõ è
ôóíêöèé
Ðàññìîòðèì âèäèìîñòü ôóíêöèé â
ïðèëîæåíèÿõ, èìåþùèõ íåñêîëüêî ìîäóëåé. Åñëè â ìîäóëå Unit1 â åãî çàãîëîâî÷íîì
ôàéëå âíå îïèñàíèÿ êëàññà îáúÿâèëè íåêîòîðóþ ôóíêöèþ F, òî â äðóãîì ìîäóëå
Unit2 ìîæåòå èñïîëüçîâàòü åå ïðè âûïîëíåíèè îäíîãî èç äâóõ óñëîâèé:
§ âêëþ÷àåòå äèðåêòèâîé #include â
ìîäóëü Unit2 çàãîëîâî÷íûé ôàéë Unit1.h
§ ïîâòîðÿåòå â ìîäóëå Unit2 (â çàãîëîâî÷íîì
ôàéëå èëè ôàéëå ðåàëèçàöèè) îáúÿâëåíèå ôóíêöèè F
 îáîèõ ñëó÷àÿõ ñìîæåòå âûçâàòü
ôóíêöèþ F èç ëþáîãî ìåñòà ìîäóëÿ Unit2.
Åñëè æå ôóíêöèÿ F îáúÿâëåíà â ìîäóëå
Unit1 íå çàãîëîâî÷íîì ôàéëå, à â ôàéëå ðåàëèçàöèè, òî åäèíñòâåííûé ñïîñîá
èñïîëüçîâàòü åå â ìîäóëå Unit2 - ïîâòîðèòü â íåì îáúÿâëåíèå ôóíêöèè.
Åñëè õîòèòå ïðåäîòâðàòèòü âîçìîæíîñòü
îáðàùåíèÿ ê ôóíêöèè èç äðóãîãî ìîäóëÿ, åå íàäî îáúÿâèòü ñî ñïåöèôèêàöèåé
static. Íàïðèìåð:
static void F(void);
Ïîäâåäåì íåêîòîðûå èòîãè ðàññìîòðåíèÿ
ïðîáëåì âèäèìîñòè ïåðåìåííûõ è ôóíêöèé.
Ïåðåìåííûå, îáúÿâëåííûå â
çàãîëîâî÷íîì ôàéëå ìîäóëÿ èëè â ôàéëå åãî ðåàëèçàöèè âíå îïèñàíèÿ êëàññà è
ôóíêöèé, ÿâëÿþòñÿ ãëîáàëüíûìè. Îíè äîñòóïíû âåçäå âíóòðè äàííîãî ìîäóëÿ. Äëÿ
äîñòóïà ê íèì èç âíåøíèõ ìîäóëåé â ýòèõ ìîäóëÿõ äîëæíî áûòü ïîâòîðåíî èõ
îáúÿâëåíèå ñ äîáàâëåíèåì ñïåöèôèêàöèè extern. Â ðàññìîòðåííîì ïðèìåðå ýòî
îòíîñèòñÿ ê ïåðåìåííûì Ñh2 è ÑhÇ.
Ôóíêöèè, îáúÿâëåííûå â çàãîëîâî÷íîì
ôàéëå ìîäóëÿ âíå îïèñàíèÿ êëàññà, ÿâëÿþòñÿ ãëîáàëüíûìè. Îíè äîñòóïíû âåçäå
âíóòðè äàííîãî ìîäóëÿ. Äëÿ äîñòóïà ê íèì èç âíåøíèõ ìîäóëåé â ýòèõ ìîäóëÿõ èëè
íàäî ïîâòîðèòü èõ îáúÿâëåíèå, èëè âêëþ÷èòü äèðåêòèâîé #include çàãîëîâî÷íûé
ôàéë òîãî ìîäóëÿ, â êîòîðîì ôóíêöèè îïèñàíû. Â ðàññìîòðåííîì ïðèìåðå ýòî
îòíîñèòñÿ ê ôóíêöèè F3.
Ôóíêöèè, îáúÿâëåííûå â ôàéëå
ðåàëèçàöèè ìîäóëÿ, ÿâëÿþòñÿ ãëîáàëüíûìè. Îíè äîñòóïíû âåçäå âíóòðè äàííîãî
ìîäóëÿ. Äëÿ äîñòóïà ê íèì èç âíåøíèõ ìîäóëåé â ýòèõ ìîäóëÿõ íàäî ïîâòîðèòü èõ
îáúÿâëåíèå. Â ðàññìîòðåííîì ïðèìåðå ýòî îòíîñèòñÿ ê ôóíêöèè F4.
Ýëåìåíòû (ïåðåìåííûå è ôóíêöèè),
îáúÿâëåííûå â êëàññå â ðàçäåëå private, âèäèìû è äîñòóïíû òîëüêî âíóòðè äàííîãî
ìîäóëÿ. Ïðè ýòîì èç ôóíêöèé, îáúÿâëåííûõ âíóòðè êëàññà, ê íèì ìîæíî îáðàùàòüñÿ
íåïîñðåäñòâåííî ïî èìåíè, à èç äðóãèõ ôóíêöèé - òîëüêî ñî ññûëêîé íà îáúåêò äàííîãî
êëàññà. Â ðàññìîòðåííîì ïðèìåðå ýòî îòíîñèòñÿ ê ïðîöåäóðå F1. Åñëè â ìîäóëå
îïèñàíî íåñêîëüêî êëàññîâ, òî îáúåêòû ýòèõ êëàññîâ âçàèìíî âèäÿò ýëåìåíòû,
îïèñàííûå â èõ ðàçäåëàõ private.
Ýëåìåíòû, îáúÿâëåííûå â êëàññå â
ðàçäåëå public, âèäèìû è äîñòóïíû äëÿ îáúåêòîâ ëþáûõ êëàññîâ è äëÿ äðóãèõ
ìîäóëåé, â êîòîðûõ äèðåêòèâîé include âêëþ÷åí çàãîëîâî÷íûé ôàéë äàííîãî ìîäóëÿ.
Ïðè ýòîì èç îáúåêòîâ òîãî æå êëàññà, ê íèì ìîæíî îáðàùàòüñÿ íåïîñðåäñòâåííî ïî
èìåíè, à èç äðóãèõ îáúåêòîâ è ïðîöåäóð - òîëüêî ñî ññûëêîé íà îáúåêò äàííîãî
êëàññà. Â ðàññìîòðåííîì ïðèìåðå ýòî îòíîñèòñÿ ê ïåðåìåííîé Ñh è ïðîöåäóðå F2.
 êëàññàõ ìîãóò áûòü åùå ðàçäåëû
protected -çàùèùåííûå. Ýëåìåíòû, îáúÿâëåííûå â êëàññå â ðàçäåëå protected,
âèäèìû è äîñòóïíû äëÿ ëþáûõ îáúåêòîâ âíóòðè äàííîãî ìîäóëÿ, à òàêæå äëÿ
îáúåêòîâ êëàññîâ-íàñëåäíèêîâ äàííîãî êëàññà â äðóãèõ ìîäóëÿõ. Îáúåêòû èç äðóãèõ
ìîäóëåé, êëàññû êîòîðûõ íå ÿâëÿþòñÿ íàñëåäíèêàìè äàííîãî êëàññà, çàùèùåííûõ
ýëåìåíòîâ íå âèäÿò.
Ýëåìåíòû, îáúÿâëåííûå âíóòðè ôóíêöèè
èëè áëîêà (â ðàññìîòðåííîì ïðèìåðå ýòî ïåðåìåííàÿ Ch4 îáúÿâëåííàÿ âíóòðè
ôóíêöèè TForm1::Button1Click), ÿâëÿþòñÿ ëîêàëüíûìè, ò.å. îíè âèäèìû è äîñòóïíû
òîëüêî âíóòðè äàííîé ôóíêöèè èëè äàííîãî áëîêà. Ïðè ýòîì âðåìÿ æèçíè
ïåðåìåííûõ, îáúÿâëåííûõ âíóòðè ôóíêöèè èëè áëîêà, îïðåäåëÿåòñÿ âðåìåíåì
àêòèâíîñòè äàííîãî áëîêà. Òàê ïåðåìåííàÿ Ch4 â íàøåì ïðèìåðå ñîçäàåòñÿ â ìîìåíò
âûçîâà ôóíêöèè TForm1::Button1Click è óíè÷òîæàåòñÿ ïðè çàâåðøåíèè ðàáîòû ýòîé
ôóíêöèè. Ñäåëàòü ëîêàëüíóþ ïåðåìåííóþ ñóùåñòâóþùåé ïîñòîÿííî ìîæíî ñ ïîìîùüþ ñïåöèôèêàöèè
static.
Ïåðåìåííûå è ôóíêöèè, îáúÿâëåííûå â
ãîëîâíîì ôàéëå ïðîåêòà, ÿâëÿþòñÿ ãëîáàëüíûìè äëÿ ýòîãî ôàéëà. Åñëè òðåáóåòñÿ
äîñòóï ê íèì èç äðóãèõ ìîäóëåé, òî äëÿ ôóíêöèé â íèõ äîëæíû áûòü ïîâòîðåíû èõ
îáúÿâëåíèÿ, à äëÿ ïåðåìåííûõ - ïîâòîðåíî îáúÿâëåíèå (áåç èíèöèàëèçàöèè) ñî
ñïåöèôèêàöèåé extern.
Åñëè âî âíóòðåííåì áëîêå îáúÿâëåíà
ïåðåìåííàÿ ñ òåì æå èìåíåì, ÷òî âî âíåøíåì áëîêå, èëè ñ òåì æå èìåíåì, ÷òî è
ãëîáàëüíàÿ ïåðåìåííàÿ, òî ñîîòâåòñòâóþùàÿ âíåøíÿÿ èëè ãëîáàëüíàÿ ïåðåìåííàÿ â
áëîêå íå âèäíà.  ýòîì ñëó÷àå ïîäó÷èòü äîñòóï ê îäíîèìåííîé ãëîáàëüíîé
ïåðåìåííîé ìîæíî òîëüêî ñ ïîìîùüþ óíàðíîé îïåðàöèè ðàçðåøåíèÿ îáëàñòè äåéñòâèÿ
"::".
Îñíîâîé îáúåêòíî-îðèåíòèðîâàííîãî
ïðîãðàììèðîâàíèÿ ÿâëÿþòñÿ îáúåêòû è êëàññû. Ðàññìîòðèì áîëåå ñëîæíûå è òîíêèå
âîïðîñû ðàáîòû ñ îáúåêòàìè. Óêàçàòåëü íà îáúåêò - ýòî ïåðåìåííàÿ, â êîòîðîé
õðàíèòñÿ ññûëêà íà îáúåêò íåêîòîðîãî êëàññà, ò.å. íà ìåñòî â ïàìÿòè, ãäå
ðàçìåùåí îáúåêò. Îáúÿâëåíèå (ñîçäàíèå) óêàçàòåëÿ íà îáúåêò íåêîòîðîãî êëàññà
(òèïà) ïðîèçâîäèòñÿ îïåðàòîðîì:
<òèï> *<óêàçàòåëü>;
Íàïðèìåð, ñëåäóþùåå îáúÿâëåíèå
ñîçäàåò óêàçàòåëü íà îáúåêò êëàññà TLabel:
TLabel *Lab;
Ñîçäàåòñÿ íå ñàì îáúåêò, à òîëüêî
óêàçàòåëü íà ëþáîé îáúåêò äàííîãî òèïà. Â ìîìåíò åãî ñîçäàíèÿ óêàçàòåëü èíèöèèðóåòñÿ
íóëåì. Íóëü íå ìîæåò àññîöèèðîâàòüñÿ íè ñ êàêèì îáúåêòîì â ïàìÿòè. Ïîýòîìó
îïðåäåëèòü, çàíåñåíà â óêàçàòåëü ññûëêà íà êîíêðåòíûé îáúåêò, èëè íåò, ìîæíî,
íàïðèìåð, îïåðàòîðîì:
if (Lab ==0) ... ;
Çäåñü ìíîãîòî÷èåì îáîçíà÷åíû íåêèå
äåéñòâèÿ, êîòîðûå íàäî äåëàòü ïðè îòñóòñòâèè ññûëêè.
 C++ ïðåäîïðåäåëåíà êîíñòàíòà NULL,
êîòîðàÿ ýêâèâàëåíòíà íóëåâîìó óêàçàòåëþ. Ïîýòîìó ïðèâåäåííûé âûøå îïåðàòîð
ýêâèâàëåíòåí ñëåäóþùåìó:
if (Lab == NULL) ...;
 äàëüíåéøåì óêàçàòåëþ ìîæíî
ïðèñâîèòü ññûëêó íà ëþáîé îáúåêò ñîîòâåòñòâóþùåãî êëàññà ïðîñòûì ïðèñâàèâàíèåì.
Íàïðèìåð:
Lab = Label1;
Òîãäà óêàçàòåëü Lab
ñòàíîâèòñÿ êàê áû ïñåâäîíèìîì îáúåêòà Label1. Îáà óêàçàòåëÿ: è Lab, è Label1
ññûëàþòñÿ íà îäèí è òîò æå îáúåêò. Íàïðèìåð,
Label1->Captiîn è Lab->Caption ññûëàþòñÿ íà íàäïèñü îäíîé è òîé æå ìåòêè.
 êà÷åñòâå òèïà îáúåêòà, íà êîòîðûé
ññûëàåòñÿ óêàçàòåëü, ìîæíî çàäàòü void. Íàïðèìåð:
void *Lab;
Òàêîé óêàçàòåëü íà void ìîæíî ðàññìàòðèâàòü êàê óêàçàòåëü
íà îáúåêò ëþáîãî òèïà. Â äàëüíåéøåì ýòîìó óêàçàòåëþ ìîæíî çàäàòü ïðîñòûì
ïðèñâàèâàíèåì ññûëêó íà îáúåêò ëþáîãî òèïà. Íî ðàçûìåíîâàíèå òàêîãî óêàçàòåëÿ
òðåáóåò ïðèìåíåíèÿ ÿâíîãî ïðèâåäåíèÿ òèïîâ, ïîñêîëüêó êîìïèëÿòîð íå çíàåò, íà
îáúåêò êàêîãî òèïà â äåéñòâèòåëüíîñòè ññûëàåòñÿ óêàçàòåëü. Ïîýòîìó äëÿ íåãî
íåëüçÿ, íàïðèìåð, ïîñëå ïðèñâàèâàíèÿ åìó ññûëêè íà ìåòêó Label1 íàïèñàòü ïðîñòî Lab->Caption.
Äëÿ ññûëêè íà íàäïèñü Caption ÷åðåç
ýòîò óêàçàòåëü íàäî ïèñàòü ((TLabel
*)Lab)->Caption, òî åñòü ÿâíûì îáðàçîì ïðèâîäèòü òèï óêàçàòåëÿ Lab ê òèïó "óêàçàòåëü íà îáúåêò êëàññà
TLabel".
Ìîæíî ñîçäàâàòü ññûëêó íà îáúåêò ñ
ïîìîùüþ óêàçàòåëÿ íå íà èñòèííûé êëàññ îáúåêòà, à íà îäèí èç êëàññîâ, êîòîðûì
íàñëåäóåò êëàññ äàííîãî îáúåêòà. Äåëî â òîì, ÷òî ëþáîé îáúåêò ìîæåò
ðàññìàòðèâàòüñÿ íå òîëüêî êàê îáúåêò ñâîåãî êëàññà, íî è êàê îáúåêò ëþáîãî
êëàññà-ïðåäêà. Ýòî â îáùåì äîñòàòî÷íî åñòåñòâåííî äëÿ îáû÷íîãî ïîíèìàíèÿ
îáúåêòîâ â ðåàëüíîì ìèðå.
Íàïðèìåð, óíèâåðñàëüíûì óêàçàòåëåì íà
ëþáîé êîìïîíåíò ìîæåò áûòü óêàçàòåëü íà êëàññ TControl - áàçîâûé êëàññ âñåõ
êîìïîíåíòîâ:
TConrrol *Contr;
Òàêîìó óêàçàòåëþ ìîæíî
íåïîñðåäñòâåííî ïðèñâàèâàòü ññûëêó íà ëþáîé êîìïîíåíò. Íàïðèìåð,
Contr = Label1;
Ïðè òàêîì ïðèñâàèâàíèè êîìïèëÿòîð ñàì
ïðîèçâîäèò íåîáõîäèìîå ïðèâåäåíèå òèïîâ. Íî ñ ýòèì óêàçàòåëåì Contr óæå íåëüçÿ
ðàáîòàòü íåïîñðåäñòâåííî êàê ñ óêàçàòåëåì íà ìåòêó. Äëÿ íåãî èçâåñòíû òîëüêî
ñâîéñòâà, îáúÿâëåííûå â êëàññå TControl. Ýòà òàêèå îáùèå ñâîéñòâà âñåõ
êîìïîíåíòîâ, êàê, íàïðèìåð, Name - èìÿ. Íåïîñðåäñòâåííàÿ ññûëêà íà
ñïåöèôè÷åñêèå ñâîéñòâà êëàññîâ-íàñëåäíèêîâ íåâîçìîæíà. Íàïðèìåð, ïîïûòêà
íàïèñàòü êîä Contr->Caption âûçîâåò ñîîáùåíèå êîìïèëÿòîðà îá îøèáêå, ñìûñë
êîòîðîãî çàêëþ÷àåòñÿ â òîì, ÷òî ñâîéñòâî Caption â êëàññå TControl íåäîñòóïíî.
Ïîýòîìó äëÿ äîñòóïà ê ìåòîäàì è ñâîéñòâàì, îòñóòñòâóþùèì â êëàññå TControl,
íàäî îñóùåñòâëÿòü ÿâíîå ïðèâåäåíèå òèïà óêàçàòåëÿ, íàïðèìåð:
((TLabel *)Contr)->Caption
Ýòîò êîä ãîâîðèò êîìïèëÿòîðó:
«Ðàññìàòðèâàé Contr êàê ññûëêó íà êëàññ TLabel». È òîãäà íèêàêèõ ñîîáùåíèé îá
îøèáêàõ íå âîçíèêàåò.
Ñîçäàíèå íîâîãî îáúåêòà òàêæå ñâÿçàíî
ñ ñîçäàíèåì óêàçàòåëÿ íà íåãî. Äëÿ ñîçäàíèÿ îáúåêòà ïðèìåíÿåòñÿ îïåðàöèÿ new.  íåé ïîñëå êëþ÷åâîãî ñëîâà new óêàçûâàåòñÿ êëàññ êîìïîíåíòà. Åñëè
îáúåêò ÿâëÿåòñÿ êîìïîíåíòîì, òî ïîñëå êëàññà êîìïîíåíòà â ñêîáêàõ óêàçûâàåòñÿ
êîìïîíåíò - õîçÿèí (Owner). Êðîìå
òîãî, ïîñëå ñîçäàíèÿ êîìïîíåíòà îáÿçàòåëüíî íàäî óêàçàòü åãî ðîäèòåëÿ (Parent)
- êîìïîíåíò, íà êîòîðîì ðàçìåùàåòñÿ íîâûé êîìïîíåíò. Ïîêà íå çàäàí ðîäèòåëü,
êîìïîíåíò íåëüçÿ óâèäåòü.
Ðàññìîòðèì ñëåäóþùèé êîä:
TLabel *Lab1 = new TLabel (Form1);
Lab1->Parent = Form1;
Lab1->Caption = "Ýòî íîâàÿ ìåòêà";
Ïåðâûé èç ýòèõ îïåðàòîðîâ ñîçäàåò
óêàçàòåëü Lab1 íà îáúåêò-ìåòêó òèïà TLabel è ñîçäàåò ñ ïîìîùüþ new ñàì îáúåêò-ìåòêó ñ õîçÿèíîì Form1. Ïîñëåäóþùèå îïåðàòîðû èñïîëüçóþò
óêàçàòåëü Lab1 äëÿ çàäàíèÿ ñâîéñòâ
ìåòêè: ðàçìåùàþò åå íà ôîðìå Form1 è
çàäàþò íà íåé íàäïèñü «Ýòî íîâàÿ ìåòêà»:
Ïîñêîëüêó íèêàêèå äðóãèå ñâîéñòâà
ìåòêè íå çàäàíû, îíè áóäóò óñòàíîâëåíû êîíñòðóêòîðîì êëàññà TLabel ñ óìîë÷àíèåì. Ýòîò êîíñòðóêòîð
íåÿâíûì îáðàçîì âûçûâàåòñÿ îïåðàöèåé new.