Òåìà : Îáúåêòíî-îðèåíòèðîâàííîå ïðîåêòèðîâàíèå íà 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. Òèïè÷íûé ãîëîâíîé ôàéë ïðîåêòà èìååò ñëåäóþùèé âèä:

(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.

 

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

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

4.1 Ïðèìåð ìîäóëÿ, ñîäåðæàùåãî îáúåêòû è ïðîöåäóðû

Ðàññìîòðèì, êàê ìîæíî ââîäèòü â ìîäóëü ïåðåìåííûå, ôóíêöèè è îñó- îñóùåñòâëÿòü ê íèì äîñòóï. Íèæå ïðèâåäåí òåêñò êîäà ìîäóëÿ, â êîòîðîì íà ôîðìå ðàçìåùåíû äâà êîìïîíåíòà: êíîïêà Button1 òèïà TButton è ìåòêà Label1 òèïà TLabel. Êðîìå òîãî, â ìîäóëå ââåäåí îáðàáîò÷èê ñîáûòèÿ, ñâÿçàííîãî ñî ùåë÷êîì ïîëüçîâàòåëÿ íà êíîïêå, è â ðàçíûõ ìåñòàõ ìîäóëÿ ââåäåíû ïåðåìåííûå è ôóíêöèè, ÷òîáû ìîæíî áûëî âèäåòü, êàê ïîëó÷èòü ê íèì äîñòóï.

(4)

Çàãîëîâî÷íûé ôàéë:

(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.

Åñëè âî âíóòðåííåì áëîêå îáúÿâëåíà ïåðåìåííàÿ ñ òåì æå èìåíåì, ÷òî âî âíåøíåì áëîêå, èëè ñ òåì æå èìåíåì, ÷òî è ãëîáàëüíàÿ ïåðåìåííàÿ, òî ñîîòâåòñòâóþùàÿ âíåøíÿÿ èëè ãëîáàëüíàÿ ïåðåìåííàÿ â áëîêå íå âèäíà.  ýòîì ñëó÷àå ïîäó÷èòü äîñòóï ê îäíîèìåííîé ãëîáàëüíîé ïåðåìåííîé ìîæíî òîëüêî ñ ïîìîùüþ óíàðíîé îïåðàöèè ðàçðåøåíèÿ îáëàñòè äåéñòâèÿ "::".

 

 

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".

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

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