Òåìà 3. Îáúåêòíî-îðèåíòèðîâàííîå ïðîåêòèðîâàíèå íà Borland C++
1. Îáùèå
ñâåäåíèÿ î ïðîãðàììàõ íà Borland C++
2. Ñòðóêòóðà
ãîëîâíîãî ôàéëà ïðîåêòà
3. Ñòðóêòóðà
ôàéëîâ ìîäóëåé ôîðì
4. Îáëàñòè
âèäèìîñòè è äîñòóï ê îáúåêòàì ìîäóëÿ
Ðàññìîòðèì
âîïðîñû îáùåé îðãàíèçàöèè ïðèëîæåíèÿ C++ è äîñòóïà ê îáúåêòàì, èõ ñâîéñòâàì è
ìåòîäàì.
Ïðèëîæåíèå
íà C++ ñîñòîèò èç îáúÿâëåíèé (ïåðåìåííûõ, êîíñòàíò, òèïîâ, êëàññîâ, ôóíêöèé) è
îïèñàíèé ôóíêöèé. Ñðåäè ôóíêöèé âñåãäà èìååòñÿ ãëàâíàÿ - WinMain äëÿ ïðèëîæåíèé
Windows. Èìåííî ýòà ôóíêöèÿ âûïîëíÿåòñÿ ïðè çàïóñêå ïðèëîæåíèÿ, è âûïîëíÿåò
òîëüêî íåêîòîðûå ïîäãîòîâèòåëüíûå îïåðàöèè, íåîáõîäèìûå äëÿ íà÷àëà ðàáîòû. À
äàëåå ïðè ÎÎ ïîäõîäå ðàáîòà ïðèëîæåíèÿ îïðåäåëÿåòñÿ ïðîèñõîäÿùèìè ñîáûòèÿìè è
ðåàêöèåé íà íèõ îáúåêòîâ.
Êàê
ïðàâèëî, ïðîãðàììû ñòðîÿòñÿ ïî ìîäóëüíîìó ïðèíöèïó è ñîñòîÿò èç ìíîæåñòâà
ìîäóëåé. ×åòêîå ñîáëþäåíèå ïðèíöèïîâ ìîäóëüíîñòè â ñî÷åòàíèè ñ ïðèíöèïîì
ñîêðûòèÿ èíôîðìàöèè ïîçâîëÿåò âíóòðè ëþáîãî ìîäóëÿ ïðîâîäèòü íåîáõîäèìûå
ìîäèôèêàöèè, íå çàòðàãèâàÿ ïðè ýòîì îñòàëüíûõ ìîäóëåé è ãîëîâíóþ ôóíêöèþ.
Âñå
îáúåêòû êîìïîíåíòîâ ðàçìåùàþòñÿ â îáúåêòàõ - ôîðìàõ. Äëÿ êàæäîé ôîðìû
C++Builder ñîçäàåò îòäåëüíûé ìîäóëü. Èìåííî â ìîäóëÿõ è îñóùåñòâëÿåòñÿ ïðîãðàììèðîâàíèå
çàäà÷è.  îáðàáîò÷èêàõ ñîáûòèé îáúåêòîâ ðàçìåùàþòñÿ âñå àëãîðèòìû.  îñíîâíîì
îíè ñâîäÿòñÿ ê îáðàáîòêå èíôîðìàöèè, ñîäåðæàùåéñÿ â ñâîéñòâàõ îäíèõ îáúåêòîâ, è
çàäàíèè ïî ðåçóëüòàòàì îáðàáîòêè ñâîéñòâ äðóãèõ îáúåêòîâ. Ïðè ýòîì ïîñòîÿííî
ïðîèñõîäèò îáðàùåíèå ê ìåòîäàì ðàçëè÷íûõ îáúåêòîâ.
Ñîãëàñíî
ïðèíöèïàì ñîêðûòèÿ èíôîðìàöèè ìîäóëü ñîñòîèò èç çàãîëîâî÷íîãî ôàéëà, êîòîðûé
ñîäåðæèò îáúÿâëåíèÿ êëàññîâ, ôóíêöèé, ïåðåìåííûõ è ò.ï., è ôàéëà ðåàëèçàöèè, â
êîòîðîì ñîäåðæèòñÿ îïèñàíèå ôóíêöèé. Ñòàíäàðòíîå ðàñøèðåíèå çàãîëîâî÷íûõ ôàéëîâ
- .h. Ñòàíäàðòíîå ðàñøèðåíèå ôàéëîâ ðåàëèçàöèè - .ñðð.
Ïîñëå
òîãî, êàê ïðèëîæåíèå íàïèñàíî, íà åå îñíîâå ñîçäàåòñÿ âûïîëíÿåìûé ôàéë
(ìîäóëü). Ýòîò ïðîöåññ îñóùåñòâëÿåòñÿ â íåñêîëüêî ýòàïîâ.
Ñíà÷àëà
ðàáîòàåò ïðåïðîöåññîð, êîòîðûé ïðåîáðàçóåò èñõîäíûé òåêñò. Ïðåïðîöåññîð
îñóùåñòâëÿåò ïðåîáðàçîâàíèÿ â ñîîòâåòñòâèè ñî ñïåöèàëüíûìè äèðåêòèâàìè
ïðåïðîöåññîðà, êîòîðûå ðàçìåùàþòñÿ â èñõîäíîì òåêñòå. Ïðåïðîöåññîð ìîæåò â
ñîîòâåòñòâèè ñ ýòèìè äèðåêòèâàìè âêëþ÷àòü òåêñòû îäíèõ ôàéëîâ â òåêñòû äðóãèõ,
ðàçâåðòûâàòü ìàêðîñû - ñîêðàùåííûå îáîçíà÷åíèÿ ðàçëè÷íûõ âûðàæåíèé è âûïîëíÿòü
ìíîæåñòâî äðóãèõ ïðåîáðàçîâàíèé.
Ïîñëå
ïðåïðîöåññîðà ðàáîòàåò êîìïèëÿòîð. Åãî çàäà÷à - ïåðåâåñòè òåêñòû ìîäóëåé â
îáúåêòíûé êîä. Â ðåçóëüòàòå äëÿ êàæäîãî èñõîäíîãî ôàéëà .ñðð ñîçäàåòñÿ
îáúåêòíûé ôàéë, èìåþùèé ðàñøèðåíèå .obj.
Ïîñëå
êîìïèëÿòîðà ðàáîòàåò êîìïîíîâùèê, êîòîðûé îáúåäèíÿåò îáúåêòíûå ôàéëû â åäèíûé
çàãðóçî÷íûé âûïîëíÿåìûé ìîäóëü, èìåþùèé ðàñøèðåíèå .åõå. Ýòîò ìîäóëü ìîæíî
çàïóñêàòü íà âûïîëíåíèå.
Â
ïðîöåññå ïðîåêòèðîâàíèÿ ïðèëîæåíèÿ C++Builder àâòîìàòè÷åñêè ñîçäàåò êîäû
ãîëîâíîãî ôàéëà ïðîåêòà, êîäû îòäåëüíûõ ìîäóëåé è êîäû èõ çàãîëîâî÷íûõ ôàéëîâ.
Ãîëîâíîé ôàéë ïðîåêòà ñîäåðæèò ôóíêöèþ WinMain.  ïðî÷èå ìîäóëè ââîäèòå ñâîé
êîä, ñîçäàâàÿ îáðàáîò÷èêè ðàçëè÷íûõ ñîáûòèé.  çàãîëîâî÷íûå ôàéëû ýòèõ ìîäóëåé
ïîìåùàþòñÿ âñå îáúÿâëåíèÿ. Íî ãîëîâíîé ìîäóëü, êàê ïðàâèëî, íå ðåäàêòèðóåìûé.
Òîëüêî â èñêëþ÷èòåëüíûõ ñëó÷àÿõ íàäî ÷òî-òî èçìåíÿòü â òåêñòå ãîëîâíîãî ìîäóëÿ,
ñãåíåðèðîâàííîì C++Builder. Òåì íå ìåíåå, íàäî âñå-òàêè ïðåäñòàâëÿòü âèä
ãîëîâíîãî ôàéëà ïðîåêòà è ïîíèìàòü, ÷òî îçíà÷àþò åãî îïåðàòîðû.
Ïðîñìîòðåòü
êîä ãîëîâíîãî ôàéëà ïðîåêòà ìîæíî ÷åðåç ïóíêò ìåíþ Project | View Source.
Òèïè÷íûé ãîëîâíîé ôàéë ïðîåêòà èìååò ñëåäóþùèé âèä:
Íà÷èíàåòñÿ
ôàéë ãîëîâíîãî ìîäóëÿ äèðåêòèâàìè ïðåïðîöåññîðà, íàèáîëåå âàæíû äèðåêòèâû #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. Ïîäðîáíûå êîììåíòàðèè â ýòîì òåêñòå
ïîÿñíÿþò, êóäà è ÷òî â ýòîò êîä ìîæåòå äîáàâëÿòü.
Çàãîëîâî÷íûé
ôàéë:
Ôàéë
ðåàëèçàöèè:
Ðàññìîòðèì
ïîäðîáíåå ýòè ôàéëû. Çàãîëîâî÷íûé ôàéë íà÷èíàåòñÿ ñ àâòîìàòè÷åñêè âêëþ÷åííûõ â
íåãî äèðåêòèâ ïðåïðîöåññîðà.  ÷àñòíîñòè, 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. Êðîìå òîãî, â ìîäóëå ââåäåí îáðàáîò÷èê ñîáûòèÿ,
ñâÿçàííîãî ñî ùåë÷êîì ïîëüçîâàòåëÿ íà êíîïêå, è â ðàçíûõ ìåñòàõ ìîäóëÿ ââåäåíû
ïåðåìåííûå è ôóíêöèè, ÷òîáû ìîæíî áûëî âèäåòü, êàê ïîëó÷èòü ê íèì äîñòóï.
Ôàéë ðåàëèçàöèè:
Ïîìèìî
ôóíêöèè 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 Îáëàñòè âèäèìîñòè ïåðåìåííûõ è ôóíêöèé
Òåïåðü
îñòàíîâèìñÿ íà âîïðîñå îá îáëàñòÿõ âèäèìîñòè èëè îáëàñòÿõ äåéñòâèÿ ýëåìåíòîâ
ïðîãðàììû - ïåðåìåííûõ è ôóíêöèé, ò.å. î ñâÿçè ìåñòà èõ îáúÿâëåíèÿ â ïðîãðàììå
è ìåñòà èõ èñïîëüçîâàíèÿ.
Ïðè
ðåøåíèè âîïðîñîâ âèäèìîñòè âàæíåéøåå çíà÷åíèå èìååò ïîíÿòèå áëîêà. Áëîê - ýòî
ôðàãìåíò êîäà, îãðàíè÷åííûé ôèãóðíûìè ñêîáêàìè "{}". Ïåðåìåííûå,
îáúÿâëåííûå âíå êàêîãî-òî áëîêà, ÿâëÿþòñÿ ãëîáàëüíûìè è èìåþò îáëàñòüþ
âèäèìîñòè ôàéë. Åñëè êàêàÿ-òî ïåðåìåííàÿ îáúÿâëåíà âíóòðè áëîêà, òî åå îáëàñòü
âèäèìîñòè - áëîê. Ò.å. ýòî ëîêàëüíàÿ ïåðåìåííàÿ, êîòîðóþ ìîæíî èñïîëüçîâàòü
òîëüêî îò ìîìåíòà åå îáúÿâëåíèÿ äî ïåðâîé âñòðåòèâøåéñÿ â êîäå çàêðûâàþùåéñÿ
ôèãóðíîé ñêîáêè "}". Åñëè èìåþòñÿ âëîæåííûå áëîêè, òî ïåðåìåííàÿ
âèäíà è â ýòèõ âëîæåííûõ áëîêàõ. Åñëè â êàêîì-òî áëîêå îáúÿâëåíà ïåðåìåííàÿ ñ
òåì æå èìåíåì, êàêîå èìååò ãëîáàëüíàÿ ïåðåìåííàÿ èëè ïåðåìåííàÿ, îáúÿâëåííàÿ âî
âíåøíåì áëîêå, òî ýòî âíóòðåííåå îáúÿâëåíèå äåëàåò íåâèäèìîé îäíîèìåííóþ
âíåøíþþ ïåðåìåííóþ.
Íàïðèìåð:
Íàïðèìåð:
int
i = 1, k = 4; // îáúÿâëåíèå
ãëîáàëüíûõ ïåðåìåííûõ I
{
int
i = 5, j = 2; // îáúÿâëåíèå
ïåðåìåííûõ âíåøíåãî áëîêà
....
{
// âèäíû ïåðåìåííûå j, ê
// è ïåðåìåííàÿ i ýòîãî áëîêà
int
i = 7; // îáúÿâëåíèå
ïåðåìåííîé i âíóòðåííåãî áëîêà
...
// âèäíû ïåðåìåííûå j, k
// è ïåðåìåííàÿ i âíóòðåííÿÿ
}
... // âèäíû ïåðåìåííûå j, ê
// è ïåðåìåííàÿ i âíåøíåãî áëîêà
}
Ëîêàëüíàÿ
ïåðåìåííàÿ íå òîëüêî âèäèìà â ïðåäåëàõ áëîêà, â êîòîðîì îíà îáúÿâëåíà. Åå âðåìÿ
æèçíè òîæå îïðåäåëÿåòñÿ âðåìåíåì âûïîëíåíèÿ áëîêà. Ïåðåìåííàÿ ñîçäàåòñÿ â
ìîìåíò âõîäà â áëîê è ðàçðóøàåòñÿ â òîò ìîìåíò, êîãäà óïðàâëåíèå âûõîäèò çà
ïðåäåëû áëîêà. Òàêèì îáðàçîì, ïîäîáíàÿ ïåðåìåííàÿ íå ìîæåò ñîõðàíÿòü êàêèå-òî
çíà÷åíèÿ â ïðîìåæóòêàõ ìåæäó âûïîëíåíèåì îïåðàòîðîâ áëîêà.  ïðèâåäåííîì
ïðèìåðå ïåðåìåííàÿ i âî âíóòðåííåì áëîêå áóäåò ñîçäàâàòüñÿ êàæäûé ðàç, êîãäà
óïðàâëåíèå ïåðåäàåòñÿ â ýòîò áëîê, åé êàæäûé ðàç áóäåò ïðèñâàèâàòüñÿ çíà÷åíèå 7
è îíà êàæäûé ðàç áóäåò ðàçðóøàòüñÿ ïðè âûõîäå èç áëîêà.
Ñêàçàííîå
âûøå î âðåìåíè æèçíè îòíîñèòñÿ ê òàê íàçûâàåìûì àâòîìàòè÷åñêèì (auto)
ïåðåìåííûì è íå îòíîñèòñÿ ê ñòàòè÷åñêèì ïåðåìåííûì, îáúÿâëåííûì êàê static.
Íàïðèìåð:
static
int i = 7;
Òàêèå
ñòàòè÷åñêèå ïåðåìåííûå ñóùåñòâóþò âñå âðåìÿ ðàáîòû ïðîãðàììû è èíèöèàëèçèðóþòñÿ
òîëüêî îäèí ðàç. Òàêèì îáðàçîì, â ýòèõ ïåðåìåííûõ ìîæíî íàêàïëèâàòü êàêóþ-òî
èíôîðìàöèþ. Íàïðèìåð, îíè ìîãóò ñëóæèòü ñ÷åò÷èêàìè ÷èñëà îáðàùåíèé ê áëîêó.
Âûøå
ãîâîðèëîñü, ÷òî åñëè âî âíóòðåííåì áëîêå îáúÿâëåíà ïåðåìåííàÿ ñ òåì æå èìåíåì,
÷òî âî âíåøíåì áëîêå, èëè ñ òåì æå èìåíåì, ÷òî è ãëîáàëüíàÿ ïåðåìåííàÿ, òî
ñîîòâåòñòâóþùàÿ ãëîáàëüíàÿ ïåðåìåííàÿ â áëîêå íå âèäíà. Îäíàêî â C++ èìååòñÿ
óíàðíàÿ îïåðàöèÿ ðàçðåøåíèÿ îáëàñòè äåéñòâèÿ, ïîçâîëÿþùàÿ âñå-òàêè âî
âíóòðåííåì áëîêå îáðàùàòüñÿ ê ãëîáàëüíîé ïåðåìåííîé ñ òåì æå èäåíòèôèêàòîðîì.
Îïåðàöèÿ îáîçíà÷àåòñÿ äâóìÿ ñèìâîëàìè äâîåòî÷èÿ "::". Åñëè ïîñòàâèòü
ýòè ñèìâîëû ïåðåä èäåíòèôèêàòîðîì ïåðåìåííîé, òî îáðàùåíèå áóäåò ê ãëîáàëüíîé
ïåðåìåííîé ñ ýòèì èìåíåì. Òàê â ïðèâåäåííîì âûøå ïðèìåðå âî âíóòðåííåì áëîêå
ìîæíî, íàïðèìåð, çàïèñàòü îïåðàòîð
i = : : i + 1 ;
Ýòîò
îïåðàòîð ïðèñâîèò âíóòðåííåé ïåðåìåííîé i çíà÷åíèå íà åäèíèöó áîëüøåå çíà÷åíèÿ
ãëîáàëüíîé ïåðåìåííîé i.
Ïîä÷åðêíåì,
÷òî òàêèì îáðàçîì ìîæíî ïîëó÷èòü äîñòóï òîëüêî ê îäíîèìåííîé ãëîáàëüíîé
ïåðåìåííîé, à íå ê ëîêàëüíîé ïåðåìåííîé, îïèñàííîé âî âíåøíåì áëîêå. (52 ñëàéä)
Òåïåðü
îñòàíîâèìñÿ íà ïðîáëåìàõ âèäèìîñòè ïåðåìåííûõ â ïðèëîæåíèÿõ, èìåþùèõ íåñêîëüêî
ìîäóëåé. Ïóñòü èìååòå äâà ìîäóëÿ - Unit1 è Unit2 è õîòèòå â ìîäóëå Unit2 èñïîëüçîâàòü
ïåðåìåííûå è ôóíêöèè, îáúÿâëåííûå â ìîäóëå Unit1. Ìîæåòå â ìîäóëå Unit2 âèäåòü
òå ïåðåìåííûå, êîòîðûå ÿâëÿþòñÿ ãëîáàëüíûìè â ìîäóëå Unit1, ò.å. îáúÿâëåíû âíå
êàêèõ-íèáóäü ôóíêöèé â çàãîëîâî÷íîì ôàéëå ìîäóëÿ èëè â åãî ôàéëå ðåàëèçàöèè. Íî
äëÿ òîãî, ÷òîáû ýòî áûëî âîçìîæíî, äîëæíû ïîâòîðíî îáúÿâèòü èõ (áåç
èíèöèàëèçàöèè) â ìîäóëå Unit2 ñî ñïåöèôèêàöèåé extern. Íàïðèìåð, åñëè â ìîäóëå
Unit1 èìååòñÿ îáúÿâëåíèå ãëîáàëüíîé ïåðåìåííîé
int
a1 = 10;
òî
â ìîäóëå Unit2 ìîæåòå èñïîëüçîâàòü ýòó ïåðåìåííóþ, åñëè çàïèøåòå îáúÿâëåíèå
extern
int a1;
Ïðè÷åì,
ýòî íå çàâèñèò îò òîãî, âêëþ÷èëè ëè äèðåêòèâîé #include çàãîëîâî÷íûé ôàéë
Unit1.h â ìîäóëü Unit2, èëè íåò.
Îòìåòèì
åùå îäíó îñîáåííîñòü èñïîëüçîâàíèÿ ïåðåìåííûõ, îïèñàííûõ â äðóãîì ìîäóëå. Åñëè
â çàãîëîâî÷íîì ìîäóëå Unit1 îáúÿâëåíà îïèñàííàÿ âûøå ïåðåìåííàÿ a1, à â ìîäóëå
Unit2 âêëþ÷èëè äèðåêòèâîé #include çàãîëîâî÷íûé ôàéë Unit1.h, íî íå çàïèñàëè
îáúÿâëåíèå ýòîé ïåðåìåííîé ñî ñïåöèôèêàöèåé extern (âîîáùå íå äàëè îáúÿâëåíèå
a1), òî â ìîäóëå Unit2 áóäåò ñîçäàíà êîïèÿ ïåðåìåííîé a1, èíèöèàëèçèðîâàííàÿ
ñîãëàñíî îáúÿâëåíèþ â Unit1. Íî ýòî áóäåò êîïèÿ, ñîâåðøåííî èçîëèðîâàííàÿ îò
ïåðåìåííîé a1 â ìîäóëå Unit1. Â ìîäóëÿõ Unit1 è Unit2 áóäóò ñóùåñòâîâàòü äâå
ðàçëè÷íûå ïåðåìåííûå ñ îäíèì èìåíåì a1. È èçìåíåíèå îäíîé èç íèõ íèêàê íå
ñêàæåòñÿ íà çíà÷åíèè äðóãîé.
Âñå
ñêàçàííîå îòíîñèòñÿ òîëüêî ê ãëîáàëüíûì ïåðåìåííûì. Ëîêàëüíûå ïåðåìåííûå,
îáúÿâëÿåìûå âíóòðè ôóíêöèé, íåâîçìîæíî âèäåòü â äðóãîì ìîäóëå.
Òåïåðü
ðàññìîòðèì âèäèìîñòü ôóíêöèé â ïðèëîæåíèÿõ, èìåþùèõ íåñêîëüêî ìîäóëåé. Åñëè â
ìîäóëå 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.
Åñëè
âî âíóòðåííåì áëîêå îáúÿâëåíà ïåðåìåííàÿ ñ òåì æå èìåíåì, ÷òî âî âíåøíåì áëîêå,
èëè ñ òåì æå èìåíåì, ÷òî è ãëîáàëüíàÿ ïåðåìåííàÿ, òî ñîîòâåòñòâóþùàÿ âíåøíÿÿ
èëè ãëîáàëüíàÿ ïåðåìåííàÿ â áëîêå íå âèäíà.  ýòîì ñëó÷àå ïîäó÷èòü äîñòóï ê
îäíîèìåííîé ãëîáàëüíîé ïåðåìåííîé ìîæíî òîëüêî ñ ïîìîùüþ óíàðíîé îïåðàöèè
ðàçðåøåíèÿ îáëàñòè äåéñòâèÿ "::".
4.5. Ïåðåäà÷à ïàðàìåòðîâ â ôóíêöèè
Ïàðàìåòðû
â ôóíêöèè ìîãóò ïåðåäàâàòüñÿ â îñíîâíîì äâóìÿ ñïîñîáàìè: ïî çíà÷åíèþ è ïî
ññûëêå. Òî, ÷òî ìîãëè âèäåòü â ðàññìîòðåííîì ðàíåå ïðèìåðå - ýòî ïåðåäà÷à
ïàðàìåòðà ïî çíà÷åíèþ.  ýòîì ñëó÷àå â çàãîëîâêå ôóíêöèè óêàçûâàåòñÿ èìÿ
ïàðàìåòðà è åãî òèï. Íàïðèìåð:
void
Fl(char Ch);
Â
ýòîì ñëó÷àå Ch - ýòî ëîêàëüíîå èìÿ ôîðìàëüíîãî ïàðàìåòðà, èñïîëüçóåìîå òîëüêî
âíóòðè äàííîé ôóíêöèè. Ïðè âûçîâå ýòîé ôóíêöèè, êîòîðûé ìîæåò èìåòü âèä: Fl(Ch2);
â
ïàìÿòè ñîçäàåòñÿ âðåìåííàÿ ïåðåìåííàÿ ñ èìåíåì Ch, è â íåå êîïèðóåòñÿ çíà÷åíèå
àðãóìåíòà Ch2. Íà ýòîì ñâÿçü ìåæäó Ch è Ch2 ðàçðûâàåòñÿ. Ìîæåòå èçìåíÿòü âíóòðè
ôóíêöèè çíà÷åíèå Ch, íî ýòî íèêàê íå îòðàçÿòñÿ íà çíà÷åíèè âíåøíåé ïåðåìåííîé
Ch2, óêàçàííîé â âûçîâå ôóíêöèè â êà÷åñòâå àðãóìåíòà.
Òàêàÿ
ïåðåäà÷à ïàðàìåòðîâ ïî çíà÷åíèþ èìååò ñâîè äîñòîèíñòâà è íåäîñòàòêè.
Äîñòîèíñòâî çàêëþ÷àåòñÿ â òîì, ÷òî ôóíêöèÿ íå ìîæåò èñïîðòèòü ïåðåäàííûé â íåå
àðãóìåíò. Ýòî âàæíî äëÿ íàäåæíîé ðàáîòû ïðèëîæåíèÿ è ïîçâîëÿåò ðàçðàáàòûâàòü
ôóíêöèè, íå çàäóìûâàÿñü î òîì, íå èñïîëüçîâàíû ëè ãäå-òî â ïðîãðàììå òå æå
èìåíà ïàðàìåòðîâ. Íî ó ïåðåäà÷è ïàðàìåòðà ïî çíà÷åíèþ èìååòñÿ è ðÿä
íåäîñòàòêîâ.
Âî-ïåðâûõ,
ôóíêöèÿ íå ìîæåò èçìåíèòü çíà÷åíèå àðãóìåíòà, à èíîãäà ýòî î÷åíü æåëàòåëüíî.
Âî-âòîðûõ,
êîïèðîâàíèå çíà÷åíèÿ àðãóìåíòà òðåáóåò äîïîëíèòåëüíûõ çàòðàò âðåìåíè è ïàìÿòè
äëÿ õðàíåíèÿ êîïèè. Åñëè ðå÷ü èäåò î êàêîé-òî ïåðåìåííîé ïðîñòîãî òèïà, ýòî,
êîíå÷íî, íå ñóùåñòâåííî. Íî åñëè, íàïðèìåð, àðãóìåíò - ýòî ìàññèâ èç òûñÿ÷è
ýëåìåíòîâ, òî ñîîáðàæåíèÿ çàòðàò âðåìåíè è ïàìÿòè ìîãóò ñòàòü ñóùåñòâåííûìè.
È
â-òðåòüèõ, ïîñëå îêîí÷àíèÿ ðàáîòû ôóíêöèè âðåìåííàÿ ïåðåìåííàÿ, õðàíèâøàÿ
çíà÷åíèå ïàðàìåòðà, óíè÷òîæàåòñÿ. Ïîýòîìó åå íåëüçÿ èñïîëüçîâàòü, íàïðèìåð, äëÿ
íàêîïëåíèÿ êàêîé-òî èíôîðìàöèè.
Äëÿ
ðåàëèçàöèè âòîðîãî ñïîñîáà ïåðåäà÷è èíôîðìàöèè - ïî ññûëêå, ïåðåä èìåíåì
ïàðàìåòðà â çàãîëîâêå ôóíêöèè äîëæåí áûòü çàïèñàí ñèìâîë àìïåðñàíäà '&'.
Íàïðèìåð: void Fl(char &Ch);
Â
ýòîì ñëó÷àå íå ïðîèñõîäèò êîïèðîâàíèÿ çíà÷åíèÿ àðãóìåíòà â ëîêàëüíóþ, âðåìåííóþ
ïåðåìåííóþ â ïðîöåäóðå. Ïðîöåäóðà ðåàëüíî ðàáîòàåò íå ñ ïàðàìåòðîì, à ñî
ññûëêîé - óêàçàòåëåì íà ìåñòî õðàíåíèÿ àðãóìåíòà â ïàìÿòè. È ëþáûå èçìåíåíèÿ
ïàðàìåòðà Ch, ïðîèçâåäåííûå â ïðîöåäóðå, â äåéñòâèòåëüíîñòè îòíîñÿòñÿ íå ê
ýòîìó ïàðàìåòðó, à ê òîìó àðãóìåíòó, êîòîðûé ïåðåäàí ïðè âûçîâå ïðîöåäóðû.
Òàêèì îáðàçîì, ïåðåäà÷à ïàðàìåòðà ïî ññûëêå ïîçâîëÿåò âîçâðàùàòü èíôîðìàöèþ èç
ôóíêöèè â âûçâàâøóþ åãî âíåøíþþ ïðîöåäóðó.
Îñíîâîé
îáúåêòíî-îðèåíòèðîâàííîãî ïðîãðàììèðîâàíèÿ ÿâëÿþòñÿ îáúåêòû è êëàññû.
Ðàññìîòðèì áîëåå ñëîæíûå è òîíêèå âîïðîñû ðàáîòû ñ îáúåêòàìè. Óêàçàòåëü íà
îáúåêò - ýòî ïåðåìåííàÿ, â êîòîðîé õðàíèòñÿ ññûëêà íà îáúåêò íåêîòîðîãî êëàññà,
ò.å. íà ìåñòî â ïàìÿòè, ãäå ðàçìåùåí îáúåêò. Îáúÿâëåíèå (ñîçäàíèå) óêàçàòåëÿ íà
îáúåêò íåêîòîðîãî êëàññà (òèïà) ïðîèçâîäèòñÿ îïåðàòîðîì:
<òèï>
*<óêàçàòåëü>;
Íàïðèìåð,
ñëåäóþùåå îáúÿâëåíèå ñîçäàåò óêàçàòåëü íà îáúåêò êëàññà 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".
Ìîæíî
ñîçäàâàòü ññûëêó íà îáúåêò ñ ïîìîùüþ óêàçàòåëÿ íå íà èñòèííûé êëàññ îáúåêòà, à
íà îäèí èç êëàññîâ, êîòîðûì íàñëåäóåò êëàññ äàííîãî îáúåêòà. Äåëî â òîì, ÷òî
ëþáîé îáúåêò ìîæåò ðàññìàòðèâàòüñÿ íå òîëüêî êàê îáúåêò ñâîåãî êëàññà, íî è êàê
îáúåêò ëþáîãî êëàññà-ïðåäêà. Ýòî â îáùåì äîñòàòî÷íî åñòåñòâåííî äëÿ îáû÷íîãî
ïîíèìàíèÿ îáúåêòîâ â ðåàëüíîì ìèðå.
Òàê ëþáîé àâòîìîáèëü ìîæåò
ðàññìàòðèâàòüñÿ íå òîëüêî êàê îáúåêò àâòîìîáèëåé äàííîé ìàðêè, íàïðèìåð,
«Æèãóëè», íî è êàê îäèí èç îáúåêòîâ áîëåå îáùèõ êëàññîâ - àâòîìîáèëè, ñðåäñòâà
ïåðåäâèæåíèÿ è ò.ä. Òàê æå è îáúåêò â C++ ìîæåò ðàññìàòðèâàòüñÿ êàê îáúåêò
ëþáîãî èç êëàññîâ ïðåäêîâ.
Íàïðèìåð,
óíèâåðñàëüíûì óêàçàòåëåì íà ëþáîé êîìïîíåíò ìîæåò áûòü óêàçàòåëü íà êëàññ
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.