Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Отличия С от С++

.HTM
Скачиваний:
10
Добавлен:
15.06.2014
Размер:
47.1 Кб
Скачать
<html>
<title> мЕЛГЙЙ РП у++. юБУФШ 1</title>

<body bgcolor="f5f1e5" alink="#27745B" vlink="#27745B" link="#27745B" >

<H2><A NAME="tth_sEc1">1</A>&nbsp;&nbsp;пФМЙЮЙС УЙОФБЛУЙУБ СЪЩЛБ у++ ПФ у.</H2>
сЪЩЛ у++ СЧМСЕФУС ДБМШОЕКЫЙН ТБЪЧЙФЙЕН СЪЩЛБ у, РПЬФПНХ ЧУЕ ЛПОУФТХЛГЙЙ
СЪЩЛБ у РПДДЕТЦЙЧБАФУС Ч у++. пДОБЛП Ч у++ РПСЧЙМЙУШ ОПЧЩЕ ЧПЪНПЦОПУФЙ
УЙОФБЛУЙУБ, ОЕ ЙНЕАЭЙЕУС Ч у. дБМЕЕ ВХДХФ ТБУУНПФТЕОЩ ЛТБФЛП ЬФЙ ПФМЙЮЙС, ОП
ЧОБЮБМЕ ПВТБФЙН ЧОЙНБОЙЕ ОБ ПТЗБОЙЪБГЙА ЪБЗПМПЧПЮОЩИ ЖБКМПЧ ТБЪТБВБФЩЧБЕНПЗП
РТЙМПЦЕОЙС. рТПВМЕНЩ, ЧПЪОЙЛБАЭЙЕ У ЪБЗПМПЧПЮОЩНЙ ЖБКМБНЙ РТЙ ТБЪТБВПФЛЕ
ДПУФБФПЮОП УМПЦОЩИ РТЙМПЦЕОЙК, РТЙУХЭЙ ЛБЛ СЪЩЛХ у, ФБЛ Й у++.

<p>
<H3><A NAME="tth_sEc1.1">1.1</A>&nbsp;&nbsp;ъБЗПМПЧПЮОЩЕ ЖБКМЩ РТЙМПЦЕОЙС</H3>
фЙРЙЮОПК ПЫЙВЛПК ОБЮЙОБАЭЙИ РТПЗТБННЙУФПЧ СЧМСЕФУС ЧЛМАЮЕОЙЕ Ч ЪБЗПМПЧПЮОЩЕ
ЖБКМЩ ПРТЕДЕМЕОЙС ЗМПВБМШОЩИ РЕТЕНЕООЩИ, НБУУЙЧПЧ, Б ЙОПЗДБ ДБЦЕ Й
ЖХОЛГЙК. уПЗМБУФОП РТЙОСФПНХ УФЙМА РТПЗТБННЙТПЧБОЙС Ч ЪБЗПМПЧПЮОЩИ ЖБКМБИ
ДПМЦОЩ УПДЕТЦБФШУС ФПМШЛП ДЙТЕЛФЙЧЩ ЧЛМАЮЕОЙС ДТХЗЙИ ЪБЗПМПЧПЮОЩИ ЖБКМПЧ,
ПРЙУБОЙС ФЙРПЧ РЕТЕНЕООЩИ Й ЖХОЛГЙК. пДОБЛП, УХЭЕУФЧХЕФ ТЙУЛ ЧЛМАЮЕОЙС
ЪБЗПМПЧПЮОЩИ ЖБКМПЧ Ч ПДЙО Й ФПФ ЦЕ ЖБКМ ВПМШЫЕ ПДОПЗП ТБЪБ. рТЙЧЕДЕН РТЙНЕТ.
рХУФШ ОБЫЕ РТЙМПЦЕОЙЕ УПУФПЙФ ЙЪ УМЕДХАЭЙИ ЖБКМПЧ.

<pre>
//ЖБКМ HEADER.HPP
class MyClass {/* ... */}; // УПДЕТЦЙФ ПРЙУБОЙЕ ОЕЛПФПТПЗП
... // ЛМБУУБ
//ЖБКМ DESKTOP.HPP
#include "HEADER.HPP" // РПДЛМАЮБЕФ ПРЙУБООЩК ТБОЕЕ ЖБКМ
class DeskTop {/* ... */}; //Й ПРТЕДЕМСЕФ УПВУФЧЕООЩЕ ФЙРЩ
...
//ЖБКМ DRIVER.CPP
#include "HERADER.HPP"
#include "DESKTOP.HPP"
class Driver {/* ... */};
...
</pre>
<p>
рТЙ РПРЩФЛЕ ПФЛПНРЙМЙТПЧБФШ ЖБКМ DRIVER.CPP ЧП ЧФПТПК УФТПЛЕ ЛПНРЙМСФПТ
ЧЩДБУФ ПЫЙВЛХ, РПУЛПМШЛХ ЖБКМ HEADER.HPP ЧЛМАЮЕО ДЧБЦДЩ Й, УППФЧЕФУФЧЕООП,
ФЙРЩ
РЕТЕНЕООЩИ, ПРЙУБООЩЕ Ч ЬФПН ЖБКМЕ, ВХДХФ ПРЙУБОЩ ДЧБЦДЩ.

<p>
дМС РТЕДПФЧТБЭЕОЙС ФБЛЙИ УМХЮБЕЧ НПЦОП ПТЗБОЙЪПЧБФШ ДПУФБФПЮОП РТПУФХА
"МПЧХЫЛХ", ЙУРПМШЪХА ДЙТЕЛФЙЧХ ХУМПЧОПК ЛПНРЙМСГЙЙ. йЪНЕОЕООЩК ЖБКМ HEADER.HPP
ЧЩЗМСДЙФ УМЕДХАЭЙН ПВТБЪПН.

<pre>
//ЖБКМ HEADER.HPP
#ifndef __HEADER_HPP //ЕУМЙ РЕТЕН. __HEADER_HPP ОЕ ПРЙУБОБ,
#define __HEADER_HPP //ФП ПРТЕДЕМЙФШ ЕЕ РХУФЩН ЪОБЮЕОЙЕН
class MyClass {/* ... */} // ПРТЕДЕМЕОЙЕ ФТЕВХЕНЩИ ФЙРПЧ
#endif // ЛПОЕГ ДЙТЕЛФЙЧЩ
</pre>
<p>
мХЮЫЕ ЧУЕЗП МАВЩЕ ЪБЗПМПЧПЮОЩЕ ЖБКМЩ Ч РТЙМПЦЕОЙЙ ПТЗБОЙЪПЧЩЧБФШ
РТЙЧЕДЕООЩН ЧЩЫЕ УРПУПВПН.

<p>
пФНЕФЙН, ЮФП ЗТПНПЪДЛПЕ ЙНС РЕТЕНЕООПК
<tt>__HEADER_HPP</tt>
<p>
УПЪДБЕФУС РП ЙНЕОЙ ЖБКМБ Й ФБЛПЕ ЙНС РТБЛФЙЮЕУЛЙ РПЪЧПМСЕФ ЙЪВЕЦБФШ
ПЫЙВЛЙ, УЧСЪБООПК У УПЧРБДЕОЙЕН ЙНЕО.

<p>
<H3><A NAME="tth_sEc1.2">1.2</A>&nbsp;&nbsp;лПННЕОФБТЙЙ</H3>
ч у++ ОБТСДХ УП УФБТЩН ЖПТНБФПН (/* ... */) ЙУРПМШЪХЕФУС ОПЧЩК ЖПТНБФ
ЛПННЕОФБТЙЕЧ, ДМС ЛПННЕОФБТЙС, УПУФПСЭЕЗП ЙЪ ПДОПК УФТПЛЙ. уФТПЛБ
ЛПННЕОФБТЙЕЧ ОБЮЙОБЕФУС УЙНЧПМБНЙ //, Б ЪБЛБОЮЙЧБЕФУС Ч ЛПОГЕ УФТПЛЙ.
дМС ЛПННЕОФЙТПЧБОЙС ОЕУЛПМШЛЙИ УФТПЛ РПДТСД НПЦОП
РПМШЪПЧБФШУС УФБТЩН ЖПТНБФПН.

<p>
<H3><A NAME="tth_sEc1.3">1.3</A>&nbsp;&nbsp;рЕТЕНЕООЩЕ</H3>
оБРПНОЙН ПРТЕДЕМЕОЙЕ РЕТЕНЕООПК. рЕТЕНЕООБС - ЙНЕОПЧБООБС ПВМБУФШ РБНСФЙ ДМС
ИТБОЕОЙС ЙОЖПТНБГЙЙ. сЪЩЛ у++ РПЪЧПМСЕФ ПВЯСЧМСФШ РЕТЕНЕООЩЕ РПЮФЙ Ч МАВПН
НЕУФЕ РТПЗТБННЩ, ОБРТЙНЕТ:

<pre>
...
for (int i=0; i&lt;10; i++) {//ПВЯСЧМЕОЙЕ РЕТЕН. i УОБТХЦЙ
/* ... */ //ВМПЛБ, УПДЕТЦБЭЕЗП ПРЕТБФПТ for
}
...
{
int i = GetValue(); //ПВЯСЧМЕОЙЕ ДТХЗПК РЕТЕНЕООПК i
char* cp = NextString();
...
}
</pre>
<p>
чТЕНС "ЦЙЪОЙ" МАВПК РЕТЕНЕООПК Ч у++ ПРТЕДЕМСЕФУС ВМПЛПН {...}, Ч ЛПФПТПН
ПОБ ПВЯСЧМЕОБ, РПЬФПНХ РeТЕНЕООПК i, ПВЯСЧМЕООПК Ч ГЙЛМЕ for, ОЕ УХЭЕУФЧХЕФ РТЙ
ЧЩИПДЕ ЙЪ ВМПЛБ, УПДЕТЦБЭЕЗП ПРЕТБФПТ ГЙЛМБ. гЕМЕУППВТБЪОП ПВЯСЧМСФШ
РЕТЕНЕООХА Ч ФПН НЕУФЕ, ЗДЕ ПОБ
ЧРЕТЧЩЕ РПОБДПВЙМБУШ.

<p>
<H3><A NAME="tth_sEc1.4">1.4</A>&nbsp;&nbsp;йУРПМШЪПЧБОЙЕ const ЧНЕУФП #define</H3>
йУРПМШЪПЧБОЙЕ ЛМАЮЕЧПЗП УМПЧБ const ЧНЕУФП ДЙТЕЛФЙЧЩ #define РПЪЧПМСЕФ
ЛПНРЙМСФПТХ у++ ЛПОФТПМЙТПЧБФШ ФЙРЩ, ОБРТЙНЕТ:

<pre>
const int TRUE = 1; //ПРТЕДЕМЕОЙЕ ФЙРЙЪПЧБООЩИ ЛПОУФБОФ
const int FALSE = 0;
const float ALT = 1.5;
...
while (TRUE) {
...
int a = FALSE; //ЙУРПМШЪПЧБОЙЕ ЛПОУФБОФ У ЛПОФТПМЕН ФЙРБ
float b = TRUE;//ОЕФ РТЕДХРТЕЦДЕОЙС П ТБЪМЙЮОЩИ ФЙРБИ
int i = ALT; //РТЕДХРТЕЦДЕОЙЕ П ТБЪМЙЮОЩИ ФЙРБИ
...
}
</pre>
<p>
рПУЛПМШЛХ ЛПОУФБОФОЩЕ ПВЯЕЛФЩ Ч у++ РП ХНПМЮБОЙА ОЕ ДПУФХРОЩ ЙЪ ДТХЗЙИ
НПДХМЕК, РТЙ ОЕПВИПДЙНПУФЙ УМЕДХЕФ ЙУРПМШЪПЧБФШ ЛМАЮЕЧПЕ УМПЧП extern.
рТЙНЕТ.

<pre>
extern const int FALSE = 0;
extern const int TRUE = 1;
</pre>
<p>
<H3><A NAME="tth_sEc1.5">1.5</A>&nbsp;&nbsp;пВЯСЧМЕОЙС ЖХОЛГЙК</H3>
рТЙ ПВЯСЧМЕОЙЙ ЖХОЛГЙК НПЦОП ОЕ ХЛБЪЩЧБФШ ЙНС ЧИПДОПЗП РБТБНЕФТБ, Б ФПМШЛП
ЕЗП ФЙР, ОБРТЙНЕТ

<pre>
void func(char*, int, float*);//ЧЕТОПЕ ПВЯСЧМЕОЙЕ ЖХОЛГЙЙ
</pre>
<p>
вПМЕЕ ФПЗП, ЛПНРЙМСФПТ СЪЩЛБ у++ ЛПОФТПМЙТХЕФ ЙУРПМШЪПЧБОЙЕ ПРЙУБООЩИ
РЕТЕНЕООЩИ Й ЧИПДОЩИ РБТБНЕФТПЧ ЖХОЛГЙЙ. еУМЙ ЧИПДОПК РБТБНЕФТ ЖХОЛГЙЙ ОЕ
ЙУРПМШЪХЕФУС Ч ЕЕ ФЕМЕ, ФП ДМС РПДБЧМЕОЙС УППФЧЕФУФЧХАЭЕЗП РТЕДХРТЕЦДЕОЙС
НПЦОП ПУФБЧЙФШ ФПМШЛП ПРЙУБОЙЕ ФЙРБ ЬФПЗП РБТБНЕФТБ, ОБРТЙНЕТ

<pre>
int func (int a, int /* b */) {
return (a-1);
}
</pre>
<p>
нПЦОП ПРЙУБФШ ЖХОЛГЙА У РБТБНЕФТБНЙ РП ХНПМЮБОЙА, ОБРТЙНЕТ

<pre>
int f(int a = 0) { return a+1;}
</pre>
<p>
чЩЪПЧ ФБЛПК ЖХОЛГЙЙ ВЕЪ РБТБНЕФТПЧ, ПЪОБЮБЕФ, ЮФП ЧИПДОПК РБТБНЕФТ ТБЧЕО ОХМА,
Б ТЕЪХМШФБФ, ЧПЪЧТБЭЕООЩК ЖХОЛГЙЕК ТБЧЕО ЕДЙОЙГЕ.

<p>
<H3><A NAME="tth_sEc1.6">1.6</A>&nbsp;&nbsp;хЛБЪБФЕМЙ Й УУЩМЛЙ</H3>
йЪЧЕУФОП, ЮФП ХЛБЪБФЕМЙ Ч СЪЩЛЕ у Й у++ УПДЕТЦБФ БДТЕУ ПВЯЕЛФБ. хЛБЪБФЕМЙ ОЕ
ОХЦОП ЙОЙГЙБМЙЪЙТПЧБФШ ЧП ЧТЕНС ПВЯСЧМЕОЙС, ОП ПОЙ ДПМЦОЩ ВЩФШ
РТПЙОЙГЙБМЙЪЙТПЧБОЩ ДП ЙУРПМШЪПЧБОЙС. хЛБЪБФЕМШ ФЙРБ void* Ч у++ ПВМБДБЕФ
ЧБЦОЩН УЧПКУФЧПН. фЙРЙЪПЧБООЩК ХЛБЪБФЕМШ НПЦЕФ ВЩФШ РТЙУЧПЕО ХЛБЪБФЕМА ФЙРБ
void, ОП ОЕ ОБПВПТПФ. ч РТПФЙЧОПН УМХЮБЕ ФТЕВХЕФУС СЧОПЕ РТЕПВТБЪПЧБОЙЕ ФЙРПЧ.

<p>
рЕТЕНЕООЩЕ УУЩМЛЙ - ОПЧПЧЧЕДЕОЙЕ Ч у++. рЕТЕНЕООЩЕ УУЩМЛЙ ФБЛЦЕ УПДЕТЦБФ БДТЕУ
ПВЯЕЛФБ, ОП РПДЮЙОСАФУС ДТХЗЙН РТБЧЙМБН. уУЩМЛЙ ОЕПВИПДЙНП ЙОЙГЙБМЙЪЙТПЧБФШ
РТЙ ПВЯСЧМЕОЙЙ. тБУУНПФТЙН РТЙНЕТ.

<pre>
int a = 3; //ПВЯСЧМЕОЙЕ Й ЙОЙГЙБМЙЪБГЙС РЕТЕНЕООПК
int& ia = a;//ПВЯСЧМЕОЙЕ Й ЙОЙГЙБМЙЪБГЙС УУЩМЛЙ ОБ
//РЕТЕНЕООХА
</pre>
<p>
рЕТЕНЕООБС УУЩМЛБ УУЩМБЕФУС ОБ ПВЯЕЛФ, ЕЕ НПЦОП ЙУРПМШЪПЧБФШ ФБЛ, ЛБЛ ВХДФП
ПОБ СЧМСЕФУС БМШФЕТОБФЙЧОЩН ЙНЕОЕН ПВЯЕЛФБ.

<pre>
int& i = 3;
int j;

if (i == 3) {
i--;
j = i;
}

i = strlen("title");
</pre>
<p>
оЕМШЪС ПВЯСЧЙФШ УУЩМЛХ ФЙРБ void.

<pre>
void& a = 3; //ОЕЧЕТОП!
</pre>
<p>
ъОБЮЕОЙЕ УУЩМЛЙ ЧП ЧТЕНС ЕЕ УХЭЕУФЧПЧБОЙС НПЦОП ЙЪНЕОЙФШ, ЕУМЙ ФПМШЛП ПОБ
ОЕ ПВЯСЧМЕОБ ЛБЛ ЛПОУФБОФБ.

<pre>
const int& number = 10;
...
number = 5; // ПЫЙВЛБ!
number = 10; // ПЫЙВЛБ!
...
</pre>
<p>
<H3><A NAME="tth_sEc1.7">1.7</A>&nbsp;&nbsp;хРТБЧМЕОЙЕ РБНСФША</H3>
ч у++ РПСЧЙМЙУШ ФТЙ ЧУФТПЕООЩИ ПРЕТБФПТБ ДМС ХРТБЧМЕОЙС РБНСФША: new,
delete, delete[]. пРЕТБФПТ new РП УЧПЕНХ ОБЪОБЮЕОЙА ВМЙЪПЛ Л ЖХОЛГЙЙ malloc().
пДОБЛП, РТЕПВТБЪПЧБОЙЕ ФЙРПЧ РТЙ ЕЗП ЙУРПМШЪПЧБОЙЙ ОЕ ФТЕВХЕФУС. уМЕДХАЭЙК
РТЙНЕТ РПЛБЪЩЧБЕФ ЙУРПМШЪПЧБОЙЕ ЬФПЗП ПРЕТБФБТБ.

<pre>
int i = 10;
int* ip = new int[i]; // ЧЩДЕМЕОЙЕ РБНСФЙ
//ДМС НБУУЙЧБ ЙЪ 10 ГЕМЩИ ЮЙУЕМ
</pre>
<p>
пВЯЕН ЧЩДЕМСЕНПК РБНСФЙ ДПМЦЕО ВЩФШ ЙЪЧЕУФЕО ЧП ЧТЕНС ЧЩРПМОЕОЙС РТПЗТБННЩ.
дМС ПУЧПВПЦДЕОЙС РБНСФЙ ЙУРПМШЪХЕФУС ПРЕТБФПТ delete, Б ДМС ПУЧПВПЦДЕОЙС
РБНСФЙ ТБУРТЕДЕМЕООПК РПД НБУУЙЧ ЙУРПМШЪХЕФУС delete[], ОБРТЙНЕТ

<pre>
char* cp = new char[100];//ЧЩДЕМЕОЙЕ РБНСФЙ
...
delete[] cp;//ПУЧПВПЦДЕОЙЕ РБНСФЙ
</pre>
<p>
<H2><A NAME="tth_sEc2">2</A>&nbsp;&nbsp;пВЪПТ СЪЩЛБ у++</H2>

<p>
у++ СЧМСЕФУС СЪЩЛПН ПВЯЕЛФОП-ПТЙЕОФЙТПЧБООПЗП РТПЗТБННЙТПЧБОЙС
(ппр). пВЯЕЛФ - БВУФТБЛФОБС УХЭОПУФШ, ОБДЕМЕООБС ИБТБЛФЕТЙУФЙЛБНЙ
ПВЯЕЛФПЧ ТЕБМШОПЗП НЙТБ. лБЛ Й МАВПК ДТХЗПК СЪЩЛ ппр, у++
ЙУРПМШЪХЕФ ФТЙ ПУОПЧОЩЕ ЙДЕЙ ппр - ЙОЛБРУХМСГЙА, ОБУМЕДПЧБОЙЕ Й
РПМЙНПТЖЙЪН.

<p>
<b>йОЛБРУХМСГЙС</b> - УЧЕДЕОЙЕ ЛПДБ Й ДБООЩИ ЧПЕДЙОП Ч ПДОПН ПВЯЕЛФЕ,
РПМХЮЙЧЫЙН ОБЪЧБОЙЕ ЛМБУУ.

<p>
<b>оБУМЕДПЧБОЙЕ</b> - ОБМЙЮЙЕ Ч СЪЩЛЕ ппр НЕИБОЙЪНБ, РПЪЧПМСАЭЕЗП ПВЯЕЛФБН
ЛМБУУБ ОБУМЕДПЧБФШ ИБТБЛФЕТЙУФЙЛЙ ВПМЕЕ РТПУФЩИ Й ПВЭЙИ ФЙРПЧ. оБУМЕДПЧБОЙЕ
ПВЕУРЕЮЙЧБЕФ ЛБЛ ФТЕВХЕНЩК ХТПЧЕОШ ПВЭОПУФЙ, ФБЛ Й ОЕПВИПДЙНХА
УРЕГЙБМЙЪБГЙА.

<p>
<b>рПМЙНПТЖЙЪН</b> - ДПУМПЧОЩК РЕТЕЧПД У ЗТЕЮЕУЛПЗП "НОПЗП ЖПТН".
ч у++ РПМЙНПТЖЙЪН ТЕБМЙЪХЕФУС У РПНПЭША ЧЙТФХБМШОЩИ ЖХОЛГЙК,
ЛПФПТЩЕ РПЪЧПМСАФ Ч ТБНЛБИ ЧУЕК ЙЕТБТИЙЙ ЛМБУУПЧ ЙНЕФШ ОЕУЛПМШЛП ЧЕТУЙК ПДОПК Й
ФПК ЦЕ ЖХОЛГЙЙ. тЕЫЕОЙЕ П ФПН, ЛБЛБС ЙНЕООП ЧЕТУЙС ДПМЦОБ ЧЩРПМОСФШУС Ч ДБООЩК
НПНЕОФ, ПРТЕДЕМСЕФУС ОБ ЬФБРЕ ЧЩРПМОЕОЙС РТПЗТБННЩ Й ОПУЙФ ОБЪЧБОЙЕ РПЪДОЕЗП
УЧСЪЩЧБОЙС.

<p>
<H3><A NAME="tth_sEc2.1">2.1</A>&nbsp;&nbsp;лМБУУЩ, ДБООЩЕ Й НЕФПДЩ ЛМБУУБ</H3>
пУОПЧОПЕ ПФМЙЮЙЕ у++ ПФ у УПУФПЙФ Ч ФПН, ЮФП Ч у++ ЙНЕАФУС ЛМБУУЩ. у
ФПЮЛЙ ЪТЕОЙС СЪЩЛБ у ЛМБУУЩ Ч у++ - ЬФП УФТХЛФХТЩ, Ч ЛПФПТЩИ ЧНЕУФЕ
У ДБООЩНЙ ПРТЕДЕМСАФУС ЖХОЛГЙЙ. ьФП Й ЕУФШ ЙОЛБРУХМСГЙС Ч
ФЕТНЙОБИ ппр.

<p>
лМБУУ (class) - ЬФП ФЙР, ПРТЕДЕМСЕНЩК РПМШЪПЧБФЕМЕН, ЧЛМАЮБАЭЙК Ч УЕВС ДБООЩЕ
Й ЖХОЛГЙЙ, ОБЪЩЧБЕНЩЕ НЕФПДБНЙ ЙМЙ ЖХОЛГЙСНЙ-ЮМЕОБНЙ ЛМБУУБ.

<p>
дБООЩЕ ЛМБУУБ - ЬФП ФП, ЮФП ЛМБУУ ЪОБЕФ.

<p>
жХОЛГЙЙ-ЮМЕОЩ (НЕФПДЩ) ЛМБУУБ - ЬФП ФП, ЮФП ЛМБУУ ДЕМБЕФ.

<p>
фБЛЙН ПВТБЪПН, ПРТЕДЕМЕОЙЕ ФЙРБ ЪБДБЧБЕНПЗП РПМШЪПЧБФЕМЕН (class)
УПДЕТЦЙФ УРЕГЙЖЙЛБГЙА
ДБООЩИ, ФТЕВХАЭЙИУС ДМС РТЕДУФБЧМЕОЙС ПВЯЕЛФБ ЬФПЗП ФЙРБ, Й ОБВПТ ПРЕТБГЙК
(ЖХОЛГЙК) ДМС ТБВПФЩ У РПДПВОЩНЙ ПВЯЕЛФБНЙ.

<p>
<H3><A NAME="tth_sEc2.2">2.2</A>&nbsp;&nbsp;пВШСЧМЕОЙЕ ЛМБУУБ</H3>
рТЙЧЕДЕН РТЙНЕТ ПВЯСЧМЕОЙС ЛМБУУБ.

<pre>
class TCounter {
long count; // ДБООЩЕ ЛМБУУБ
public:
long GetValue(); //ЖХОЛГЙЙ-ЮМЕОЩ ЛМБУУБ
void SetValue(long);
};
</pre>
<p>
пРТЕДЕМЕОЙЕ ЛМБУУБ ОБЮЙОБЕФУС У ЛМАЮЕЧПЗП УМПЧБ class ЪБ
ЛПФПТЩН УМЕДХЕФ ЙНС ЛМБУУБ. йНС ЛМБУУБ Ч BC 4.5 НПЦЕФ ЙНЕФШ ДП 32
УЙНЧПМПЧ, РТЙЮЕН ТБЪМЙЮБАФУС УФТПЮОЩЕ Й РТПРЙУОЩЕ ВХЛЧЩ.
пФЛТЩЧБАЭБС Й ЪБЛТЩЧБАЭБС ЖЙЗХТОЩЕ УЛПВЛЙ ПРТЕДЕМСАФ ФЕМП ЛМБУУБ,
Ч ЛПФПТПЕ ЧЛМАЮЕОП ПРЙУБОЙЕ ДБООЩИ Й ЖХОЛГЙК ЛМБУУБ.
ъБЛБОЮЙЧБЕФУС ПРЙУБОЙЕ ЛМБУУБ УЙНЧПМПН ;. лМБУУ ЙНЕЕФ
УФПМШЛП РЕТЕНЕООЩИ (ДБООЩИ), УЛПМШЛП ОЕПВИПДЙНП. рЕТЕНЕООЩЕ НПЗХФ
ВЩФШ МАВПЗП ФЙРБ, ЧЛМАЮБС ДТХЗЙЕ ЛМБУУЩ, ХЛБЪБФЕМЙ ОБ ЛМБУУЩ Й
ХЛБЪБФЕМЙ ОБ ДЙОБНЙЮЕУЛЙ ТБУРТЕДЕМСЕНЩЕ ПВЯЕЛФЩ. рЕТЕНЕООЩЕ
ПВЯСЧМЕООЩЕ ЧОХФТЙ ЛМБУУБ ЙНЕАФ ПВМБУФШ ЧЙДЙНПУФЙ ЛМБУУБ, Ф.Е. ПФ
ФПЮЛЙ ПВЯСЧМЕОЙС РЕТЕНЕООПК ДП ЛПОГБ ЛМБУУБ.

<p>
<H3><A NAME="tth_sEc2.3">2.3</A>&nbsp;&nbsp;пРТЕДЕМЕОЙЕ ЖХОЛГЙК-ЮМЕОПЧ ЛМБУУБ</H3>
ч РТЙЧЕДЕООПН ЧЩЫЕ ПРЙУБОЙЙ ЛМБУУБ ЖХОЛГЙЙ ЛМБУУБ ФПМШЛП
ПВЯСЧМЕОЩ, РТЙЧЕДЕН ЙИ ТЕБМЙЪБГЙА. пВЩЮОП ПРЙУБОЙС ЛМБУУПЧ
ЧЛМАЮБАФ Ч ЪБЗПМПЧПЮОЩЕ ЖБКМЩ (*.HPP), Б ТЕБМЙЪБГЙА ЖХОЛГЙК-ЮМЕОПЧ
ЛМБУУПЧ - Ч ЖБКМЩ *.CPP.

<pre>
// ХУФБОПЧЙФШ ЪОБЮЕОЙЕ УЮЕФЮЙЛБ
void TCounter::SetValue(long val) {
count = val;
}
//РПМХЮЙФШ ЪОБЮЕОЙЕ УЮЕФЮЙЛБ
long TCounter::GetValue() { return count; }
</pre>
<p>
ч РТЙЧЕДЕООПК ТЕБМЙЪБГЙЙ ЪБРЙУШ TCounter:: УППВЭБЕФ ЛПНРЙМСФПТХ,
ЮФП ТЕБМЙЪБГЙС ЖХОЛГЙК РТЙОБДМЕЦЙФ ЛМБУУХ TCounter. уЙНЧПМ ::
СЧМСЕФУС ПРЕТБГЙЕК ПРТЕДЕМЕОЙС ПВМБУФЙ ДЕКУФЧЙС.

<p>
<H3><A NAME="tth_sEc2.4">2.4</A>&nbsp;&nbsp;йУРПМШЪПЧБОЙЕ ЛМБУУБ</H3>
уМЕДХЕФ ЮЕФЛП РПОЙНБФШ, ЮФП Ч НПНЕОФ ПВЯСЧМЕОЙС ЛМБУУБ Й
ПРТЕДЕМЕОЙС ЕЗП ЖХОЛГЙК-ЮМЕОПЧ УБНЙИ ПВЯЕЛФПЧ ЙМЙ ЬЛЪЕНРМСТПЧ ЛМБУУБ ОЕ
УХЭЕУФЧХЕФ. лМБУУЩ - ЬФП ОЕ ПВЯЕЛФЩ. пВЯЕЛФБНЙ СЧМСАФУС
РЕТЕНЕООЩЕ, ЬЛЪЕНРМСТЩ ЛМБУУПЧ ЛПФПТЩЕ ДПМЦОЩ УПЪДБЧБФШУС Ч
РТПЗТБННЕ. рТЙЧЕДЕН РТЙНЕТ ЙУРПМШЪПЧБОЙС ЛМБУУБ.

<pre>
void main(void) {
TCounter cnt; //УПЪДБОЙЕ ПВЯЕЛФБ cnt ФЙРБ TCounter

cnt.SetValue(10); //ЧЩЪПЧ НЕФПДБ ДМС ЙОЙГЙБМЙЪБГЙЙ
//ПРТЕДЕМЕОЙЕ Й ЙОЙГЙБМЙЪБГЙС ХЛБЪБФЕМС ОБ ПВЯЕЛФ
TCounter* p = &cnt;
int i = p-&#62;GetValue();//ЙУРПМШЪПЧБОЙЕ ХЛБЪБФЕМС
//ПРТЕДЕМЕОЙЕ УУЩМЛЙ
TCounter& Rp = &cnt;
i = Rp.GetValue(); //ЙУРПМШЪПЧБОЙЕ УУЩМЛЙ
//пРТЕДЕМЕОЙЕ НБУУЙЧБ ХЛБЪБФЕМЕК
TCounter* m[10];
//уПЪДБОЙЕ Й ЙОЙГЙБМЙЪБГЙС ПВЯЕЛФПЧ
for (int k = 0; k &lt; 10; k++) {
m[k] = new TCounter;
m[k]-&#62;SetValue(0);
}
//пУЧПВПЦДЕОЙЕ РБНСФЙ
for (i = 0; i &lt; 10; i++) delete m[i];
}
</pre>
<p>
<H3><A NAME="tth_sEc2.5">2.5</A>&nbsp;&nbsp;хРТБЧМЕОЙЕ ДПУФХРПН Л ЛМБУУХ</H3>
дМС ПЗТБОЙЮЕОЙС ХТПЧОС ДПУФХРБ Л ДБООЩН Й ЖХОЛГЙСН-ЮМЕОБН ЛМБУУБ
Ч у++ УХЭЕУФЧХАФ ФТЙ ЛМАЮЕЧЩИ УМПЧБ private: (ЮБУФОЩК),
protected: (ЪБЭЙЭЕООЩК), public: (ПВЭЕДПУФХРОЩК), ЪБДБАЭЙЕ ТБЪДЕМЩ РПУФХРБ Ч
ЛМБУУЕ. лБЦДЩК ТБЪДЕМ Ч ЛМБУУЕ ОБЮЙОБЕФУС У ПДОПЗП ЙЪ РТЙЧЕДЕООЩИ
УМПЧ. еУМЙ ОЙ ПДОП ЙЪ ЛМАЮЕЧЩИ УМПЧ ОЕ ЙУРПМШЪПЧБМПУШ, ФП ЧУЕ
ПВЯСЧМЕОЙС Ч ЛМБУУЕ УЮЙФБАФУС ЮБУФОЩНЙ. тБЪДЕМЩ У ТБЪОЩНЙ
РТЙЧЙМЕЗЙСНЙ ДПУФХРБ НПЗХФ РПСЧМСФУС Ч МАВПН РПТСДЛЕ Й Ч МАВПН
ЛПММЙЮЕУФЧЕ. тБУУНПФТЙН РТЙНЕТ.

<pre>
class Example {
int x1; // ЮБУФОЩЕ РП ХНПМЮБОЙА
int f1(void);
protected:
int x2; // ЪБЭЙЭЕООЩЕ
int f2(void);
private:
int x3; // ПРСФШ ЮБУФОЩЕ
int f3(void);
public:
int x4; // ПВЭЕДПУФХРОЩЕ
inf f4(void);
};
</pre>
<p>
<H4><A NAME="tth_sEc2.5.1">1</A>&nbsp;&nbsp;юБУФОЩЕ ЮМЕОЩ ЛМБУУБ</H4>
юБУФОЩЕ ЮМЕОЩ ЛМБУУБ ЙНЕАФ ОБЙВПМЕЕ ПЗТБОЙЮЕООЩК ДПУФХР. л
ЮБУФОЩН ЮМЕОБН ЛМБУУБ ЙНЕАФ ДПУФХР ФПМШЛП ЖХОЛГЙЙ-ЮМЕОЩ ДБООПЗП
ЛМБУУБ ЙМЙ ЛМБУУЩ Й ЖХОЛГЙЙ ПВЯСЧМЕООЩЕ ЛБЛ ДТХЦЕУФЧЕООЩЕ
(friend) Л ДБООПНХ ЛМБУУХ, ОБРТЙНЕТ:

<pre>
class TPrivateClass {
int value;
int GetValue(void);
};
int TPrivateClass::GetValue(void) {
return value; //ДПУФХР ТБЪТЕЫЕО
}
void main(void) {
TPrivateClass cl; //УПЪДБОЙЕ ПВЯЕЛФБ

int i = cl.value; //ПЫЙВЛБ! оЕФ ДПУФХРБ
i = cl.GetValue();//ПЫЙВЛБ! оЕФ ДПУФХРБ
}
</pre>
<p>
<H4><A NAME="tth_sEc2.5.2">2</A>&nbsp;&nbsp;ъБЭЙЭЕООЩЕ ЮМЕОЩ ЛМБУУБ</H4>
юМЕОЩ Й ЖХОЛГЙЙ ПВЯСЧМЕООЩЕ Ч ЪБЭЙЭЕООПН (protected) ТБЪДЕМЕ
ЛМБУУБ ДПУФХРОЩ ФПМШЛП ДМС ЖХОЛГЙК РТПЙЪЧПДОЩИ ЛМБУУПЧ. пВЩЮОП
Ч ЬФПН ЧПЪОЙЛБЕФ ОЕПВИПДЙНПУФШ ФПЗДБ, ЛПЗДБ ТБЪТБВБФЩЧБЕНЩК ЛМБУУ
СЧМСЕФУС ВБЪПЧЩН ЛМБУУПН ДМС ДТХЗЙИ ЛМБУУПЧ. ч ЬФПН УМХЮБЕ ПО
ПЗТБОЙЮЙЧБЕФ ДПУФХР Л ДБООЩН ЧОЕЫОЙН РПМШЪПЧБФЕМСН Й ТБЪТЕЫБЕФ
ДПУФХР ДМС ЛМБУУПЧ ОБУМЕДОЙЛПЧ. тБУУНПФТЙН РТЙНЕТ ЙЕТБТИЙЙ
ПВЯЕЛФПЧ.

<pre>
class A {
protected:
int val;
};

class B: public A { //ОБУМЕДХЕФУС ПФ A
public:
void fb();
};
void B::fb() { val = 0; } //ДПУФХР ТБЪТЕЫЕО

class C:public B { //ОБУМЕДХЕФУС ПФ B
public:
void fc();
};
void C::fc() {val = 10;} //ДПУФХР ТБЪТЕЫЕО
</pre>
<p>
ч ДБООПН РТЙНЕТЕ РТЙЧЕДЕОБ ЙЕТБТИЙС ЛМБУУПЧ A-&#62;B-&#62;C. уЧПКУФЧП
ЪБЭЙЭЕООПУФЙ ТБУРТПУФТБОСЕФУС ЧОЙЪ РП ЙЕТБТИЙЙ ДП ФЕИ РПТ РПЛБ
РТПЙЪЧПДОЩК ЛМБУУ ПВЯСЧМСЕФ УЧПК ВБЪПЧЩК ПВЭЕДПУФХРОЩН
(public). рТЙ ЬФПН МАВЩЕ ЖХОЛГЙЙ-ЮМЕОЩ Ч ЛМБУУБИ C Й B ЙНЕАФ
ДПУФХР Л ЮМЕОХ ДБООЩИ val ВБЪПЧПЗП ЛМБУУБ. еУМЙ ЖХОЛГЙС-ЮМЕО
РТПЙЪЧПДОПЗП ЛМБУУБ Ч ЛБЮЕУФЧЕ ЧИПДОПЗП РБТБНЕФТБ ЙНЕЕФ
ХЛБЪБФЕМШ ЙМЙ УУЩМЛХ ОБ ПВЯЕЛФ ВБЪПЧПЗП ЛМБУУБ, ФП РТБЧЙМБ
УФБОПЧСФУС ДТХЗЙНЙ. нПДЙЖЙГЙТХЕН ЛМБУУ C УМЕДХАЭЙН ПВТБЪПН.

<pre>
class C:public B {
public:
void fc(A&); //чИПДОПК РБТБНЕФТ УУЩМЛБ ОБ ВБЪПЧЩК ЛМБУУ
};
void C::fc(A& a) {
val = 10; //ДПУФХР ТБЪТЕЫЕО
a.val = 10; //ПЫЙВЛБ! ОБТХЫЕОЙЕ РТБЧ ДПУФХРБ
}
</pre>
<p>
<H4><A NAME="tth_sEc2.5.3">3</A>&nbsp;&nbsp;пВЭЕДПУФХРОЩЕ ЮМЕОЩ ЛМБУУБ</H4>
C ПВЭЕДПУФХРОЩНЙ ЮМЕОБНЙ ЛМБУУБ ЧУЕ ПВУФПЙФ ОБНОПЗП РТПЭЕ.
дПУФХР Л ПВЭЕДПУФХРОЩН ЮМЕОБН ЛМБУУБ ТБЪТЕЫЕО ЖХОЛГЙСН-ЮМЕОБН
УБНПЗП ЛМБУУБ, РТПЙЪЧПДОЩИ ЛМБУУПЧ Й ПВЩЮОЩН РПМШЪПЧБФЕМСН
ЛМБУУБ.

<p>
<H3><A NAME="tth_sEc2.6">2.6</A>&nbsp;&nbsp;хЛБЪБФЕМШ this</H3>
лБЦДЩК ЧЩЪПЧ НЕФПДБ ХУФБОБЧМЙЧБЕФ ХЛБЪБФЕМШ ОБ ПВЯЕЛФ, РП ПФОПЫЕОЙА Л
ЛПФПТПНХ ПУХЭЕУФЧМСЕФУС ЧЩЪПЧ. уУЩМБФШУС ОБ ЬФПФ ХЛБЪБФЕМШ НПЦОП РПУТЕДУФЧПН
ЛМАЮЕЧПЗП УМПЧБ this (ХЛБЪБФЕМШ ОБ УБНПЗП УЕВС), РТЕДПУФБЧМСАЭЕЗП
ЖХОЛГЙСН-ЮМЕОБН ЛМБУУБ ЧПЪНПЦОПУФШ ДПУФХРБ Л ДБООЩН ПВЯЕЛФБ.
"оЕЧЙДЙНЩК" ХЛБЪБФЕМШ this РЕТЕДБЕФУС ЖХОЛГЙСН-ЮМЕОБН Ч ЛБЮЕУФЧЕ РЕТЧПЗП
БТЗХНЕОФБ БЧФПНБФЙЮЕУЛЙ Й ОЕ ФТЕВХЕФ СЧОПЗП ХЛБЪБОЙС Ч УРЙУЛЕ БТЗХНЕОФПЧ
ЖХОЛГЙЙ. л ПФДЕМШОЩН ЬМЕНЕОФБН ПВЯЕЛФБ, ЪБДЕКУФЧБООЩН Ч ЧЩЪПЧЕ ЖХОЛГЙЙ,
НПЦОП ПВТБЭБФШУС, ЙУРПМШЪХС ЧЩТБЦЕОЙЕ this <font face=symbol>П</font
> <font face=symbol> &lt; </font
>ЙНС&nbsp;ЮМЕОБ&nbsp;ДБООЩИ<font face=symbol> &gt; </font
>.
хЛБЪБФЕМШ this ОЕ
ДПУФХРЕО ДМС ОЕУФБФЙЮЕУЛЙИ НЕФПДПЧ, Й ДМС ДТХЦЕУФЧЕООЩИ ЖХОЛГЙК.

<p>
<H3><A NAME="tth_sEc2.7">2.7</A>&nbsp;&nbsp;жХОЛГЙЙ-ЮМЕОЩ ЛМБУУБ</H3>
рТБЧЙМБ ДПУФХРБ Л ЖХОЛГЙС-ЮМЕОБН ЛМБУУБ ФЕ ЦЕ, ЮФП Й Л ЮМЕОБН ДБООЩИ.
уХЭЕУФЧХЕФ ОЕУЛПМШЛП ФЙРПЧ ЖХОЛГЙК-ЮМЕОПЧ ЛМБУУБ:

<OL type="1">
<p>

<li> РТПУФЩЕ;

<li> ЛПОУФБОФОЩЕ;

<li> УФБФЙЮЕУЛЙЕ;

<li> У ЛПОУФБОФОЩН ХЛБЪБФЕМЕН this;

<li> inline ЖХОЛГЙЙ;

<li> ЛПОУФТХЛФПТЩ;

<li> ДЕУФТХЛФПТЩ;
</OL>
<p>
лТБФЛП ТБУУНПФТЙН РЕТЕЮЙУМЕООЩЕ ЧЩЫЕ ФЙРЩ.

<p>
<H4><A NAME="tth_sEc2.7.1">1</A>&nbsp;&nbsp;рТПУФЩЕ ЖХОЛГЙЙ-ЮМЕОЩ</H4>
рТЙНЕТ ПВЯСЧМЕОЙС РТПУФЩИ ЖХОЛГЙК-ЮМЕОПЧ ЛМБУУБ.

<pre>
class Example {
public:
char* name;
void f1(int,long,char*); //РТПУФБС ЖХОЛГЙС У РБТБНЕФТБНЙ
long f2(char* cp=0);//У РБТБНЕФТПН, ПРТЕДЕМСЕНЩН РП ХНПМЮБОЙА
void f3(int,long ...); // У РЕТЕНЕООЩН ЮЙУМПН РБТБНЕФТПЧ
char* f4(Example&); // УП УУЩМЛПК ОБ ПВЯЕЛФ
};
</pre>
<p>
жХОЛГЙС f4() ПВЯСЧМЕОБ ФБЛ, ЮФПВЩ РПМХЮБФШ УУЩМЛХ ОБ ЛМБУУ Example.
йУРПМШЪПЧБОЙЕ ЛМБУУБ ЧОХФТЙ УПВУФЧЕООПЗП ПВЯСЧМЕОЙС РТЙЕНМЕНП Й ЮБУФП
ЙУРПМШЪХЕФУС.

<p>
<H4><A NAME="tth_sEc2.7.2">2</A>&nbsp;&nbsp;лПОУФБОФОЩЕ ЖХОЛГЙЙ-ЮМЕОЩ</H4>
лПОУФБОФОБС ЖХОЛГЙС-ЮМЕО ЧПЪЧТБЭБЕФ ЛПОУФБОФОЩК ПВЯЕЛФ. рТЙНЕТ ПВЯСЧМЕОЙС,
ТЕБМЙЪБГЙЙ Й ЙУРПМШЪПЧБОЙС РТЙЧПДЙФУС ОЙЦЕ.

<pre>
class Example {
public:
const int f(); // ПВЯСЧМЕОЙЕ ЛПОУФБОФОПК ЖХОЛГЙЙ
};
// ТЕБМЙЪБГЙС ЛПОУФБОФОПК ЖХОЛГЙЙ
const int Example::f(){ return 3;}
// ЙУРПМШЪПЧБОЙЕ
void main() {
Example e;
const int i = e.f(); //ЙОЙГЙБМЙЪБГЙС ЛПОУФБОФЩ
int j = e.f(); //ЙОЙГЙБМЙЪБГЙС РЕТЕНЕООПК
}
</pre>
<p>
<H4><A NAME="tth_sEc2.7.3">3</A>&nbsp;&nbsp;уФБФЙЮЕУЛЙЕ ЖХОЛГЙЙ-ЮМЕОЩ</H4>
пВЯСЧМЕОЙЕ УФБФЙЮЕУЛЙИ ЖХОЛГЙК- ЮМЕОПЧ РПИПЦЕ ОБ ПВЯСЧМЕОЙЕ УФБФЙЮЕУЛЙИ
ДБООЩИ. пФМЙЮЙС УФБФЙЮЕУЛЙИ ЖХОЛГЙК-ЮМЕОПЧ ПФ ПВЩЮОЩИ ЪБЛМАЮБЕФУС Ч
УМЕДХАЭЕН:

<OL type="1">
<p>

<li> ПОЙ НПЗХФ ЙУРПМШЪПЧБФШУС ВЕЪ УУЩМЛЙ ОБ ЛПОЛТЕФОЩК ПВЯЕЛФ, РТПУФП РП
ЙНЕОЙ ЛМБУУБ;

<li> ПОЙ ОЕ ЙНЕАФ ХЛБЪБФЕМС this Й РПЬФПНХ ОЕ НПЗХФ РПМХЮЙФШ ДПУФХР Л ЮМЕОБН
ДБООЩИ ЛМБУУБ, ЕУМЙ ФПМШЛП ХЛБЪБФЕМШ this ОЕ РЕТЕДБО ЙН Ч СЧОПН ЧЙДЕ.
</OL>
<p>
тБУУНПФТЙН РТЙНЕТ.

<pre>
int i1,i2,i3; //ПВЯСЧМЕОЙЕ ЗМПВБМШОЩИ РЕТЕНЕООЩИ
...
class Example {
public:
static void sum(); //ПВЯСЧМЕОЙЕ УФБФЙЮЕУЛПК ЖХОЛГЙЙ
};
// тЕБМЙЪБГЙС УФБФЙЮЕУЛПК ЖХОЛГЙЙ
void Example::sum() {
i1 = i2 + i3;
}
// йУРПМШЪПЧБОЙЕ
void main() {
Example e;
e.sum(); //РЕТЧЩК УРПУПВ ЧЩЪПЧБ
Example::sum(); //ЧФПТПК УРПУПВ ЧЩЪПЧБ
}
</pre>
<p>
рПМХЮЙФШ ДПУФХР Л УФБФЙЮЕУЛПК ЖХОЛГЙЙ НПЦОП Й ЮЕТЕЪ ХЛБЪБФЕМШ ОБ ЖХОЛГЙА.

<pre>
void main() {
//пРТЕДЕМЕОЙЕ ХЛБЪБФЕМС ОБ ЖХОЛГЙА
void (Example::*fp)() = &Example::sum;
//уПЪДБОЙЕ ПВЯЕЛФБ
Examle e;
//чЩЪПЧ ЖХОЛГЙЙ
(*fp)();
}
</pre>
<p>
<H4><A NAME="tth_sEc2.7.4">4</A>&nbsp;&nbsp;жХОЛГЙЙ-ЮМЕОЩ У ЛПОУФБОФОЩН ХЛБЪБФЕМЕН this</H4>
рТЙЧЕДЕН РТЙНЕТ ПВЯСЧМЕОЙС ЖХОЛГЙЙ-ЮМЕОБ У ЛПОУФБОФОЩН ХЛБЪБФЕМЕН this.

<pre>
class Example {
int value;
public:
int Get_Val() const; //out-of-line ПВЯСЧМЕОЙЕ
int ReadVal() const { return value;} //inline ПВЯСЧМЕОЙЕ
};
int Example::Get_Val() const {
return value;
}
</pre>
<p>
рТЙ РЕТЕДБЮЕ ЖХОЛГЙЙ-ЮМЕОХ "ОЕЧЙДЙНПЗП" ХЛБЪБФЕМС this РПДТБЪХНЕЧБЕФУС, ЮФП
ХЛБЪБФЕМШ this ПВЯСЧМЕО УМЕДХАЭЙН ПВТБЪПН:

<pre>
//пВЯСЧМЕОЙЕ ЛПОУФБОФОПЗП ХЛБЪБФЕМС
Example *const this;
</pre>
<p>
дБООПЕ ПВЯСЧМЕОЙЕ РПДТБЪХНЕЧБЕФ, ЮФП ЙЪНЕОЕОЙЕ УПДЕТЦЙНПЗП РП ЬФПНХ ХЛБЪБФЕМА
ЧПЪНПЦОП, ОП УБН ХЛБЪБФЕМШ ЙЪНЕОЕО ВЩФШ ОЕ НПЦЕФ. ъБНЕФЙН, ЮФП ХЛБЪБФЕМШ this
ОЕМШЪС ПВЯСЧЙФШ СЧОП. пВЯСЧМЕОЙЕ ЖХОЛГЙЙ-ЮМЕОБ Ч ЛМБУУЕ У ЛПОУФБОФОЩН
ХЛБЪБФЕМЕН this ЙЪНЕОСЕФ ПВЯСЧМЕОЙЕ ХЛБЪБФЕМС ОБ УМЕДХАЭЙЕ:

<pre>
const Example *const this;
</pre>
<p>
фЕРЕТШ this ПРТЕДЕМЕО ЛБЛ ЛПОУФБОФОЩК ХЛБЪБФЕМШ ОБ ЛПОУФБОФОЩК ПВЯЕЛФ
ФЙРБ Example. фБЛПЕ ПВЯСЧМЕОЙЕ ЪБРТЕЭБЕФ ЖХОЛГЙЙ ЮМЕОХ ЧОПУЙФШ МАВЩЕ ЙЪНЕОЕОЙС
Ч ЮМЕОЩ ДБООЩИ ЛМБУУБ. ьФБ ЧПЪНПЦОПУФШ РПМЕЪОБ РТЙ ПРТЕДЕМЕОЙЙ ВБЪПЧЩИ ЛМБУУПЧ
Ч ЙЕТБТИЙЙ, ЗДЕ ЖХОЛГЙС-ЮМЕО НПЦЕФ ВЩФШ РЕТЕПРТЕДЕМЕОБ Ч РТПЙЪЧПДОПН ЛМБУУЕ.

<p>
<H4><A NAME="tth_sEc2.7.5">5</A>&nbsp;&nbsp;inline ЖХОЛГЙЙ</H4>
inline ЖХОЛГЙЕК ОБЪЩЧБЕФУС ЖХОЛГЙС-ЮМЕО ЛМБУУБ, ФЕМП ЛПФПТПК РТЙЧПДЙФУС Ч
ЛМБУУЕ Ч НПНЕОФ ЕЕ ПВЯСЧМЕОЙС. рТЙНЕТ.

<pre>
class Example {
private:
int val;
public:
int Get_Val() {return val;} //inline
void Set_Val(int a) { val = a;} //inline
};
</pre>
<p>
ч у++ inline ЖХОЛГЙЙ ТБЪТБВПФБОЩ ДМС РПЧЩЫЕОЙС ЬЖЖЕЛФЙЧОПУФЙ ЧЩЪПЧПЧ ЖХОЛГЙК
ЮМЕОПЧ. уЙОФБЛУЙУ ЧЩЪПЧБ inline ЖХОЛГЙЙ ОЙ ЮЕН ОЕ ПФМЙЮБЕФУС ПФ ЧЩЪПЧБ
ПВЩЮОПК ЖХОЛГЙЙ-ЮМЕОБ ЛМБУУБ. пДОБЛП ЛПНРЙМСФПТ ЪБНЕОСЕФ ЧЩЪПЧ inline ЖХОЛГЙЙ
ЕЕ ФЕМПН. фЕН УБНЩН ДПУФЙЗБЕФУС ЬЛПОПНЙС ЧТЕНЕООЩИ ЪБФТБФ ДМС РПДЗПФПЧЛЙ Й
ПЮЙУФЛЙ УФЕЛБ ДП Й РПУМЕ ЧЩЪПЧБ ЖХОЛГЙЙ.

<p>
<H4><A NAME="tth_sEc2.7.6">6</A>&nbsp;&nbsp;лПОУФТХЛФПТЩ Й ДЕУФТХЛФПТЩ</H4>
лПОУФТХЛФПТ - ЖХОЛГЙС-ЮМЕО, ЙНС ЛПФПТПК УПЧРБДБЕФ У ЙНЕОЕН ЛМБУУБ. лПОУФТХЛФПТ
ЙУРПМШЪХЕФУС ДМС РПУФТПЕОЙС ПВЯЕЛФБ ДБООПЗП ЛМБУУБ Й БЧФПНБФЙЮЕУЛЙ
ЧЩЪЩЧБЕФУС ПДЙО ТБЪ Ч НПНЕОФ ПВЯСЧМЕОЙС ЙМЙ УПЪДБОЙС ЬЛЪЕНРМСТБ ЛМБУУБ ДП
ЧЩРПМОЕОЙС МАВПК ДТХЗПК ЖХОЛГЙЙ ЛМБУУБ. лПОУФТХЛФПТ ОЕ ЙНЕЕФ ЧПЪЧТБЭБЕНПЗП
ЪОБЮЕОЙС. рПРЩФЛБ ПРТЕДЕМЙФШ ФЙР ЛПОУФТХЛФПТБ РТЙЧЕДЕФ Л ПЫЙВЛЕ. лПОУФТХЛФПТ
ВЕЪ БТЗХНЕОФПЧ - ЬФП ЛПОУФТХЛФПТ РП ХНПМЮБОЙА. еУМЙ ЛПОУФТХЛФПТ ОБ ПРТЕДЕМЕО Ч
ЛМБУУЕ, ФП Borland C++ ПВЯСЧМСЕФ ЕЗП БЧФПНБФЙЮЕУЛЙ. лМБУУ НПЦЕФ ЙНЕФШ
ОЕУЛПМШЛП ЛПОУФТХЛФПТПЧ У ПДОЙН ЙНЕОЕН, ОП У ТБЪМЙЮОЩН ЮЙУМПН ЙМЙ ФЙРПН
ЧИПДОЩИ БТЗХНЕОФПЧ. тБЪМЙЮОЩЕ ЧЙДЩ ЛПОУФТХЛФПТПЧ ЙУРПМШЪХАФУС ДМС ТБЪМЙЮОЩИ
ЧЙДПЧ ЙОЙГЙБМЙЪБГЙК ЬЛЪЕНРМСТПЧ ЛМБУУБ.

<p>
дЕУФТХЛФПТ - ЖХОЛГЙС-ЮМЕО, ЙНС ЛПФПТПК УПЧРБДБЕФ У ЙНЕОЕН ЛМБУУБ,
Б ОБЮЙОБЕФУС У
УЙНЧПМБ &#126;&nbsp;. дЕУФТХЛФПТ УМХЦЙФ ДМС ХДБМЕОЙС ЙМЙ ПЮЙУФЛЙ ПВЯЕЛФБ, Й
БЧФПНБФЙЮЕУЛЙ ЧЩЪЩЧБЕФУС ФПЗДБ, ЛПЗДБ ПВЯЕЛФ ЧЩИПДЙФ ЙЪ ПВМБУФЙ ЧЙДЙНПУФЙ.
дЕУФТХЛФПТ
ФБЛ ЦЕ ОЕ ЙНЕЕФ ФЙРБ. еУМЙ ДЕУФТХЛФПТ ОЕ ПРТЕДЕМЕО Ч ЛМБУУЕ, ФП Borland C++
ПВЯСЧМСЕФ ЕЗП БЧФПНБФЙЮЕУЛЙ. ч ПФМЙЮЙЕ ПФ ЛПОУФТХЛФПТПЧ ДЕУФТХЛФПТ ЛМБУУБ ОЕ
ЙНЕЕФ ЧИПДОЩИ РБТБНЕФТПЧ Й РПЬФПНХ НПЦЕФ ВЩФШ ФПМШЛП ПДЙО ДЕУФТХЛФПТ Ч ЛМБУУЕ.

<p>
пВЩЮОП ЛПОУФТХЛФПТ Й ДЕУФТХЛФПТ ПРЙУЩЧБАФУС Ч ТБЪДЕМЕ public. рТЙНЕТ
ЛМБУУБ У ОЕУЛПМШЛЙНЙ ЛПОУФТХЛФПТБНЙ Й ДЕУФТХЛФПТПН РТЙЧПДЙФУС Ч ТБЪДЕМЕ
&nbsp;.

<p>
<H3><A NAME="tth_sEc2.8">2.8</A>&nbsp;&nbsp;уФТХЛФХТЩ Й ПВЯЕДЙОЕОЙС</H3>
ч РПОСФЙЕ ЛМБУУПЧ Ч у++ ЧЛМАЮБАФУС ОЕ ФПМШЛП ФЙРЩ ДБООЩИ, ПРТЕДЕМЕООЩЕ У
РПНПЭША ЛМАЮЕЧПЗП УМПЧБ class, ОП Й ФЕ, ЛПФПТЩЕ ПРТЕДЕМЕОЩ РПУТЕДУФЧПН struct
Й union.

<p>
лМБУУ, ПРТЕДЕМЕООЩК У РПНПЭША struct - ЬФП ЛМБУУ, Ч ЛПФПТПН ЧУЕ ДБООЩЕ
СЧМСАФУС public РП ХНПМЮБОЙА (ЙНЕЕФУС ЧПЪНПЦОПУФШ НЕОСФШ ЬФХ ХУФБОПЧЛХ).

<p>
лМБУУ, ПРТЕДЕМЕООЩК У РПНПЭША union - ЬФП ЛМБУУ, Ч ЛПФПТПН ЧУЕ ДБООЩЕ
СЧМСАФУС public Й ЬФПФ ХТПЧЕОШ ДПУФХРБ ОЕ НПЦЕФ ВЩФШ ЙЪНЕОЕО.

<p>
<H3><A NAME="tth_sEc2.9">2.9</A>&nbsp;&nbsp;рЕТЕЗТХЪЛБ ПРЕТБГЙК, ЪБЭЙФБ ПФ РПВЙФПЧПЗП
ЛПРЙТПЧБОЙС</H3><A NAME="r1">
</A>
рПОСФЙС ЛПОУФТХЛФПТПЧ Й ДЕУФТХЛФПТБ ЛМБУУБ РПСУОЙН ОБ РТЙНЕТЕ
ЛМБУУБ TString, ПРЙУБООПЗП Ч ЬФПН ТБЪДЕМЕ. ьФПФ ЛМБУУ TString РПЪЧПМЙФ
ПРЕТЙТПЧБФШ УП УФТПЛБНЙ Ч СЪЩЛЕ у++ ФБЛ, ЛБЛ ЬФП ДЕМБЕФУС Ч СЪЩЛЕ рБУЛБМШ.
пДОПЧТЕНЕООП РТЙЧЕДЕН РТЙНЕТ
РЕТЕЗТХЪЛЙ ПРЕТБГЙК.

<p>
тБУУНПФТЙН РТЙНЕТ:<A NAME="pr1">
</A>

<pre>
//--------------------------------------
//жБКМ str.HPP - ПРЙУБОЙЕ ЛМБУУБ TString
//--------------------------------------
#ifndef __STR_HPP
#define __STR_HPP

#include &lt;stdio.h&#62;
#include &lt;string.h&#62;

class TString {
char *cp; // ХЛБЪБФЕМШ ОБ УФТПЛХ
int len; // ДМЙОБ УФТПЛЙ
public:
//ЛПОУФТХЛФПТЩ ЛМБУУБ
TString (char *text); // ЙУРПМШЪХЕФ УХЭЕУФЧХАЭАА УФТПЛХ
TString (int size=80); // УПЪДБЕФ РХУФХА УФТПЛХ
TString (TString& aStr); // ДМС РТЙУЧПЕОЙС ПФ
// ДТХЗПЗП ЛМБУУБ РТЙ ЙОЙГЙБМЙЪБГЙЙ
//ДЕУФТХЛФПТ ЛМБУУБ
~TString() { delete[] cp; } // ЧУФТПЕООЩК ДЕУФТХЛФПТ

//ЖХОЛГЙЙ-ЮМЕОЩ (НЕФПДЩ) ЛМБУУБ
int Get_len(void) { return len; } //РПМХЮЙФШ ДМЙОХ
char* Get_Str() { return cp; } //РПМХЮЙФШ ХЛБЪБФЕМШ
void Show(void) { printf("\n%s",cp); } //РЕЮБФШ УФТПЛЙ

//РЕТЕПРТЕДЕМЕОЙЕ (РЕТЕЗТХЪЛБ) ПРЕТБФПТПЧ
TString operator+(TString& aStr); // ДМС УХННЩ c ПВЯЕЛФПН
TString operator+(char*); //ДМС УХННЩ У ЛПОУФБОФПК
void operator=(TString& aStr); //ДМС РТЙУЧПЕОЙС ПФ ПВЯЕЛФБ
void operator=(char *); //РТЙУЧПЕОЙЕ ПФ ЛПОУФБОФОПК УФТПЛЙ
};
#endif
//----------------------------------------
//жБКМ str.CPP -ТЕБМЙЪБГЙС ЛМБУУБ TString
//----------------------------------------
#include "str.HPP"

// лПОУФТХЛФПТ, ЧЩЪЩЧБЕНЩК РТЙ ЙОЙГЙБМЙЪБГЙЙ ЧЙДБ
// TString str("Initialize from constant string.");
TString::TString (char *text)
{
len = strlen(text); //ДМЙОБ ЧИПДОПК УФТПЛЙ
// ЧЩДЕМЕОЙЕ РБНСФЙ РПД УФТПЛХ
cp = new char[ len + 1 ];
strcpy(cp, text);// ЛПРЙТПЧБОЙЕ УФТПЛ
}

// лПОУФТХЛФПТ, ЧЩЪЩЧБЕНЩК РТЙ ЙОЙГЙБМЙЪБГЙЙ ЧЙДБ
// TString str(20); ЙМЙ TString str;
// ЧП ЧФПТПН УМХЮБЕ РП ХНПМЮБОЙА РПД УФТПЛХ ЧЩДЕМСЕФУС
// РБНСФШ ТБЪНЕТПН Ч 80 ВБКФ.
TString::TString(int size)
{
len = size;
cp = new char[ len + 1 ];
*cp = '\0'; // ЙОЙГЙБМЙЪБГЙС РХУФПК УФТПЛЙ
}

// йОЙГЙБМЙЪБГЙС ПВЯЕЛФБ ПДОЙН ЙЪ УМЕДХАЭЙИ НЕФПДПЧ:
// TString strA("A");
// TString strB = strA;//ЧЩЪПЧ ЛПОУФТХЛФПТБ TString(TStrung&)
// TString strC(strB); //ЧЩЪПЧ ЛПОУФТХЛФПТБ TString(TStrung&)
TString::TString(TString& aStr)
{
len = aStr.Get_len(); //РПМХЮЙФШ ДМЙОХ УФТПЛЙ
cp = new char[ len + 1 ];//ЧЩДЕМЙФШ РБНСФШ
//ЛПРЙТПЧБОЙЕ
strcpy(cp, aStr.Get_Str());
}

//рЕТЕПРТЕДЕМЕОЙЕ ПРЕТБФПТПЧ.
// ЙУРПМШЪПЧБОЙЕ ПРЕТБФПТБ strA = strB + strC;
TString TString::operator+(TString& aStr)
{
TString tmp(len = len + aStr.Get_len());
strcpy(tmp.Get_Str(), cp);
strcat(tmp.Get_Str(), aStr.Get_Str());
return tmp;
}
// ЙУРПМШЪПЧБОЙЕ ПРЕТБФПТБ strA = strB + "Any string";
TString TString::operator+(char* s)
{
TString tmp(len = len + strlen(s));
strcpy(tmp.Get_Str(), cp);
strcat(tmp.Get_Str(), s);
return tmp;
}
//ЙУРПМШЪПЧБОЙЕ ПРЕТБФПТБ strA = strB;
void TString::operator=(TString& aStr)
{
//ЪБЭЙФБ ПФ ЛПРЙТПЧБОЙС Ч УЕВС
if ( this == &aStr ) return;
delete[] cp; //ПЮЙУФЙФШ ЧЩДЕМЕОХА РБНСФШ
cp = new char[len = aStr.Get_len()];
strcpy(cp, aStr.Get_Str());
}
//йУРПМШЪПЧБОЙЕ ПРЕТБФПТБ s1 = "Any string";
void TString::operator=(char* s)
{
delete[] cp; //ПЮЙУФЙФШ ЧЩДЕМЕОХА РБНСФШ
cp = new char[len = strlen(s) + 1];
strcpy(cp, s);
}

//========================================
// пУОПЧОБС РТПЗТБННБ ЧЕТУЙС ДМС DOS.
//========================================
#include &lt;stdio.h&#62;
#include "str.hpp"

void main(void)
{
TString s1("First string"); //УПЪДБОЙЕ ПВЯЕЛФБ Й
//ЧЩЪПЧ ЛПОУФТХЛФПТБ
//TString(char*)
s1.Show();
TString s2(" Second string");
TString s3 = s2; //УПЪДБОЙЕ ПВЯЕЛФБ Й ЧЩЪПЧ
//ЛПОУФТХЛФПТБ TString(TString&)
//ОЕ РХФБФШ У ПРЕТБГЙЕК РТЙУЧБЙЧБОЙС!

TString s4;//ЧЩЪПЧ ЛПОУФТХЛФПТБ TString(int size=80)
//чЩРПМОЕОЙЕ ПРЕТБГЙК
s4 = s1 + s3;
s4.Show();
s2 = "Hello World!";
s2.Show();
s2 = s3 + " Any string";
s2.Show();
}
</pre>
<p>
ьФПФ РТЙНЕТ ДЕНПОУФТЙТХЕФ ЧПЪНПЦОПУФШ СЪЩЛБ у++ УПЪДБЧБФШ ОПЧЩЕ ФЙРЩ ДБООЩИ
ОБДЕМЕООЩИ УПВУФЧЕООЩНЙ ЖХОЛГЙПОБМШОЩНЙ ЧПЪНПЦОПУФСНЙ, ОЕ ЙНЕАЭЙНЙУС Ч УБНПН
СЪЩЛЕ. йЪ РТЙНЕТБ ЧЙДОП, ЮФП ТБЪМЙЮОЩЕ ЙОЙГЙБМЙЪБГЙЙ ПВЯЕЛФПЧ (ЙМЙ
ЬЛЪЕНРМСТПЧ) ЛМБУУБ TString ФТЕВХАФ ОБМЙЮЙС Ч ЛМБУУЕ ОЕУЛПМШЛЙИ ЛПОУФТХЛФПТПЧ.
чФПТБС ПУПВЕООПУФШ ЬФПЗП ЛМБУУБ - ЬФП РЕТЕЗТХЪЛБ ПРЕТБГЙК ОБД ПВЯЕЛФБНЙ ЬФПЗП
ЛМБУУБ. дМС РЕТЕЗТХЪЛЙ ПРЕТБГЙЙ ДМС ЛМБУУБ Ч у++ ЙУРПМШЪХЕФУС УМЕДХАЭЙК
УЙОФБЛУЙУ:

<pre>
&lt;фЙР&#62; operator &lt;ПРЕТБГЙС&#62;(&lt;ЧИПДОЩЕ РБТБНЕФТЩ&#62;)
{
&lt;ПРЕТБФПТЩ&#62;;
}
</pre>
<p>
ЗДЕ

<p>

<table><tr><td>
<tr><td><font face=symbol> &lt; </font
>фЙР<font face=symbol> &gt; </font
> </td><td> - </td><td> ФЙР, ЧПЪЧТБЭБЕНЩК ЖХОЛГЙЕК;
<tr><td>operator </td><td> - </td><td> ЛМАЮЕЧПЕ УМПЧП;
<tr><td><font face=symbol> &lt; </font
>ПРЕТБГЙС<font face=symbol> &gt; </font
> </td><td> - </td><td> РЕТЕЗТХЦБЕНБС ПРЕТБГЙС.</table>


<p>
ч СЪЩЛЕ у++ ЙНЕАФУС УМЕДХАЭЙЕ ПЗТБОЙЮЕОЙС ОБ РЕТЕЗТХЪЛХ
ПРЕТБГЙК:

<p>
- у++ ОЕ ТБЪМЙЮБЕФ РТЕЖЙЛУОХА Й РПУФЖЙЛУОХА ЖПТНЩ ++ Й
-&nbsp;-;

<p>
- РЕТЕПРТЕДЕМСЕНБС ПРЕТБГЙС ДПМЦОБ РТЙУХФУФЧПЧБФШ Ч СЪЩЛЕ
(ОБРТЙНЕТ, ОЕМШЪС ПРТЕДЕМЙФШ ПРЕТБГЙА У УЙНЧПМПН #);

<p>
- ОЕМШЪС РЕТЕПРТЕДЕМЙФШ ПРЕТБФПТЩ, ЪБДБООЩЕ УМЕДХАЭЙНЙ УЙНЧПМБНЙ
<tt>.</tt> <tt>*</tt> <tt>::</tt> <tt>?</tt> <tt>:</tt> ;

<p>
- РЕТЕПРТЕДЕМёООЩЕ ПРЕТБГЙЙ УПИТБОСАФ УЧПК ЙЪОБЮБМШОЩК РТЙПТЙФЕФ.

<p>
оБМЙЮЙЕ Ч ЛМБУУЕ ЛПОУФТХЛФПТБ TString::TString(TString&amp;) Й ПРЕТБФПТПЧ
РТЙУЧБЙЧБОЙС РПЪЧПМСЕФ ЪБЭЙФЙФШ ЬЛЪЕНРМСТЩ ЛМБУУБ ПФ РПВЙФПЧПЗП ЛПРЙТПЧБОЙС.
рПСУОЙН ЧЩУЛБЪБООПЕ ХФЧЕТЦДЕОЙЕ ОБ РТЙНЕТБИ. дПРХУФЙН, ЮФП ЛМБУУ ДМС ТБВПФЩ УП
УФТПЛБНЙ ВЩМ ВЩ ПРТЕДЕМЕО УМЕДХАЭЙН ПВТБЪПН.

<pre>
struct string{
char *p;
int size;
string (int s){ p = new char[size = s]; }
~string(){ delete[] p; }
};
</pre>
<p>
string - УФТХЛФХТБ ДБООЩИ УПУФПСЭБС ЙЪ ХЛБЪБФЕМС ОБ ЧЕЛФПТ УЙНЧПМПЧ Й ЕЗП
ТБЪНЕТБ. чЕЛФПТ УПЪДБёФУС ЛПОУФТХЛФПТПН Й ХОЙЮФПЦБЕФУС ДЕУФТХЛФПТПН.
уМЕДХАЭЙК ЛПД РТЙЧЕДЕФ Л ПЫЙВЛЕ ЧЩРПМОЕОЙС.

<pre>
void f()
{
string s1(10);
string s2(20);
s1 = s2;
}
</pre>
<p>
ч ЖХОЛГЙЙ f() ЛПНРЙМСФПТ ТБЪНЕУФЙФ Ч РБНСФЙ 2 ЧЕЛФПТБ, ПДОБЛП
РТЙУЧПЕОЙЕ s1=s2 ХОЙЮФПЦЙФ ХЛБЪБФЕМШ ОБ
ПДЙО ЙЪ ОЙИ Й УЛПРЙТХЕФ ЧФПТПК. рТЙ ЧЩИПДЕ ЙЪ ЖХОЛГЙЙ f() ДМС s1 Й s2 ВХДЕФ
ЧЩЪЧБО ДЕУФТХЛФПТ, ЛПФПТЩК ДЧБЦДЩ ХОЙЮФПЦЙФ ПДЙО Й ФПФ ЦЕ ЧЕЛФПТ.

<p>
ьФП ЪБФТХДОЕОЙЕ ТЕЫБЕФУС ПРТЕДЕМЕОЙЕН ПРЕТБФПТБ РТЙУЧПЕОЙС. дПВБЧЙН ЕЗП Ч
ПРЙУБОЙЕ ЛМБУУБ.

<pre>
struct string{
char *p;
int size;
string (int s){ p = new char[ size = s]; }
~string(){ delete p; }
void operator=(string&);
}

void string::operator=(string& a)
{
if (this == &a) return;
delete[] p;
p = new char[size=a.size];
strcpy(p, a.p);
}
</pre>
<p>
пДОБЛП РТПВМЕНБ РТЕДУФБЕФ Ч ДТХЗПН ПВМЙЮЙЙ. тБccНПФТЙН
УМЕДХАЭЙК ЛПД.

<pre>
void f()
{
string s1(100);
string s2=s1;
}
</pre>
<p>
ъДЕУШ УПЪДБЕФУС МЙЫШ ПДОБ РЕТЕНЕООБС string, Б ХОЙЮФПЦБЕФУС ДЧЕ. пРЕТБФПТ
РТЙУЧПЕОЙС ОЕРТЙНЕОЙН Л ОЕЙОЙГЙБМЙЪЙТПЧБООПНХ ПВЯЕЛФХ.
рПЬФПНХ ОХЦОП ПРТЕДЕМЙФШ ЛПОУФТХЛФПТ ЧЙДБ string(string&amp;),
БОБМПЗЙЮОЩК ФПНХ ЛБЛ ЬФП ДЕМБМПУШ Ч РТЙНЕТЕ&nbsp;<A href="#pr1">2.9</A>.

<p>
йФБЛ, ЕУМЙ ЛМБУУ X УПДЕТЦЙФ ЛПОУФТХЛФПТ, ЛПФПТЩК ТЕЫБЕФ ОЕФТЙЧЙБМШОХА
ЪБДБЮХ (ОБРТЙНЕТ: РЕТЕТБУРТЕДЕМЕОЙЕ РБНСФЙ), ФП ПЮЕОШ ЧЕТПСФОП, ЮФП РПФТЕВХЕФУС
РПМОПЕ ДПРПМОЕОЙЕ ЖХОЛГЙК ДМС ФПЗП, ЮФПВЩ ЗБТБОФЙТПЧБООП ЙЪВЕЦБФШ РПВЙФПЧПЗП
ЛПРЙТПЧБОЙС ПВЯЕЛФПЧ.

<p>
пВЭЙК ЧЙД ПРТЕДЕМЕОЙС ЛМБУУБ X ЧЩЗМСДЙФ УМЕДХАЭЙН ПВТБЪПН:

<pre>
class X {
.....
//
X (ЮФП-ОЙВХДШ) // ЛПОУФТХЛФПТ УПЪДБЕФ ПВЯЕЛФЩ
X (X&); // ЛПОУФТХЛФПТ : ЛПРЙТПЧБОЙЕ РТЙ ЙОЙГЙБМЙЪБГЙЙ
operator = (X&);// РТЙУЧПЕОЙЕ : ПЮЙУФЛБ Й ЛПРЙТПЧБОЙЕ
~X(); // ДЕУФТХЛФПТ : ПЮЙУФЛБ
.....
};
</pre>
<p>
пВЯЕЛФ ЛПРЙТХЕФУС ЕЭЕ Ч ДЧХИ УМХЮБСИ: ЕУМЙ ПО ЙУРПМШЪХЕФУС ЛБЛ БТЗХНЕОФ
ЖХОЛГЙЙ Й ЛБЛ ЧЕМЙЮЙОБ ЧПЪЧТБЭБЕНБС ЖХОЛГЙЕК. ч ПВПЙИ УМХЮБСИ ВХДЕФ ЙУРПМШЪПЧБФШУС
X(X&amp;) , ЕУМЙ ПО ПРТЕДЕМЕО.

<p>
<H3><A NAME="tth_sEc2.10">2.10</A>&nbsp;&nbsp;оБУМЕДПЧБОЙЕ Й ЛПОФТПМШ ДПУФХРБ</H3>
оБУМЕДПЧБОЙЕ Ч у++ УМХЦЙФ ДМС ПЗТБОЙЮЕОЙС ЙМЙ ТБУЫЙТЕОЙС ИБТБЛФЕТЙУФЙЛ
ВБЪПЧПЗП ЛМБУУБ.
уЙОФБЛУЙУ ПВЯСЧМЕОЙС РТПЙЪЧПМШОПЗП ЛМБУУБ ЧЩЗМСДЙФ УМЕДХАЭЙН ПВТБЪПН :

<pre>
class D: [access_modifier] B { // РП ХНПМЮБОЙА private
....
};

ЙМЙ

struct D :[access_modifier] B { // РП ХНПМЮБОЙА public
...
};
</pre>
<p>
ЗДЕ,
D - ЙНС РТПЙЪЧПДОПЗП ЛМБУУБ;

<p>
access modifier - НПДЙЖЙЛБФПТ РТБЧ ДПУФХРБ (ОЕПВИПДЙНЩК ЬМЕНЕОФ
public ЙМЙ private), НПЦЕФ ВЩФШ ПРХЭЕО;

<p>
B - ЙНС ВБЪПЧПЗП ЛМБУУБ.

<p>
ъБНЕЮБОЙЕ: union - ОЕ НПЦЕФ ВЩФШ ОЙ ВБЪПЧЩН, ОЙ РТПЙЪЧПДОЩН ЛМБУУПН.

<p>
нПДЙЖЙЛБФПТ РТБЧ ДПУФХРБ ЙУРПМШЪХЕФУС ДМС ЙЪНЕОЕОЙС РТБЧ
ДПУФХРБ Л ОБУМЕДХЕНЩН ЮМЕОБН Ч УППФЧЕФУФЧЙЙ У РТБЧЙМБНЙ,
ХЛБЪБООЩНЙ Ч ФБВМЙГЕ&nbsp;.

<p>

<p><A NAME="tth_tAb1">
</A> <center> Table 1: дПУФХР Ч ЛМБУУБИ РТЙ ОБУМЕДПЧБОЙЙ.</center><A NAME="t1">
</A>
<p><br>
<p>

<table border><tr><td>
<tr><td>дПУФХР Ч </td><td> нПДЙЖЙЛБФПТ РТБЧ </td><td> дПУФХР Ч РТПЙЪЧПДОПН
<tr><td>ВБЪПЧПН ЛМБУУЕ </td><td> ДПУФХРБ </td><td> ЛМБУУЕ
<tr><td>private </td><td> private </td><td> ОЕ ДПУФХРОЩ
<tr><td>private </td><td> public </td><td> ОЕ ДПУФХРОЩ
<tr><td>protecteg </td><td> private </td><td> private
<tr><td>protecteg </td><td> public </td><td> protecteg
<tr><td>public </td><td> private </td><td> private
<tr><td>public </td><td> public </td><td> public</table>

<p>
<p>
лБЛ ЧЙДОП ЙЪ ФБВМЙГЩ&nbsp;<A href="#t1">1</A> Ч РТПЙЪЧПДОЩИ ЛМБУУБИ ДПУФХР Л ЬМЕНЕОФБН
ВБЪПЧЩИ ЛМБУУПЧ
НПЦЕФ ВЩФШ ФПМШЛП ХЦЕУФПЮЕО, ОП ОЙЛБЛ ОЕ ПВМЕЗЮЕО.

<p>
<H4><A NAME="tth_sEc2.10.1">1</A>&nbsp;&nbsp;пЗТБОЙЮЕОЙЕ ОБ ОБУМЕДПЧБОЙЕ</H4>
рТЙ ПРТЕДЕМЕОЙЙ РТПЙЪЧПДОПЗП ЛМБУУБ ОЕ ОБУМЕДХАФУС ЙЪ ВБЪПЧПЗП:

<OL type="1">
<p>

<li> ЛПОУФТХЛФПТЩ;

<li> ДЕУФТХЛФПТЩ;

<li> ПРЕТБФПТЩ new, ПРТЕДЕМЕООЩЕ РПМШЪПЧБФЕМЕН;

<li> ПРЕТБФПТЩ РТЙУЧПЕОЙС, ПРТЕДЕМЕООЩЕ РПМШЪПЧБФЕМЕН;

<li> ПФОПЫЕОЙС ДТХЦЕУФЧЕООПУФЙ.
</OL>
<p>
<H4><A NAME="tth_sEc2.10.2">2</A>&nbsp;&nbsp;бТЗХНЕОФЩ, РЕТЕДБЧБЕНЩЕ Ч ВБЪПЧЩК ЛМБУУ</H4>
рТЙ УПЪДБОЙЙ ЬЛЪЕНРМСТБ РТПЙЪЧПДОПЗП ЛМБУУБ ЮБУФП РТЙИПДЙФУС РЕТЕДБЧБФШ
РБТБНЕФТЩ ЛПОУФТХЛФПТХ ВБЪПЧПЗП ЛМБУУБ. уМЕДХАЭЙК РТЙНЕТ ЙММАУФТЙТХЕФ
УЙОФБЛУЙУ РЕТЕДБЮЙ РБТБНЕФТПЧ.

<pre>
class TFirst {
int x,y,z;
public:
TFirst(int a, int b, int c) { x = a; y = b; z = c; }
};
class TSecond : public TFirst {
int val;
public:
TSecond(int d):TFirst(d, d + 1, d - 1){ val = d; } //inline
TSecond(int d, int e); //out-of-line
};
TSecond::TSecond(ind d, int e):TFirst(d, e, 0){
val = d + e;
}
</pre>
<p>
йЪ РТЙЧЕДЕООПЗП РТЙНЕТБ ЧЙДОП, ЮФП, ЧП-РЕТЧЩИ, РЕТЕДБЧБЕНЩЕ Ч ВБЪПЧЩК ЛМБУУ БТЗХНЕОФЩ
ДПМЦОЩ ВЩФШ ПРТЕДЕМЕОЩ ДП ФПЗП, ЛБЛ ЧЩРПМОЙФУС ФЕМП ЛПОУФТХЛФПТБ;
ЧП-ЧФПТЩИ, РБТБНЕФТЩ РЕТЕДБАФУС ЛПОУФТХЛФПТХ ВБЪПЧПЗП ЛМБУУБ ДП ФПЗП, ЛБЛ
ЧЩРПМОЙФУС ЛПОУФТХЛФПТ РТПЙЪЧПДОПЗП ЛМБУУБ.

<p>
<H4><A NAME="tth_sEc2.10.3">3</A>&nbsp;&nbsp;рПТСДПЛ ЧЩЪПЧБ ЛПОУФТХЛФПТПЧ Й ДЕУФТХЛФПТПЧ</H4>
рТЙ УПЪДБОЙЙ ЬЛЪЕНРМСТБ ЛМБУУБ ЧЩЪЩЧБЕФУС ЕЗП ЛПОУФТХЛФПТ. еУМЙ ЛМБУУ СЧМСЕФУС
РТПЙЪЧПДОЩН, ФП УОБЮБМБ ДПМЦЕО ВЩФШ ЧЩЪЧБО ЛПОУФТХЛФПТ ВБЪПЧПЗП ЛМБУУБ. еУМЙ
ВБЪПЧЩК ЛМБУУ СЧМСЕФУС РТПЙЪЧПДОЩН, ФП РТПГЕУУ ТЕЛХТУЙЧОП РТПДПМЦБЕФУС ДП ФЕИ
РПТ, РПЛБ ОЕ ВХДЕФ ДПУФЙЗОХФ ЛПТОЕЧПК ЛМБУУ. рТЙЧЕДЕН РТЙНЕТ ДМС РПСУОЕОЙС
УЛБЪБООПЗП. рХУФШ ЙНЕЕФУС ЙЕТБТИЙС ЛМБУУПЧ, Ч ЛБЦДПН ЙЪ ЛПФПТЩИ ПРТЕДЕМЕО
ЛПОУФТХЛФПТ.

<pre>
calss First {...};
class Second : public First {...};
class Third :public Second {...};
</pre>
<p>
фПЗДБ, РТЙ УПЪДБОЙЙ ЬЛЪЕНРМСТБ ЛМБУУБ Third ЛПОУФТХЛФПТЩ ЧЩЪЩЧБАФУС Ч
УМЕДХАЭЕН РПТСДЛЕ:

<pre>
First::First()
Second::Second()
Third::Third() .
</pre>
<p>
дЕУФТХЛФПТЩ ЧЩЪЩЧБАФУС Ч ПВТБФОПН РПТСДЛЕ РП УТБЧОЕОЙА У ЧЩЪПЧБНЙ
ЛПОУФТХЛФПТПЧ. дМС ОБЫЕЗП
РТЙНЕТБ РПТСДПЛ ЧЩЪПЧПЧ ДЕУФТХЛФПТПЧ ВХДЕФ УМЕДХАЭЙН:

<pre>
Third::~Third()
Second::~Second()
First::~First() .
</pre>
<p>
<H4><A NAME="tth_sEc2.10.4">4</A>&nbsp;&nbsp;рТЕПВТБЪПЧБОЙЕ ФЙРПЧ Ч РТПЙЪЧПДОЩИ ЛМБУУБИ</H4>
рТЙ НБОЙРХМЙТПЧБОЙЙ ПВЯЕЛФБНЙ, ОБИПДСЭЙНЙУС ОБ ТБЪОЩИ ХТПЧОСИ ЙЕТБТИЙЙ ДЕТЕЧБ
ОБУМЕДПЧБОЙС, ЛПНРЙМСФПТ C++ ЧЩРПМОСЕФ ОЕСЧОПЕ РТЕПВТБЪПЧБОЙЕ ФЙРПЧ.
тБУУНПФТЙН РТЙНЕТ.

<pre>
class A {};
class B : public A {};
void f(A* obj){}

void main () {
A a;
B b;
A* ap = new A; //ЧУЕ ОПТНБМШОП!
B* bp = new B; //ЧУЕ ОПТНБМШОП!
a = b; //ОЕСЧОПЕ РТЕПВТБЪПЧБОЙЕ ФЙРБ!
ap = bp; //ОЕСЧОПЕ РТЕПВТБЪПЧБОЙЕ ФЙРБ!
b = a; //ПЫЙВЛБ!
bp = ap; //ПЫЙВЛБ!
f(ap); //ЧУЕ ОПТНБМШОП!
f(bp); //ОЕСЧОПЕ РТЕПВТБЪПЧБОЙЕ ФЙРБ!
}
</pre>
<p>
ч РТЙЧЕДЕООПН РТЙНЕТЕ ПЫЙВЛЙ ЧПЪОЙЛБАФ ЙЪ-ЪБ ФПЗП, ЮФП ЛПНРЙМСФПТ ОЕ НПЦЕФ
РТЕПВТБЪПЧБФШ ПВЯЕЛФ ФЙРБ A Ч ПВЯЕЛФ ФЙРБ B, ФБЛ ЛБЛ Ч ПВЯЕЛФЕ ФЙРБ A ОЕФ
ОЙЛБЛПК ЮБУФЙ ПФ ПВЯЕЛФБ ФЙРБ B.

<p>
<H4><A NAME="tth_sEc2.10.5">5</A>&nbsp;&nbsp;тБЪТЕЫЕОЙЕ ПВМБУФЙ ЧЙДЙНПУФЙ</H4>
еУМЙ ЙНС РЕТЕНЕООПК ЙМЙ ЖХОЛГЙЙ Ч ВБЪПЧПН ЛМБУУЕ РЕТЕПВЯСЧМСЕФУС Ч РТПЙЪЧПДОПН
ЛМБУУЕ, ФП ЙНС Ч РТПЙЪЧПДОПН ЛМБУУЕ РПДБЧМСЕФ ЙНС Ч ВБЪПЧПН ЛМБУУЕ, ОБРТЙНЕТ

<pre>
class A {
public:
int f() {return 1;}
};
class B : public A {
int f() {return 2;}
};
void main() {
A a; B b;
int i = a.f(); // i = 1
int j = b.f(); // j = 2
}
</pre>
<p>
дМС ТБЪТЕЫЕОЙС ЧЙДЙНПУФЙ РЕТЕПРТЕДЕМЕООЩИ ЮМЕОПЧ ВБЪПЧПЗП ЛМБУУБ ОЕПВИПДЙНП
РТЙНЕОСФШ ПРЕТБФПТ ТБЪТЕЫЕОЙС ЧЙДЙНПУФЙ:

<pre>
&lt;ЙНС ЛМБУУБ&#62;::&lt;ЙДЕОФЙЖЙЛБФПТ ЙЪ ЛМБУУБ&#62; .
</pre>
<p>
дМС РТЕДЩДХЭЕЗП РТЙНЕТБ ЧЩЪЧБФШ ЖХОЛГЙА-ЮМЕО ЙЪ ЛМБУУБ A Х ПВЯЕЛФБ ФЙРБ B
НПЦОП УМЕДХАЭЙН ПВТБЪПН:

<pre>
int j = b.A::f(); // j = 1
</pre>
<p>
<H4><A NAME="tth_sEc2.10.6">6</A>&nbsp;&nbsp;нОПЦЕУФЧЕООПЕ ОБУМЕДПЧБОЙЕ</H4>
ч у++ ЧПЪНПЦОП УПЪДБОЙЕ РТПЙЪЧПДОПЗП ЛМБУУБ
ПФ ОЕУЛПМШЛЙИ ВБЪПЧЩИ ЛМБУУПЧ. ьФП ОПУЙФ ОБЪЧБОЙЕ
НОПЦЕУФЧЕООПЗП ОБУМЕДПЧБОЙС. рТПЙЪЧПДОЩН ЛМБУУПН ОБУМЕДХАФУС
ДБООЩЕ Й НЕФПДЩ ПФ ЛМБУУПЧ ТПДЙФЕМЕК. уЙОФБЛУЙУ НОПЦЕУФЧЕООПЗП
ОБУМЕДПЧБОЙС ЧЩЗМСДЙФ УМЕДХАЭЙН ПВТБЪПН:

<pre>
class D: [access_modifier] B1, [access_modifier] B2,...{...};
</pre>
<p>
access modifier - НПДЙЖЙЛБФПТ РТБЧ ДПУФХРБ, ЛБЛ Й РТЙ РТПУФПН ОБУМЕДПЧБОЙЙ
НПЦЕФ ЙНЕФШ ЪОБЮЕОЙЕ public ЙМЙ private, РП ХНПМЮБОЙА private.
рТЙ НОПЦЕУФЧЕООПН ОБУМЕДПЧБОЙЙ РПТСДПЛ ЧЩЪПЧБ ЛПОУФТХЛФПТПЧ Й ДЕУФТХЛФПТПЧ
БОБМПЗЙЮЕО РТПУФПНХ ОБУМЕДПЧБОЙА.

<p>
<H4><A NAME="tth_sEc2.10.7">7</A>&nbsp;&nbsp;чЙТФХБМШОЩЕ ВБЪПЧЩЕ ЛМБУУЩ</H4>
йОПЗДБ РТЙ НОПЦЕУФЧЕООПН ОБУМЕДПЧБОЙЙ ЧПЪОЙЛБАФ УЙФХБГЙЙ, ЛПЗДБ ОХЦЕО
ПРТЕДЕМЕООЩК ЛПОФТПМШ ОБД ФЕН, ЛБЛ ОБУМЕДХАФУС ВБЪПЧЩЕ ЛМБУУЩ. тБУУНПФТЙН
РТЙНЕТ.

<pre>
class A {
public:
int val;
};
class B : public A {...};
class C : public A {...};
class D : public B, public C {
public:
int Get_Val() {return val;} //ПЫЙВЛБ!
};
</pre>
<p>
ч ДБООПН РТЙНЕТЕ ДПУФХР Л ЮМЕОХ val ОЕПДОПЪОБЮЕО. лПНРЙМСФПТ ОЕ РПОЙНБЕФ ОБ
ЛБЛХА ЛПРЙА val УУЩМБФШУС Й РПЬФПНХ РТПУЙЗОБМЙЪЙТХЕФ ПЫЙВЛХ.
дМС ТБЪТЕЫЕОЙС ОЕПДОПЪОБЮОПУФЙ
УМЕДХЕФ МЙВП ЙУРПМШЪПЧБФШ ПРЕТБФПТ ТБЪТЕЫЕОЙС ЧЙДЙНПУФЙ, ОБРТЙНЕТ

<pre>
int Get_Val() { return B::val; }
</pre>
<p>
МЙВП ЙУРПМШЪПЧБФШ ЧЙТФХБМШОЩЕ ВБЪПЧЩЕ ЛМБУУЩ.

<p>
рПЛБЦЕН ОБ РТЙНЕТЕ ЛБЛ ЬФП НПЦОП УДЕМБФШ.
пРТЕДЕМЙН ДЕТЕЧП ЙЕТБТИЙЙ
УМЕДХАЭЙН ПВТБЪПН:

<pre>
class A {
public:
int val;
};
class B : public virtual A {...};
class C : public virtual A {...};
class D : public B, public C {
public:
int Get_Val() {return val;} //ЧУЕ ОПТНБМШОП!
};
</pre>
<p>
ч ЛБЛПН НЕУФЕ УФПЙФ ЛМАЮЕЧПЕ УМПЧП virtual - ДП public ЙМЙ РПУМЕ, ОЕ ЙНЕЕФ
ЪОБЮЕОЙС. пВЯСЧМЕОЙЕ ВБЪПЧПЗП ЛМБУУБ ЧЙТФХБМШОЩН ЪБУФБЧМСЕФ ЛПНРЙМСФПТ
РТЙОЙНБФШ ФПМШЛП ПДОХ ЛПРЙА ВБЪПЧПЗП ЛМБУУБ Ч ПВЯСЧМЕОЙЙ РТПЙЪЧПДОПЗП. рПЬФПНХ
ФПМШЛП ПДОБ ЛПРЙС ЮМЕОБ val РТЙУХФУФЧХЕФ Ч ЛМБУУЕ D Й ПРЕТБФПТБ ТБЪТЕЫЕОЙС
ПВМБУФЙ ЧЙДЙНПУФЙ, ДМС ХФПЮОЕОЙС, ОЕ ФТЕВХЕФУС. чЙТФХБМШОЩЕ ВБЪПЧЩЕ ЛМБУУЩ
ЙУРПМШЪХАФУС ФПМШЛП РТЙ НОПЦЕУФЧЕООПН ОБУМЕДПЧБОЙЙ.

<p>
рТБЧЙМБ, РП ЛПФПТЩН РТПЙЪЧПДОЩК ЛМБУУ ОБУМЕДХЕФ БФТЙВХФЩ
ДПУФХРБ ВБЪПЧПЗП ЛМБУУБ ЪБЧЙУСФ ПФ НПДЙЖЙЛБФПТБ РТБЧ ДПУФХРБ Й
РТЙЧПДСФУС ОЙЦЕ.

<p>
<H3><A NAME="tth_sEc2.11">2.11</A>&nbsp;&nbsp;хЛБЪБФЕМЙ ОБ ЮМЕОЩ ДБООЩИ. "дТХЪШС" ЛМБУУПЧ (friend)</H3>
йОПЗДБ, ДМС РПЧЩЫЕОЙС РТПЙЪЧПДЙФЕМШОПУФЙ БМЗПТЙФНПЧ ФТЕВХЕФУС РПМХЮЙФШ РТСНПК
ДПУФХР Л ЮБУФОЩН ЮМЕОБН ЛМБУУБ.
тБООЕ ЗПЧПТЙМПУШ, ЮФП ДПУФХР Л ЮБУФОЩН ЮМЕОБН ЛМБУУБ ЙНЕАФ ФПМШЛП
ЖХОЛГЙЙ-ЮМЕОЩ ДБООПЗП ЛМБУУБ. пДОБЛП ЬФП ОЕ УПЧУЕН ФБЛ. рПМХЮЙФШ ДПУФХР Л
ТБЪДЕМХ private ЛМБУУБ НПЦОП Й ЮЕТЕЪ ХЛБЪБФЕМЙ. рТЙЧЕДЕН РТЙНЕТ ПВЯСЧМЕОЙС
ХЛБЪБФЕМС ОБ ЮМЕО ДБООЩИ ЛМБУУБ.

<pre>
clБss Example {
private:
int val;
...
public:
...
};
//ЖХОЛГЙС, ХУФБОБЧМЙЧБАЭБС ЪОБЮЕОЙЕ
void Set_Val(Example& obj) {
//ПВЯСЧЙФШ ХЛБЪБФЕМШ ОБ ЮМЕО ДБООЩИ
int Example::*ip = &Example::val;
obj.*ip = 3; //ХУФБОПЧЙФШ ЪОБЮЕОЙЕ
}
void main() {
Example obj1,obj2;
Set_Val(obj1); //obj1.val = 3
Set_Val(obj2); //obj2.val = 3
}
</pre>
<p>
ч ДБООПН РТЙНЕТЕ Ч ip ЪБРПНЙОБЕФУС УНЕЭЕОЙЕ ОБ РЕТЕНЕООХА val, ПФОПУЙФЕМШОП
ОБЮБМБ ПВЯЕЛФБ ЛМБУУБ Example. пФНЕФЙН, ЮФП ip ЧЙДЙН ФПМШЛП У ПВЯЕЛФБНЙ ФЙРБ
Example. юЕТЕЪ ХЛБЪБФЕМЙ ДПУФХРОЩ ЛБЛ public, protected ФБЛ Й private ЮМЕОЩ
ДБООЩИ. пДОБЛП ВПМЕЕ ФТБДЙГЙПООЩК ДПУФХР Л ЮБУФОЩН ЮМЕОБН ЛМБУУБ
ПУХЭЕУФЧМСЕФУС РХФЕН ПРТЕДЕМЕОЙС "ДТХЪЕК" ЛМБУУБ.

<p>
Friend F ЛМБУУБ X - ЬФП ЖХОЛГЙС ЙМЙ ЛМБУУ, ЛПФПТЩК ОЕ СЧМССУШ НЕФПДПН X,
ЙНЕЕФ РПМОЩЕ РТБЧБ ДПУФХРБ Л private Й protected ЮМЕОБН X.
жХОЛГЙЙ "ДТХЪШС" ОЕ ЪБЧЙУСФ ПФ ЙИ РПЪЙГЙЙ Ч ЛМБУУЕ Й
УРЕГЙЖЙЛБФПТПЧ РТБЧ ДПУФХРБ.
оБРТЙНЕТ:

<pre>
class X {
int i; // private ПФОПУЙФ. X
// friend_funУ() - ОЕ СЧМСЕФУС private
friend void friend_func(X*,int);
public:
void membr_func(int);
};

// ДПУФХР Л private i
void friend_func(X* pX,int a) { pX-&#62;i = a; }
void X::member_func(int a) {i = a;}
</pre>
<p>
пФНЕФЙН ТБЪМЙЮЙС Ч ЧЩЪПЧБИ ЖХОЛГЙК.

<pre>
...
X x; //ПРТЕДЕМЕОЙЕ ЬЛЪЕНРМСТБ ЛМБУУБ
friend_func(&x, 6); //ЧЩЪПЧ friend - ЖХОЛГЙЙ
x.member_func(6); //ЧЩЪПЧ НЕФПДБ
...
</pre>
<p>
жХОЛГЙЙ "ДТХЪШС" РПМХЮБАФ ДПУФХР Л ЮМЕОБН ЛМБУУБ ЮЕТЕЪ ХЛБЪБФЕМШ,
РЕТЕДБЧБЕНЩК ЙН СЧОП.

<p>
нПЦОП УДЕМБФШ ЧУЕ ЖХОЛГЙЙ ЛМБУУБ Y ДТХЪШСНЙ ЛМБУУБ X Ч ПДОПН ПВЯСЧМЕОЙЙ.

<pre>
class Y; // ОЕ РПМОПЕ ПВЯСЧМЕОЙЕ ЛМБУУБ
class X {
friend Y;
int i;
void member_func();
};

class Y { // РПМОПЕ ПВЯСЧМЕОЙЕ
void friend_X1(X&);
void friend_X2(X*);
...
};
</pre>
<p>
жХОЛГЙЙ Ч Y СЧМСАФУС ДТХЪШСНЙ X, ИПФС ПОЙ ОЕ ЙНЕАФ УРЕГЙЖЙЛБФПТПЧ friend.
пФДЕМШОЩЕ НЕФПДЩ X НПЗХФ ВЩФШ ДТХЪШСНЙ Y, ОБРТЙНЕТ.

<pre>
class X {
...
void member_func X();
...
};

class Y {
...
int i;
friend void X::member_funcX();
...
};
</pre>
<p>
дТХЦВБ ОЕ ФТБОЪЙФЙЧОБ: ЕУМЙ X ДТХЗ Y, Б Y ДТХЗ Z, ФП ЬФП ОЕ ПЪОБЮБЕФ, ЮФП X
ДТХЗ Z. "дТХЦВБ" ОЕ ОБУМЕДХЕФУС. дТХЪШС ЧБЫЙИ ТПДЙФЕМЕК - ОЕ ПВСЪБФЕМШОП ЧБЫЙ
ДТХЪШС.

<p>
<H3><A NAME="tth_sEc2.12">2.12</A>&nbsp;&nbsp;чЙТФХБМШОЩЕ ЖХОЛГЙЙ</H3>
ч у++ РПМЙНПТЖЙЪН ТЕБМЙЪХЕФУС ОБ ВБЪЕ ЧЙТФХБМШОЩИ ЖХОЛГЙК.

<p>
чЙТФХБМШОБС ЖХОЛГЙС Ч ЛМБУУЕ ПРТЕДЕМСЕФУС У РПНПЭША ЛМАЮЕЧПЗП УМПЧБ virtual.
лМАЮЕЧПЕ УМПЧП virtual ПЪОБЮБЕФ, ЮФП ЖХОЛГЙС НПЦЕФ ЙНЕФШ ТБЪМЙЮОЩЕ ЧЕТУЙЙ Ч
ТБЪМЙЮОЩИ
РТПЙЪЧПДОЩИ ЛМБУУБИ Й ЮФП ОБКФЙ УППФЧЕФУФЧХАЭХА ЧЕТУЙА ДМС ЛБЦДПЗП ЧЩЪПЧБ
ЖХОЛГЙЙ - ЬФП ЪБДБЮБ ЛПНРЙМСФПТБ.
фЙР ЖХОЛГЙЙ ПРТЕДЕМСЕФУС Ч ВБЪПЧПН ЛМБУУЕ Й ОЕ НПЦЕФ ВЩФШ РЕТЕПВЯСЧМЕО Ч
РТПЙЪЧПДОПН ЛМБУУЕ. чЙТФХБМШОБС ЖХОЛГЙС ДПМЦОБ ВЩФШ ПРТЕДЕМЕОБ ДМС ЛМБУУБ, Ч
ЛПФПТПН ПОБ ЧРЕТЧЩЕ ПВЯСЧМЕОБ. уЙОФБЛУЙУ ПРТЕДЕМЕОЙС
ЧЙТФХБМШОПК ЖХОЛГЙЙ РТЙЧЕДЕО Ч УМЕДХАЭЕН РТЙНЕТЕ.

<pre>
class A {
public:
virtual void Show() { printf("\nClass A"); }
};
class B : public A {
public:
virtual void Show() { printf("\nClass B"); }
};
void Dislpay(A* a) {
a-&#62;Show(); //ПРТЕДЕМСЕФУС ЧП ЧТЕНС ЧЩРПМОЕОЙС
}
void main() {
A* ap = new A;
B* bp = new B;
ap-&#62;Show(); //оБРЕЮБФБЕФ:Class A
bp-&#62;Show(); //оБРЕЮБФБЕФ:Class B
Display(ap);//оБРЕЮБФБЕФ:Class A
Display(bp);//оБРЕЮБФБЕФ:Class B
}
</pre>
<p>
ч ДБООПН РТЙНЕТЕ ЛМБУУ B ОБУМЕДХЕФУС ПФ ЛМБУУБ A Й РЕТЕПРТЕДЕМСЕФ ЖХОЛГЙА
Show(), ПВЯСЧМЕООХА Ч ВБЪПЧПН ЛМБУУБ ЛБЛ ЧЙТФХБМШОХА. рПЬФПНХ, РТЙ ЧЩЪПЧЕ
ЖХОЛГЙЙ Display(bp) РЕЮБФБЕФУС УФТПЛБ "Class B", ОЕУНПФТС ОБ ФП, ЮФП
РТПЙУИПДЙФ ОЕСЧОПЕ РТЕПВТБЪПЧБОЙЕ ФЙРБ ХЛБЪБФЕМС bp Ч ХЛБЪБФЕМШ ОБ ПВЯЕЛФ
ФЙРБ A.

<p>
фБЛЙН ПВТБЪПН, ЙОФЕТРТЕФБГЙС ЧЩЪПЧБ ЧЙТФХБМШОПК ЖХОЛГЙЙ ЪБЧЙУЙФ ПФ ПВЯЕЛФБ,
ДМС ЛПФПТПЗП ПОБ ЧЩЪЩЧБЕФУС. йОФЕТРТЕФБГЙС ЧЩЪПЧБ ОЕ ЧЙТФХБМШОПК ЖХОЛГЙЙ
ЪБЧЙУЙФ ПФ ФЙРБ ХЛБЪБФЕМС, ПВПЪОБЮБАЭЕЗП ЬФПФ ПВЯЕЛФ. рТПЙММАУФТЙТХЕН
УЛБЪБООПЕ РТЙНЕТПН.

<pre>
struct base {
virtual void vf();
void f();
};

class derived : public base {
public:
void vf();
void f();
};

// ЙУРПМШЪПЧБОЙЕ
derive d;
base* pb = &d; // pb - ХЛБЪБФЕМШ ОБ ВБЪПЧЩК ФЙР
pb-&#62;vf(); // ЧЩЪЩЧБЕФУС derived::vf
pb-&#62;f(); // ЧЩЪЩЧБЕФУС base::f
</pre>
<p>
чЙТФХБМШОБС ЖХОЛГЙС ОЕ НПЦЕФ ЙНЕФШ УРЕГЙЖЙЛБФПТБ friend. жХОЛГЙС f Ч
ЛМБУУЕ РТПЙЪЧПДОПН ПФ ЛМБУУБ, Ч ЛПФПТПН ЕУФШ ЧЙТФХБМШОБС ЖХОЛГЙС f, УБНБ РП УЕВЕ
ТБУУНБФТЙЧБЕФУС ЛБЛ ЧЙТФХБМШОБС. чЙТФХБМШОХА ЖХОЛГЙА ПРТЕДЕМЕООХА Ч ВБЪПЧПН
ЛМБУУЕ НПЦОП ОЕ ПРТЕДЕМСФШ Ч РТПЙЪЧПДОПН. ч ФБЛПН УМХЮБЕ ЧП ЧУЕИ ЧЩЪПЧБИ
ЙУРПМШЪХЕФУС ЖХОЛГЙС, ПРТЕДЕМЕООБС ДМС ВБЪПЧПЗП ЛМБУУБ.

<p>
<H3><A NAME="tth_sEc2.13">2.13</A>&nbsp;&nbsp;юЙУФЩЕ ЖХОЛГЙЙ Й БВУФТБЛФОЩЕ ЛМБУУЩ</H3>
чЙТФХБМШОБС ЖХОЛГЙС Ч ВБЪПЧПН ЛМБУУЕ, ЛБЛ Й ЧУЕ НЕФПДЩ ВБЪПЧПЗП ЛМБУУБ,
ДПМЦОБ ВЩФШ ПРТЕДЕМЕОБ, Б ЕУМЙ ОЕ ПРТЕДЕМЕОБ, ФП ПВЯСЧМЕОБ ЛБЛ ЖХОЛГЙС ВЕЪ
РПВПЮОПЗП ЬЖЖЕЛФБ (ЮЙУФБС).
рТЙНЕТ.

<pre>
class B {
virtual void vf(int) = 0; // = 0 ПЪОБЮБЕФ ЮЙУФХА ЖХОЛГЙА
};
</pre>
<p>
ч ЛМБУУЕ, РТПЙЪЧПДОПН ПФ ФБЛПЗП ВБЪПЧПЗП ЛМБУУБ, ЛБЦДБС ЮЙУФБС ЖХОЛГЙС
ДПМЦОБ ВЩФШ ПРТЕДЕМЕОБ ЙМЙ РЕТЕПВЯСЧМЕОБ Ч ЛБЮЕУФЧЕ "ЮЙУФПК".
чЙТФХБМШОЩЕ ЖХОЛГЙЙ ЪБУФБЧМСАФ ПРТЕДЕМЕООЩН ПВТБЪПН ТБУРМБЮЙЧБФШУС ЪБ УЧПА
ХОЙЧЕТУБМШОПУФШ: ЛБЦДЩК ПВЯЕЛФ РТПЙЪЧПДОПЗП ЛМБУУБ ДПМЦЕО УПДЕТЦБФШ ХЛБЪБФЕМШ
ОБ ФБВМЙГХ ЖХОЛГЙК У ФЕН, ЮФПВЩ ЧП ЧТЕНС ЧЩРПМОЕОЙС ЧЩЪЧБФШ ОХЦОХА (РПЪДОЕЕ
УЧСЪЩЧБОЙЕ).

<p>
бВУФТБЛФОЩН ЛМБУУПН (бл) - ОБЪЩЧБЕФУС ЛМБУУ У ЛБЛ НЙОЙНХН ПДОПК ЮЙУФПК ЧЙТФХБМШОПК
ЖХОЛГЙЕК. бл - НПЦЕФ ЙУРПМШЪПЧБФШУС ФПМШЛП Ч ЛБЮЕУФЧЕ ВБЪПЧПЗП ДМС ДТХЗЙИ
ЛМБУУПЧ. пВЯЕЛФЩ бл УПЪДБОЩ ВЩФШ ОЕ НПЗХФ. бл ОЕ НПЦЕФ ВЩФШ ЙУРПМШЪПЧБО ЛБЛ ФЙР
БТЗХНЕОФБ Й ЛБЛ ФЙР ЧПЪЧТБФБ ЖХОЛГЙЙ.

<p>
рТЙНЕТ.

<pre>

class shape { //БВУФТБЛФОЩК ЛМБУУ
point center;
public:
where() {return center;}
...
virtual void show() = 0;
virtual void hide() = 0;
...
};
//ЙУРПМШЪПЧБОЙЕ
shape x; // ПЫЙВЛБ : РПРЩФЛБ УПЪДБОЙС ПВЯЕЛФБ бл
shape* sptr; // ХЛБЪБФЕМШ ОБ бл ДПРХУФЙН
shape f(int); // ПЫЙВЛБ : бл ОЕ НПЦЕФ ВЩФШ ФЙРПН ЧПЪЧТБФБ
int q(shape s); // ПЫЙВЛБ : бл ОЕ НПЦЕФ ВЩФШ ФЙРЙН БТЗХНЕОФБ
shape& h(shape&); // УУЩМЛЙ ДПРХУФЙНЩ
</pre>
<p>
нЕФПДЩ ЛМБУУБ НПЗХФ ВЩФШ ЧЩЪЧБОЩ ЙЪ ЛПОУФТХЛФПТБ бл, ОП ЧЩЪПЧ ЮЙУФПК ЧЙТФХБМШОПК
ЖХОЛГЙЙ ОЕРПУТЕДУФЧЕООП ЙМЙ ЛПУЧЕООП РТЙЧПДЙФ Л ПЫЙВЛЕ.


Соседние файлы в предмете Операционные системы