2.8. Òèï êëàñ
Òèïúò êëàñ å åäèí
äåôèíèðàí îò ïîòðåáèòåëÿ äàííîâ òèï, êîéòî ïðåäñòàâëÿâà ñúâêóïíîñò îò èìåíóâàíè
åëåìåíòè îò äàííè, ìîæå è ðàçíîòèïíè, êàêòî è ìíîæåñòâî îò îïåðàöèè, ïðîåêòèðàíè
äà îáðàáîòâàò òåçè äàííè. Îáèêíîâåíî, åäèí êëàñ ñå èçïîëçóâà çà âúâåæäàíå íà íîâ
òèï äàííè â ïðîãðàìàòà; äîáðå ïðîåêòèðàíèÿò êëàñ ìîæå äà áúäå èçïîëçâàí òîëêîâà
ëåñíî, êîëêîòî è êîéòî è äà å äðóã ïðåäâàðèòåëíî äåôèíèðàí òèï äàííè. Êëàñîâåòå
ñå ðàçãëåæäàò ïîäðîáíî â ãëàâè îò 5 äî 8. Ïîíåæå òå ïðåäñòàâëÿâàò ôóíäàìåíòàëíà
êîíöåïöèÿ çà Ñ++ â òîçè ðàçäåë ñå äàâàò îáÿñíåíèÿçà òÿõ íà îñíîâàòà íà åäèí
îáøèðåí ïðèìåð -ïðîåêòèðàíåòî íà êëàñà íà öåëèòå ìàñèâè.
×åòèðè îò
íàé-íåïðèÿòíèòå àñïåêòè íà ïðåäâàðèòåëíî äåôèíèðàíèÿ òèï ìàñèâ ñà:
1.
Ðàçìåðúò íà ìàñèâà òðÿáâà äà áúäå êîíñòàíòåí èçðàç. Ïðîãðàìèñòúò, îáà÷å, íå
âèíàãè çíàå ïî âðåìå íà êîìïèëàöèÿ êîëêî ãîëÿì ìàñèâ ìó å íåîáõîäèì. Åäèí ïî
ãúâêàâ òèï ìàñèâ áè ðàçðåøèë íà ïðîãðàìèñòà äà îïðåäåëÿ èëè ïðîìåíÿ ðàçìåðíîñòòà
íà ìàñèâà ïî âðåìå íà èçïúëíåíèå íà ïðîãðàìàòà.
2. Íå ñúùåñòâóâà ïðîâåðêà
äàëè èíäåêñúò íà ìàñèâà íàäõâúðëÿ ðàçìåðà ìó. Ñëåäâàùèÿò ïðîãðàìåí ôðàãìåíò,
íàïðèìåð, èçïîëçóâà ãðåøíà êîíñòàíòà çà îãðàíè÷èòåë íà ãîðíàòà ãðàíèöà íà ìàñèâ
ïðè èíèöèàëèçàöèÿòà ìó. Âúïðåêè, ÷å ïðîãðàìàòà ïðèêëþ÷âà óñïåøíî, ðåçóëòàòèòå
âåðîÿòíî ùå áúäàò íåïðàâèëíè ïîðàäè èçìåíåíèåòî íà ïàìåòòà èçâúí ãðàíèöèòå íà
ìàñèâà.
const int SIZE = 25;
const int SZ = 10;
int ia[ SZ ];
//
...
main() {
// not caugth during program execution
for ( int i =
0; i < SIZE; ++i )
ia[ i ] = i;
// ...}
3. Êîãàòî ìàñèâ ñå
èçïðàùà êàòî ïàðàìåòúð íà ôóíêöèÿ å íåîáõîäèìî äà ñå óêàçâà è ðàçìåðà ìó.
Ìàñèâèòå - àðãóìåíòè áèõà ìîãëè äà áúäàò èçïîëçóâàíè ïî-ëåñíî àêî ðàçìåðà èì å
èçâåñòåí.
4. Áè áèëî äîáðå äà ìîæåì äà êîïèðàìå åäèí ìàñèâ â äðóã êàòî
èçïîëçóâàìå ñàìî åäèí îïåðàòîð. Íàïðèìåð:
int ia[ SZ ];
int ia2[ SZ ]
= ia; // not supported
 òîçè ðàçäåë ñå äåôèíèðà êëàñ, êîéòî ïîääúðæà
òåçè ÷åòèðè äîïúëíèòåëíè ñâîéñòâà íà ìàñèâ. Îñâåí òîâà ñèíòàêñèñúò çà èçïîëçâàíå
íà îáåêòèòå îò êëàñ ìàñèâ ùå áúäå òîëêîâà ïðîñò, êîëêîòî è íà òðàäèöèîííèÿ
ìàñèâ. Ïðîåêòèðàíåòî íà òèïà êëàñ ñå îáñúæäà ïîäðîáíî â ãëàâà 1. Òóê íèå ïðîñòî
ùå ïðåäñòàâèì äåôèíèöèÿòà íà êëàñà ìàñèâ è ùå îáñúäèì ðåàëèçàöèÿòà ìó. Eòî êàê
èçãëåæäà òÿ:
const ArraySize = 24; // default size
class IntArray
{
public;
// operations performed on arrays
IntArray( int sz =
ArraySize );
IntArray( const IntArray& );
~IntArray() { delete ia;
}
IntArray& operator = ( const IntArray& );
int& operator[](
int );
int getSize() { return size; )
protected:
// internal data
representation
int size;
int *ia;
};
Åäíà äåôèíèöèÿ íà êëàñ ñå
ñúñòîè îò äâå ÷àñòè: ãëàâà íà êëàñ, ñúñòîÿùà ñå îò êëþ÷îâàòà äóìà class è èìå, è
òÿëî, çàòâîðåíî âúâ ôèãóðíè ñêîáè è çàâúðøâàùî ñ òî÷êà è çàïåòàÿ. Èìåòî íà êëàñà
ïðåäñòàâÿ åäèí íîâ òèï äàííè. Òîé ìîæå äà ñëóæè çà ñïåöèôèêàòîð íà òèï ïî ñúùèÿ
íà÷èí, ïî êîéòî è âãðàäåíèòå òèïîâè ñïåöèôèêàòîðè. Ñëåäâàò íÿêîëêî ïðèìåðà çà
äåôèíèðàíå íà ïðîìåíëèâè îò êëàñà IntArray:
const int SZ = 10;
int
mySize;
int ia[SZ]; // predefined array
IntArray myArray ( mySize ), iA(
SZ );
IntArray *pA = &myArray;
InrArray iA2; // 24 elements by
default
Òÿëîòî íà êëàñà ñúäúðæà íÿêîëêî äåôèíèöèè. Åëåìåíòèòå íà êëàñà
ïðåäñòàâÿò îïåðàöèèòå, êîèòî ìîãàò äà áúäàò èçïúëíÿâàíè îò êëàñà, è äàííèòå,
íåîáõîäèìè çà îïðåäåëÿíå íà ñâîéñòâàòà ìó.  íàøèÿ ñëó÷àé öåëèÿò ìàñèâ ñå
ïðåäñòàâÿ ÷ðåç äâà åëåìåíòà äàííè:
1. size, êîéòî ñúäúðæà áðîÿ íà
åëåìåíòèòå íà ìàñèâà.
2. ia, êîéòî àäðåñèðà ïàìåòòà, êúäåòî ñå ðàçïîëàãàò
åëåìåíòèòå.
Êëþ÷îâèòå äóìè protected è public êîíòðîëèðàò äîñòúïà äî
åëåìåíòèòå íà êëàñà. Åëåìåíòèòå, îïèñàíè â ðàçäåëà public íà êëàñà ñà äîñòúïíè
îò ïðîèçâîëíî ìÿñòî íà ïðîãðàìèòå. Åëåìåíòèòå, íàìèðàùè ñå â ðàçäåëà protcted ñà
äîñòúïíè ñàìî ÷ðåç ÷ëåí-ôóíêöèèòå íà êëàñà IntArray. Òîâà îãðàíè÷åíèå âúðõó
äîñòúïà å èçâåñòíî êàòî ñêðèâàíå íà èíôîðìàöèÿ.
Èçîáùî, åäèíñòâåíî íà
÷ëåí-ôóíêöèèòå íà êëàñà å ðàçðåøåí äîñòúïà äî äàííîâèòå ìó åëåìåíòè. Òîâà èìà
äâå îñíîâíè ïðåäèìñòâà:
1. Êîãàòî ñå íàëàãà ïðîìÿíà íà ïðåäñòàâÿíåòî íà
äàííèòå â êëàñà ñå ïðîìåíÿò ñàìî ôóíêöèèòå íà êëàñà, à íå è ïîòðåáèòåëñêèòå
ïðîãðàìè, êîèòî ãî èçïîëçóâàò.
2. Êîãàòî ñå ïîÿâè ãðåøêà ïðè îáðàáîòêàòà
íà åëåìåíòèòå îò äàííè íà êëàñà ìîæå äà áúäå ïðåãëåäàíî ñàìî ìàëêî ìíîæåñòâî îò
ôóíêöèè, îïèñàíè â íåãî, âìåñòî äà ñå ïðåãëåæäà öÿëàòà ïðîãðàìà.
Òðè îò
÷ëåí-ôóíêöèèòå íà IntArray - çà èíèöèàëèçàöèÿ è îñâîáîæäàâàíå - èçïîëçóâàò èìåòî
íà êëàñà êàòî ñâîå èìå. Âúïðåêè, ÷å ñà äåôèíèðàíè îò ïðîåêòàíòà íà êëàñà, òå ñå
èçâèêâàò àâòîìàòè÷íî îò êîìïèëàòîðà. Ôóíêöèÿòà, ïðåäøåñòâàíà îò òèëäà (“~”),
ò.å. ôóíêöèÿòà çà îñâîáîæäàâàíå, ñå íàðè÷à äåñòðóêòîð. Äðóòèòå äâå ôóíêöèè
ñëóæàò çà èíèöèàëèçàöèÿ; òå ñå íàðè÷àò êîíñòðóêòîðè.
Êîíñòðóêòîðúò
IntArray iA2;
îáðàáîòâà îáè÷àéíèòå äåêëàðàöèè. sz
ïðåäñòàâÿ ðàçìåðà íà ìàñèâà, æåëàí îò ïîòðåáèòåëÿ. Àêî ïîòðåáèòåëÿò íå çàäàäå
òàêúâ ðàçìåð, ïî ïîäðàçáèðàíå ìàñèâúò ùå ñúäúðæà ArraySize íà áðîé åëåìåíòè.
Òàêúâ å ðàçìåðà íà iA2 â äåôèíèöèÿòà:
IntArray iA2;
Åòî åäíà
ðåàëèçàöèÿ íà ïðåäñòàâèòåë íà IntArray(). Òîé ñå âúâåæäà ÷ðåç îïåðàòîðà new.
Òîçè îïåðàòîð îáðàáîòâà äèíàìè÷íîòî ðàçïðåäåëåíèå íà ïàìåòòà. Ðàçäåë 4.1
ðàçãëåæäà îïåðàòîðà new.
IntArray::IntArray( int sz ) {
size =
sz;
// allocate an integer array of size
// and set ia to point to
it
ia = new int[ size ];
// initialize array
for ( int i =
0; i < sz; ++i )
ia[ i ] = 0;
}
Îïåðàòîðúò äâå äâóåòî÷èÿ :: ñå
íàðè÷à scope îïåðàòîð (çà îáõâàò). Òîé óêàçâà íà êîìïèëàòîðà, ÷å ôóíêöèÿòà
IntArray å äåôèíèðàíà êàòî ÷ëåí íà êëàñà IntArray. Ôóíêöèèòå, êîèòî ñà åëåìåíò
íà äàäåí êëàñ èìàò äîñòúï äà ñîáñòâåíèòå ñè êëàñîâè åëåìåíòè äèðåêòíî. Êîãàòî
íàïèøåì
size = sz;
size ñå îòíàñÿ äî äàííè èçìåæäó êëàñîâèòå
÷ëåí-ïðîìåíëèâè, çà êîèòî å áèëà èçâèêàíà ÷ëåí-ôóíêöèÿòà.  íàøèÿ ïðèìåð, size å
÷ëåí-äàííè íà iA2.
Âòîðèÿò ïðåäñòàâèòåë íà IntArray() îáðàáîòâà
èíèöèàëèçàöèÿòà íà åäèí îáåêò îò òèï IntArray ÷ðåç äðóã. Òÿ ñå èçâèêâà
àâòîìàòè÷íî, êîãàòî ñå ñðåùíå äåôèíèöèÿ îò âèäà:
IntArray iA3 =
myArray;
Òàçè ðåàëèçàöèÿ èçãëåæäà êàòî äðóãàòà, ñ èçêëþ÷åíèå íà òîâà, ÷å
ñå êîïèðàò åëåìåíòèòå è ðàçìåðà íà ìàñèâà.
IntArray::IntArray( const
IntArray &iA ) {
size = iA.size;
ia = new int[ size ];
for ( int i
= 0; i < size; ++i )
ia[ i ] = iA.ia[ i ];
}
Çà äà ñå îñèãóðè
äîñòúï äî ïîäõîäÿùàòà ïðîìåíëèâà â êëàñà òðÿáâà äà ñå èçïîëçóâà îïåðàòîð çà
èçáîð íà ÷ëåí:
1. Îïåðàòîðúò òî÷êà (“.”) ñå èçïîëçóâà, êîãàòî
ïðîãðàìèñòúò èñêà äîñòúï äî ÷ëåí-äàííè èëè ÷ëåí-ôóíêöèÿ íà ïîäõîäÿùèÿ êëàñ íà
îáåêòà.
2. Îïåðàòîðúò ñòðåëêà (“->”) ñå èçïîëçóâà, êîãàòî ïðîãðàìèñòúò
èñêà äîñòúï äî ïîäõîäÿùèÿ êëàñ íà îáåêòà êàòî ñå èçïîëçóâà óêàçàòåë êúì êëàñ.
Íàïðèìåð, çíà÷åíèåòî íà èçðàçà
iA.size;
ìîæå äà áúäå ôîðìóëèðàíî
òàêà: Èçáåðè ÷ëåí-äàííèòå size îò êëàñà íà îáåêòà iA.
Ïðèñâîÿâàíåòî íà
ñòîéíîñòòà íà åäèí îáåêò îò òèï ìàñèâ ÷ðåç äðóã ñå îáðàáîòâà
òàêà:
IntArray& operator= ( IntArray& );
Ãîðåñïîìåíàòèÿò
îïåðàòîð å ÷àñò îò ìåõàíèçìà, êîéòî ïîçâîëÿâà íà êëàñà äà ïðåçàðåæäà çíà÷åíèåòî
íà Ñ++ îïåðàòîðèòå, êîãàòî òå ñå ïðèëàãàò êúì îáåêòè îò òèï êëàñ. (Ðàçäåë 6.3)
îáñúæäà ïîäðîáíî ïðåçàðåæäàíåòî íà êëàñîâèòå îïåðàòîðè). Åòî è ðåàëèçàöèÿòà íà
òàçè ôóíêöèÿ. Çàáåëåæåòå, ÷å òÿ äàâà íà ìàñèâà-íàçíà÷åíèå ðàçìåðà íà ìàñèâà, îò
êîéòî ñå êîïèðà.
IntArray& IntArray::Operator=( const
IntArray &iA ) {
delete ia; // free up existing memory
size = iA.size;
// resize target
ia = new int[ size ]; // get new memory
for ( int i = 0;
i < size; ++i )
ia[ i ] = iA.ia[ i ] ; // copy
return *this;
}
Âæ. Ðàçäåë 6.4 çà ïîâå÷å èíôîðìàöèÿ îòíîñíî îïåðàòîðà:
return
*this;
Ïðåçàðåäåíèÿò îïåðàòîð çà ïðèñâîÿâàíå ùå áúäå èçâèêâàí àâòîìàòè÷íî
âèíàãè, êîãàòî ñå ïðèñâîÿâà åäèí îáåêò îò òèï IntArray íà äðóã.
Íàïðèìåð,
ia2 = myArray;
Êëàñúò ìàñèâ íå áè ïðåäèçâèêâàë òàêúâ
ïðàêòè÷åñêè èíòåðåñ àêî ïîòðåáèòåëÿò íå ìîæå ëåñíî äà èíäåêñèðà åäèí êëàñîâ
îáåêò. Íåîáõîäèìî å äà ñå ïîääúðæà ñëåäíàòà êîíñòðóêöèÿ çà öèêúë:
for (
int i = 0; i < upperBound; ++i )
myArray[ i ] = myArray[ i ] +
1;
êúäåòî íà upperBound å äàäåíà ñòîéíîñòòà íà size îò îáåêòà myArray íà
êëàñà IntArray. Âñè÷êî òîâà ìîæå äà áúäå ðåàëèçèðàíî ÷ðåç ÷ëåí-ôóíêöèèòå
getSize() è operator[]. getSize(), íàðå÷åíà ôóíêöèÿ çà äîñòúï, ïðåäëàãà äîñòúï
çà ÷åòåíå íà åäíà äðóãà ñîáñòâåíà ñòîéíîñò. Ïîíåæå òÿ å ìíîãî ìàëêà, äåôèíèöèÿòà
é å âêëþ÷åíà â äåôèíèöèÿòà íà êëàñà. UpperBound ìîæå äà ïîëó÷è ñòîéíîñò êàòî
èçïîëçóâà getSize():
upperBound = myArray.getSize();
èëè ñàìàòà
getSize() ìîæå äà çàìåñòè upperBound â öèêúëà for:
for ( int i = 0; i
< myArray.getSize(); ++i )
Ôóíêöèÿòà, ðåàëèçèðàùà èíäåêñíèÿ îïåðàòîð,
íå å ìíîãî ïî-ãîëÿìà îò getSize(), íî òðÿáâà äà å òàêà ðåàëèçèðàíà, ÷å äà
îñèãóðÿâà âúçìîæíîñò êàêòî çà ÷åòåíå, òàêà è çà çàïèñ. ×àñòòà, îñèãóðÿâàùà
÷åòåíåòî ñå ðåàëèçèðà ïðîñòî: âçåìà ñå ñòéíîñòòà íà èíäåêñà è ñå âðúùà
ñúîòâåòíèÿ åëåìåíò. Òîâà å íåîáõîäèìî çà ðåàëèçèðàíå íà îïåðàòîðè îò
âèäà:
int i = myArray[ someValue ];
êàêòî è îò
âèäà:
myArray[ i ] = someValue;
Çà äà ñå ÿâÿâà myArray[i] îò
ëÿâàòà ñòðàíà íà îïåðàòîð çà ïðèñâîÿâàíå, òîé òðÿáâà äà èìà ñòîéíîñò çà çàïèñ
(lvalue). Òîâà ìîæå äà áúäå íàïðàâåíî ÷ðåç äåôèíèðàíå íà âðúùàíàòà ñòîéíîñò îò
ïñåâäîíèìåí /ñúîòíàñÿù/ òèï ( äà ïðèïîìíèì, ÷å òîçè òèï ïðåäëàãà ïñåâäîíèì íà
äàäåíà ïðîìåíëèâà - Ðàçäåë 4.7 ðàçãëåæäà âðúùàíåòî íà ñòîéíîñò îò
òèï-ïñåâäîíèì). Ðåàëèçàöèÿòà íà òàçè ÷ëåí-ôóíêöèÿ áè ìîãëà äà èçãëåæäà
òàêà:
int& IntArray::Operator[](int index)
{ return ia[index]; }
Îáèêíîâåíî, äåôèíèöèÿòà íà êëàñà, êàêòî è íà âñè÷êè
ñâúðçàíè ñ íåãî êîíñòàíòíè ñòîéíîñòè ñå çàïèñâàò â åäèí çàãëàâåí ôàéë. Òîçè ôàéë
ñå èìåíóâà ÷ðåç èìåòî íà êëàñà.  ãîðåîïèñàíèÿ ñëó÷àé çàãëàâíèÿò ôàéë ñå íàðè÷à
IntArray.h. Âñè÷êè ïðîãðàìè, êîèòî êëàñúò IntArray() èçïîëçóâà, òðÿáâà äà ñà
âêëþ÷åíè â òîçè çàãëàâåí ôàéë. Ñúîòâåòíî, ÷ëåí-ôóíêöèèòå íà êëàñà îáèêíîâåíî ñå
çàïèñâàò â òåêñòîâ ôàéë, èìåíóâàí ñúùî ÷ðåç èìåòî íà êëàñà.  òîçè ñëó÷àé,
÷ëåí-ôóíêöèèòå ùå áúäàò çàïèñàíè âúâ ôàéëà IntArray.C. Çà äà èçïîëçóâà òåçè
ôóíêöè ïðîãðàìèñòúò òðÿáâà äà ãè äîáàâè êúì ñâîÿ èçïúëíèì ôàéë. Âìåñòî äà
ïðåêîìïèëèðàìå òåçè ôóíêöèè ñ âñÿêà ïðîãðàìà, êîÿòî æåëàå äà èçïîëçóâà êëàñà
Intarray, íèå ìîæåì äà ãè êîìïèëèðàìå â áèáëèîòåêà. Òîâà ñå ïðàâè òàêà:
$
CC -c IntArray.C
$ ar cr IntArray.a IntArray.o
ar å êîìàíäà çà
ñúçäàâàíå íà àðõèâíà áèáëèîòåêà, ïîääúðæàíà îò ñèñòåìàòà UNIX. Ñèìâîëèòå cr,
êîèòî ñëåäâàò, ïðåäñòàâëÿâàò îïöèè çà êîìàíäíèÿ ðåä. IntArray.o å åäèí îáåêòåí
ôàéë, ñúäúðæàù ìàøèííèòå èíñòðóêöèè, ñúîòâåòñòâóâàùè íà Ñ++ ïðîãðàìàòà. Òîé ñå
ãåíåðèðà, êîãàòî íà êîìïèëàòîðà ñå çàäàäå îïöèÿòà -ñ. IntArray.a å èìåòî, êîåòî
ùå áúäå äàäåíî íà áèáëèîòåêàòà, ñúäúðæàùà êëàñà IntArray. Çà äà èçïîëçóâà òàçè
áèáëèîòåêà, ïðîãðàìèñòúò ìîæå äà çàäàäå èìåòî é ÿâíî íà êîìàíäíèÿ ðåä êîãàòî
êîìïèëèðà ïðîãðàìà:
$ CC main.c IntArray.a
Òîâà ùå ïðåäèçâèêà
âêëþ÷âàíåòî íà ÷ëåí-ôóíêöèèòå íà êëàñà IntArray â èçïúëíèìèÿ êîä íà
ïðîãðàìàòà.
Óïðàæíåíèå 1-14. Èëþñòðèðàíèÿò òóê êëàñ IntArray ïðåäëàãà
ìèíèìàëåí áðîé îïåðàöèè. Íàïèøåòå ñïèñúê íà íÿêîè äîïúëíèòåëíè âúçìîæíîñòè,
êîèòî ñ÷èòàòå, ÷å òðÿáâà äà áúäàò äîáàâåíè êúì òîçè êëàñ.
Óïðàæíåíèå
1-15. Ïîëåçíî áè áèëî äà ìîæåì äà èíèöèàëèçèðàìå îáåêò îò òèï IntArray ÷ðåç
íÿêàêúâ öÿë ìàñèâ. Îïèøåòå åäèí îáù àëãîðèòúì çà ðåàëèçèðàíå íà ñëåäíèÿ
êîíñòðóêòîð:
IntArray::IntArray( int *ia, int size );
Òðÿáâà äà
ìîãàò äà áúäàò ïîääúðæàíè ñëåäíèòå äåôèíèöèè:
int ia[ 4 ] = { 0, 1, 2, 3
};
IntArray myIA( ia, 4 );
IntArray íè ïðåäñòàâÿ åäèí âàæåí àñïåêò îò
èçïîëçóâàíåòî íà êëàñîâèÿ ìåõàíèçúì â Ñ++. IntArray ìîæå äà áúäå íàðå÷åí
àáñòðàêòåí äàííîâ òèï. Ïðîãðàìèñòèòå ìîãàò äà èçïîëçóâàò êëàñà IntArray ïî
ñúâñåì ñúùèÿ íà÷èí, ïî êîéòî è âñè÷êè îñòàíàëè ïðåäâàðèòåëíî äåôèíèðàíè òèïîâå
äàííè â Ñ++. Òîçè àñïåêò íà êëàñîâåòå ñå ðàçãëåæäà â ãëàâè 5 è 6.
Âòîðè
âàæåí àñïåêò íà êëàñîâèÿ ìåõàíèçúì å âúçìîæíàñòòà çà äåôèíèðàíå íà ïîäòèïîâè
âðúçêè. Íàïðèìåð, IntArrayRC å åäèí òèï íà êëàñà öåëè ìàñèâè, êîéòî ñúùî
îñèãóðÿâà ïðîâåðêà äàëè èíäåêñíèòå ñòîéíîñòè ñúîòâåòñòâóâàò íà äåôèíèðàíèÿ ìó
îáõâàò. Òîé å ðåàëèçèðàí íà îñíîâàòà íà ò.í. íàñëåäñòâåí ìåõàíèçúì. Åòî
äåôèíèöèÿòà íà IntArrayRC:
#include "IntArray.h"
class IntArrayRC :
public IntArray { public:// constructors are not inherited
IntArrayRC( int =
ArraySize );
int& operator[]( int );
protected:
void rangeCheck(
int );
}
IntArrayRC òðÿáâà äà äåôèíèðà ñàìî òåçè àñïåêòè íà
ðåàëèçàöèÿòà, êîèòî ñà ðàçëè÷íè èëè äîïúëíèòåëíè ñïðÿìî ðåàëèçàöèÿòà íà
IntArray. Òîé òðÿáâà äà ïðåäëàãà:
1. òàêúâ èíäåêñåí îïåðàòîð íà
åêçåìïëÿðèòå ñè, êîéòî äà ïðîâåðÿâà äàëè äàäåí èíäåêñ íå íàäõâúðëÿ ãðàíèöèòå íà
ìàñèâà.
2. ôóíêöèÿ, êîÿòî èçâúðøâà òàçè ïðîâåðêà.
3. ñîáñòâåí íàáîð îò
ôóíêöèè çà àâòîìàòè÷íà èíèöèàëèçàöèÿ - ò.å. ñîáñòâåí íàáîð îò
êîíñòðóêòîðè.