Òåìà 3. Îáúåêòíî-îðèåíòèðîâàííîå ïðîåêòèðîâàíèå íà Borland C++

1. Îáùèå ñâåäåíèÿ î ïðîãðàììàõ íà Borland C++

2. Ñòðóêòóðà ãîëîâíîãî ôàéëà ïðîåêòà

3. Ñòðóêòóðà ôàéëîâ ìîäóëåé ôîðì

4. Îáëàñòè âèäèìîñòè è äîñòóï ê îáúåêòàì ìîäóëÿ

5. Óêàçàòåëè íà îáúåêòû

1. Îáùèå ñâåäåíèÿ î ïðîãðàììàõ íà Borland C++

Ðàññìîòðèì âîïðîñû îáùåé îðãàíèçàöèè ïðèëîæåíèÿ C++ è äîñòóïà ê îáúåêòàì, èõ ñâîéñòâàì è ìåòîäàì.

Ïðèëîæåíèå íà C++ ñîñòîèò èç îáúÿâëåíèé (ïåðåìåííûõ, êîíñòàíò, òèïîâ, êëàññîâ, ôóíêöèé) è îïèñàíèé ôóíêöèé. Ñðåäè ôóíêöèé âñåãäà èìååòñÿ ãëàâíàÿ - WinMain äëÿ ïðèëîæåíèé Windows. Èìåííî ýòà ôóíêöèÿ âûïîëíÿåòñÿ ïðè çàïóñêå ïðèëîæåíèÿ, è âûïîëíÿåò òîëüêî íåêîòîðûå ïîäãîòîâèòåëüíûå îïåðàöèè, íåîáõîäèìûå äëÿ íà÷àëà ðàáîòû. À äàëåå ïðè ÎÎ ïîäõîäå ðàáîòà ïðèëîæåíèÿ îïðåäåëÿåòñÿ ïðîèñõîäÿùèìè ñîáûòèÿìè è ðåàêöèåé íà íèõ îáúåêòîâ.

Êàê ïðàâèëî, ïðîãðàììû ñòðîÿòñÿ ïî ìîäóëüíîìó ïðèíöèïó è ñîñòîÿò èç ìíîæåñòâà ìîäóëåé. ×åòêîå ñîáëþäåíèå ïðèíöèïîâ ìîäóëüíîñòè â ñî÷åòàíèè ñ ïðèíöèïîì ñîêðûòèÿ èíôîðìàöèè ïîçâîëÿåò âíóòðè ëþáîãî ìîäóëÿ ïðîâîäèòü íåîáõîäèìûå ìîäèôèêàöèè, íå çàòðàãèâàÿ ïðè ýòîì îñòàëüíûõ ìîäóëåé è ãîëîâíóþ ôóíêöèþ.

Âñå îáúåêòû êîìïîíåíòîâ ðàçìåùàþòñÿ â îáúåêòàõ - ôîðìàõ. Äëÿ êàæäîé ôîðìû C++Builder ñîçäàåò îòäåëüíûé ìîäóëü. Èìåííî â ìîäóëÿõ è îñóùåñòâëÿåòñÿ ïðîãðàììèðîâàíèå çàäà÷è.  îáðàáîò÷èêàõ ñîáûòèé îáúåêòîâ ðàçìåùàþòñÿ âñå àëãîðèòìû.  îñíîâíîì îíè ñâîäÿòñÿ ê îáðàáîòêå èíôîðìàöèè, ñîäåðæàùåéñÿ â ñâîéñòâàõ îäíèõ îáúåêòîâ, è çàäàíèè ïî ðåçóëüòàòàì îáðàáîòêè ñâîéñòâ äðóãèõ îáúåêòîâ. Ïðè ýòîì ïîñòîÿííî ïðîèñõîäèò îáðàùåíèå ê ìåòîäàì ðàçëè÷íûõ îáúåêòîâ.

Ñîãëàñíî ïðèíöèïàì ñîêðûòèÿ èíôîðìàöèè ìîäóëü ñîñòîèò èç çàãîëîâî÷íîãî ôàéëà, êîòîðûé ñîäåðæèò îáúÿâëåíèÿ êëàññîâ, ôóíêöèé, ïåðåìåííûõ è ò.ï., è ôàéëà ðåàëèçàöèè, â êîòîðîì ñîäåðæèòñÿ îïèñàíèå ôóíêöèé. Ñòàíäàðòíîå ðàñøèðåíèå çàãîëîâî÷íûõ ôàéëîâ - .h. Ñòàíäàðòíîå ðàñøèðåíèå ôàéëîâ ðåàëèçàöèè - .ñðð.

Ïîñëå òîãî, êàê ïðèëîæåíèå íàïèñàíî, íà åå îñíîâå ñîçäàåòñÿ âûïîëíÿåìûé ôàéë (ìîäóëü). Ýòîò ïðîöåññ îñóùåñòâëÿåòñÿ â íåñêîëüêî ýòàïîâ.

Ñíà÷àëà ðàáîòàåò ïðåïðîöåññîð, êîòîðûé ïðåîáðàçóåò èñõîäíûé òåêñò. Ïðåïðîöåññîð îñóùåñòâëÿåò ïðåîáðàçîâàíèÿ â ñîîòâåòñòâèè ñî ñïåöèàëüíûìè äèðåêòèâàìè ïðåïðîöåññîðà, êîòîðûå ðàçìåùàþòñÿ â èñõîäíîì òåêñòå. Ïðåïðîöåññîð ìîæåò â ñîîòâåòñòâèè ñ ýòèìè äèðåêòèâàìè âêëþ÷àòü òåêñòû îäíèõ ôàéëîâ â òåêñòû äðóãèõ, ðàçâåðòûâàòü ìàêðîñû - ñîêðàùåííûå îáîçíà÷åíèÿ ðàçëè÷íûõ âûðàæåíèé è âûïîëíÿòü ìíîæåñòâî äðóãèõ ïðåîáðàçîâàíèé.

Ïîñëå ïðåïðîöåññîðà ðàáîòàåò êîìïèëÿòîð. Åãî çàäà÷à - ïåðåâåñòè òåêñòû ìîäóëåé â îáúåêòíûé êîä.  ðåçóëüòàòå äëÿ êàæäîãî èñõîäíîãî ôàéëà .ñðð ñîçäàåòñÿ îáúåêòíûé ôàéë, èìåþùèé ðàñøèðåíèå .obj.

Ïîñëå êîìïèëÿòîðà ðàáîòàåò êîìïîíîâùèê, êîòîðûé îáúåäèíÿåò îáúåêòíûå ôàéëû â åäèíûé çàãðóçî÷íûé âûïîëíÿåìûé ìîäóëü, èìåþùèé ðàñøèðåíèå .åõå. Ýòîò ìîäóëü ìîæíî çàïóñêàòü íà âûïîëíåíèå.

 

2. Ñòðóêòóðà ãîëîâíîãî ôàéëà ïðîåêòà

 ïðîöåññå ïðîåêòèðîâàíèÿ ïðèëîæåíèÿ 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.

 

3. Ñòðóêòóðà ôàéëîâ ìîäóëåé ôîðì

Ðàññìîòðèì òåïåðü òåêñòû ìîäóëåé ôîðì. Êàæäûé òàêîé ìîäóëü ñîñòîèò èç äâóõ ôàéëîâ: çàãîëîâî÷íîãî, ñîäåðæàùåãî îïèñàíèå êëàññà ôîðìû, è ôàéëà ðåàëèçàöèè. Íèæå ïðèâåäåíû òåêñòû ýòèõ ôàéëîâ ìîäóëÿ ôîðìû, íà êîòîðîé ðàçìåùåí îäèí êîìïîíåíò òèïà 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. Îáëàñòè âèäèìîñòè è äîñòóï ê îáúåêòàì, ïåðåìåííûì è ôóíêöèÿì

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, ïðîèçâåäåííûå â ïðîöåäóðå, â äåéñòâèòåëüíîñòè îòíîñÿòñÿ íå ê ýòîìó ïàðàìåòðó, à ê òîìó àðãóìåíòó, êîòîðûé ïåðåäàí ïðè âûçîâå ïðîöåäóðû. Òàêèì îáðàçîì, ïåðåäà÷à ïàðàìåòðà ïî ññûëêå ïîçâîëÿåò âîçâðàùàòü èíôîðìàöèþ èç ôóíêöèè â âûçâàâøóþ åãî âíåøíþþ ïðîöåäóðó.

 

5. Óêàçàòåëè íà îáúåêòû

Îñíîâîé îáúåêòíî-îðèåíòèðîâàííîãî ïðîãðàììèðîâàíèÿ ÿâëÿþòñÿ îáúåêòû è êëàññû. Ðàññìîòðèì áîëåå ñëîæíûå è òîíêèå âîïðîñû ðàáîòû ñ îáúåêòàìè. Óêàçàòåëü íà îáúåêò - ýòî ïåðåìåííàÿ, â êîòîðîé õðàíèòñÿ ññûëêà íà îáúåêò íåêîòîðîãî êëàññà, ò.å. íà ìåñòî â ïàìÿòè, ãäå ðàçìåùåí îáúåêò. Îáúÿâëåíèå (ñîçäàíèå) óêàçàòåëÿ íà îáúåêò íåêîòîðîãî êëàññà (òèïà) ïðîèçâîäèòñÿ îïåðàòîðîì:

<òèï> *<óêàçàòåëü>;

Íàïðèìåð, ñëåäóþùåå îáúÿâëåíèå ñîçäàåò óêàçàòåëü íà îáúåêò êëàññà 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.