2. 2.5 Iäåíòèôiêàòîðè 2 ÁÀÇÎÂI ÊÎÍÑÒÐÓÊÖIˆ C++
ìiæ ñèìâîëàìè ..., òî òîäi ó ïîòî÷íîìó êàòàëîçi. Ó äàíîìó
âèïàäêó ïiäêëþ÷à¹òüñÿ áiáëiîòåêà äëÿ ïiäòðèìêè ïîòîêiâ ââåäå-
ííÿ/âèâåäåííÿ. Êîíñòðóêöiÿ using namespace âèêîðèñòîâó¹òüñÿ
äëÿ çàäàííÿ ïðîñòîðó iìåí, íà äàíîìó åòàïi çàãëèáëþâàòèñÿ ó öå
íåì๠ñåíñó.
Êîæíà ïðîãðàìà íà C++ ïîâèííà ìiñòèòè ôóíêöiþ main, ÿêà
çàä๠òî÷êó âõîäó ó ïðîãðàìó. Ñàìå öÿ ôóíêöiÿ àâòîìàòè÷íî âèêî-
íó¹òüñÿ ïåðøîþ ïðè çàïóñêó ïðîãðàìè. Ôiãóðíi äóæêè îáìåæóþòü
òiëî ôóíêöi¨. Äëÿ âèâåäåííÿ äàíèõ âèêîðèñòîâó¹òüñÿ ñòàíäàðòíèé
ïîòiê âèâåäåííÿ cout, ÿêèé ÿâëÿ¹ ñîáîþ çâè÷àéíó òåêñòîâó êîí-
ñîëü. Îïåðàòîð ñëóæèòü äëÿ ïåðåíàïðàâëåííÿ äàíèõ ó ïîòiê, à
endl ãîâîðèòü, ùî ïîòðiáíî ïåðåâåñòè êóðñîð íà íîâèé ðÿäîê.
Ó êiíöi ôóíêöi¨ âèêëèêà¹òüñÿ îïåðàòîð return, âií ñëóæèòü äëÿ
ïîâåðíåííÿ ðåçóëüòàòó ôóíêöi¨, ó äàíîìó âèïàäêó 0 íàäñèëà¹òüñÿ
îïåðàöiéíié ñèñòåìi i ãîâîðèòü, ùî ïðîãðàìó çàâåðøåíî óñïiøíî.
Ïîòðiáíî ñêàçàòè, ùî âèêëèê return 0 ó ñèñòåìàõ ðîäèíè Windows
¹ íå îáîâ'ÿçêîâèì, ïðîòå ãàðíèì ñòèëåì ïðîãðàìóâàííÿ âñå æ òà-
êè ¹ âèêîðèñòàííÿ ïîäiáíèõ êîíñòðóêöié. Ó îïåðàöiéíèõ ñèñòåìàõ
ñóìiñíèõ çi ñòàíäàðòàìè POSIX (Linux, BSD òà ií.) öi çíà÷åííÿ
íàòîìiñòü àêòèâíî âèêîðèñòîâóþòüñÿ, òîìó ç ìåòîþ çàáåçïå÷åííÿ
êðîñïëàòôîðìåíîñòi áàæàíî ïðèòðèìóâàòèñÿ çàãàëüíèõ ïiäõîäiâ.
Ùå îäèí ìîìåíò íà ÿêèé ïîòðiáíî çâåðíóòè óâàãó öå ñòèëü
îôîðìëåííÿ êîäó. Íàñïðàâäi C++ äîñèòü ëîÿëüíèé äî öüîãî, ïðè
áàæàííi âåñü òåêñò ïðîãðàìè ìîæíà íàïèñàòè õî÷ â îäèí ðÿäîê,
ïðîòå äóæå âàæëèâî, ùîá êîä íàñïðàâäi ìiã âiëüíî ÷èòàòèñÿ. Ñàìå
òîìó ðåêîìåíäó¹òüñÿ âèêîðèñòîâóâàòè âiäñòóïè äëÿ äåìîíñòðàöi¨
ñòðóêòóðè ïðîãðàìè, öå äîçâîëÿ¹ íå ëèøå êðàùå îði¹íòóâàòèñÿ ó
òåêñòi, àëå é äîçâîëÿ¹ øâèäêî âèëîâëþâàòè ÷àñòi ïîìèëêè ç íåçà-
êðèòîþ ôiãóðíîþ äóæêîþ.
2.2 Êîìåíòàði
Ïðîãðàìiñòè âèêîðèñòîâóþòü êîìåíòàði äëÿ òîãî ùîá çàëèøàòè
ó êîäi ïðîãðàìè ïîÿñíåííÿ ùîäî îñîáëèâîñòåé éîãî ðîáîòè. Ãàðíèì
ñòèëåì ïðîãðàìóâàííÿ ¹ êîìåíòóâàííÿ îñíîâíèõ äiëÿíîê êîäó ïiä
÷àñ íàïèñàííÿ ïðîãðàìè, öå äîçâîëèòü ÷åðåç äåÿêèé ÷àñ íàáàãàòî
ëåãøå çãàäàòè ïðèíöèïè ðîáîòè ïðîãðàìè.
/∗ áàãàòîðÿäêîâèé
êîìåíòàð ∗/
// îäíîðÿäêîâèé êîìåíòàð
Êîìåíòàði òàêîæ ìîæíà âèêîðèñòîâóâàòè íà åòàïi íàëàãîäæåí-
íÿ ïðîãðàìè äëÿ øâèäêîãî âiäêëþ÷åííÿ/âêëþ÷åííÿ äiëÿíîê êîäó.
2.3 Ñêëàäåíèé îïåðàòîð
Ñêëàäåíèé îïåðàòîð (iíîäi éîãî ìîæíà íàçèâàòè áëîêîì) âèêî-
ðèñòîâó¹òüñÿ ó òèõ âèïàäêàõ êîëè çãiäíî ïðàâèë C++ äîïóñòè-
ìî âèêîðèñòîâóâàòè ëèøå îäèí îïåðàòîð (íàïðèêëàä êîíñòðóêöi¨
if, for, while), à íàñïðàâäi ïîòðiáíî âñòàâèòè äåêiëüêà. Òàêèé
îïåðàòîð ñïðèéìà¹òüñÿ êîìïiëÿòîðîì ÿê îäèí i çàäà¹òüñÿ ïàðîþ
ñèìâîëiâ { }. Ùå îäèí ìîìåíò ÿêèé âàæëèâî çíàòè, òî öå òå, ùî
áóäü-ÿêi çìiííi îãîëîøåíi ó ðàìêàõ òàêîãî áëîêó íå áóäóòü âèäèìi
çà éîãî ìåæàìè (òîáòî áóäóòü ëîêàëüíèìè), íàòîìiñòü âñi çìiííi
îãîëîøåíi çà éîãî ìåæàìè âèäèìi i âñåðåäèíi íüîãî.
{ îïåðàòîðè }
{ int i = 3 ; }
int x = i ; // ïîìèëêà , çà ìåæàìè âèäèìîñòi !
2.4 Çàãîëîâêîâi ôàéëè
Çàãîëîâêîâi ôàéëè âèêîðèñòîâóþòüñÿ äëÿ ïiäêëþ÷åííÿ çîâíi-
øíiõ áiáëiîòåê.
#include i o s t r e a m
#include m y c l a s s . h
#include cmath
Ïîòðiáíî çâåðíóòè óâàãó, ùî ó C++ íàçâè ñòàíäàðòíèõ çàãî-
ëîâêîâèõ ôàéëiâ C ïðèéíÿòî ïèñàòè äåùî ó iíøîìó ñòèëi, à ñàìå,
ðîçøèðåííÿ iìåíi ôàéëó .h ïðèáèðà¹òüñÿ, à ïåðåä ñòàðîþ íàçâîþ
äîäà¹òüñÿ áóêâà c. Òàêèì ÷èíîì math.h ïåðåòâîðþ¹òüñÿ ó cmath,
stdlib.h ïåðåòâîðþ¹òüñÿ ó cstdlib i ò.ä.
2.5 Iäåíòèôiêàòîðè
Iäåíòèôiêàòîð öå ïîñëiäîâíiñòü áóêâ, öèôð òà ñèìâîëiâ ïiä-
êðåñëåííÿ (_). Iäåíòèôiêàòîð íå ìîæå ïî÷èíàòèñÿ ç öèôðè. Âåëèêi
òà ìàëi ëiòåðè ðîçðiçíÿþòüñÿ.
i
s i z e
w123
_foo
Íàñòóïíi ïðèêëàäè íå ìîæóòü áóòè iäåíòèôiêàòîðàìè:
for // êëþ÷îâå ñëîâî
3w // íå ìîæíà ïî÷èíàòè ç öèôðè
−f g h // íå ïëóòàéòå − òà _
_Sysfoo // ï i ä ê ð å ñ ë å í í ÿ i âåëèêà ëiòåðà
// äëÿ ñèñòåìíîãî âèêîðèñòàííÿ
2.6 Îãîëîøåííÿ çìiííèõ
Çìiííi ó C++ îãîëîøóþòüñÿ íàñòóïíèì ÷èíîì:
òèï_äàíèõ iäåíòèôiêàòîð [ = çíà÷åííÿ ] ;
int a , b , c ;
char c = 'A ' ;
Íà âiäìiíó âiä C, ó C++ íå âàæëèâî ó ÿêîìó ìiñöi ïðîãðàìè îãî-
ëîøåíî çìiííó. Âèìàãà¹òüñÿ ëèøå ¹äèíå ïðàâèëî êîæíó çìiííó
ïîòðiáíî îãîëîñèòè äî ¨¨ âèêîðèñòàííÿ. ßêùî ïîòðiáíî îãîëîñèòè
äåêiëüêà çìiííèõ îäíîãî òèïó ¨õ ðîçäiëÿþòü êîìàìè. Îäíî÷àñíî
ç îãîëîøåííÿì, çìiííó ìîæíà é iíiöiàëiçóâàòè çàäàâøè ïî÷àòêîâå
çíà÷åííÿ.
Ìîäèôiêàòîð const âèêîðèñòîâó¹òüñÿ äëÿ îãîëîøåííÿ êîíñòàíò.
Íà âiäìiíó âiä çâè÷àéíèõ çìiííèõ êîíñòàíòi ìîæíà ïðèñâî¨òè çíà-
÷åííÿ ëèøå îäèí ðàç, ïiä ÷àñ ¨¨ iíiöiàëiçàöi¨.
const float p i = 3 . 1 4 1 5 9 2 6 ;
p i = 2 ; // ïîìèëêà !
2.7 Îïåðàòîð ïðèñâî¹ííÿ
Îïåðàòîð ïðèñâî¹ííÿ äîçâîëÿ¹ âñòàíîâëþâàòè çíà÷åííÿ çìiííî¨
ÿê ðåçóëüòàò âèêîíàííÿ âèðàçó.
çìiííà = âèðàç ;
i = 2 + 3 ;
c = s q r t ( a∗a+b∗b ) ;
Äîïóñêà¹òüñÿ îá'¹äíóâàòè îïåðàòîð ïðèñâî¹ííÿ ç àðèôìåòè÷íèì
îïåðàòîðîì ó íàñòóïíié ôîðìi:
i += 2 ; // åêâiâàëåíòíî i=i +2
k −= 5 ; // åêâiâàëåíòíî k=k−5
i ò.ä., ó ïàði ç îïåðàòîðîì ïðèñâî¹ííÿ äîïóñêà¹òüñÿ âèêîðèñòàííÿ
áóäü-ÿêîãî àðèôìåòè÷íîãî îïåðàòîðó.
2.8 Ëiòåðàëè
Ëiòåðàëè öå ïîñòiéíi çíà÷åííÿ, ÿê íàïðèêëàä 1 ÷è 3.1415926.
Äëÿ êîæíîãî òèïó ó C++ iñíóþòü ëiòåðàëè, âêëþ÷àþ÷è ÷èñëà,
ðÿäêè ñèìâîëiâ òà ií. Îñü äåÿêi ïðèêëàäè:
5 öiëà êîíñòàíòà
5U áåççíàêîâà öiëà êîíñòàíòà
5L äîâãå öiëå
05 âiñiìêîâå ÷èñëî
0x5 øiòíàäöÿòêîâå ÷èñëî
true áóëåâà êîíñòàíòà
5.0 äðîáîâå ÷èñëî
5.0F äðîáîâå îäèíàðíî¨ òî÷íîñòi
5.0L äîâãå ïîäâiéíî¨ òî÷íîñòi
'5' ñèìâîëüíà êîíñòàíòà
'n' ñèìâîë ïåðåâîäó íà íîâèé ðÿäîê
L'XYZ' wchar_t ñèìâîë
Hello! ñèìâîëüíèé ðÿäîê
Iñíóþòü íàñòóïíi ñïåöiàëüíi ñèìâîëüíi êîíñòàíòè:
2
3. 2.12 Ñòðóêòóðè 2 ÁÀÇÎÂI ÊÎÍÑÒÐÓÊÖIˆ C++
'a' çâóêîâèé ñèãíàë
'' áåêñëåø
'b' ïîâåðíåííÿ íà êðîê
'r' ïîâåðíåííÿ êàðåòêè
'' ïîäâiéíi ëàïêè
'f' ïðîãîí àðêóøà
't' òàáóëÿöiÿ
'n' íîâèé ðÿäîê
'0' íóëüîâèé ñèìâîë
''' àïîñòðîô
'v' âåðòèêàëüíà òàáóëÿöiÿ
'101' âiñiìêîâèé ASCII-êîä 'A'
'x041' øiñòíàäöÿòêîâèé ASCII-êîä 'A'
2.9 Áàçîâi òèïè
Ìîæíà âèäiëèòè íàñòóïíi áàçîâi òèïè äàíèõ:
bool ëîãi÷íèé (true àáî false)
char îäèíè÷íèé ñèìâîë
wchar_t ñèìâîë Unicode
int öiëå ÷èñëî (−32768 . . . 32767)
long äîâãå öiëå (−2147483648 . . . 2147483647)
float äðîáîâå
(1, 17549 · 10−38 . . . 3, 40282 · 10+38)
double äðîáîâå
(2, 22507 · 10−308 . . . 1, 79769 · 10+308)
long double äðîáîâå
(3, 36210 · 10−4932 . . . 1, 18973 · 10+4932)
Äîïóñòèìî òàêîæ âèêîðèñòîâóâàòè ìîäèôiêàòîðè signed àáî
unsigned, ÿêi âêàçóþòü âiäïîâiäíî ÷è ìîæå çìiííà ïðèéìàòè âiä'-
¹ìíi çíà÷åííÿ ÷è íi. Ïîòðiáíî çàóâàæèòè, ùî îá'¹ì ÿêèé çàéìà¹
çìiííà ó ïàì'ÿòi ïðè öüîìó íå çìiíþ¹òüñÿ, à ãðàíèöi ìàêñèìàëü-
íèõ çíà÷åííÿ ïðè öüîìó çìiùóþòüñÿ.
2.10 Ïåðåðàõîâàíèé òèï
Äàíèé òèï âèêîðèñòîâóþòü ó òîìó ðàçi êîëè íàïåðåä âiäîìî, ùî
çìiííà ìîæå ïðèéìàòè ÷iòêî âèçíà÷åíèé íàáið çíà÷åíü. Íàïðèêëàä
òàêèì òèïîì ¹ âæå çãàäàíèé ðàíiøå bool, çìiííi ÿêîãî ìîæóòü
ïðèéìàòè ëèøå äâà ÷iòêî âèçíà÷åíèõ çíà÷åííÿ: true òà false.
enum s u i t { c l u b s , diamonds , h e a r t s , s p a d e s } ;
s u i t c a r d ; // îãîëîøó¹ìî çìiííó òèïó s u i t
enum { l a z y , hazy , c r a z y } why ;
Çâåðíiòü óâàãó, ùî ïåðåðàõîâàíi êîíñòàíòè ìîæóòü îãîëîøóâà-
òèñÿ àíîíiìíî, áåç çàäàâàííÿ iìåíi òèïó, òàê ÿê öå çðîáëåíî ïðè
îãîëîøåííi çìiííî¨ why. Âiäïîâiäíî òàêîæ ìîæíà îá'¹äíóâàòè îãî-
ëîøåííÿ íîâèõ òèïiâ i çìiííèõ öüîãî æ òèïó ó îäèí ðÿäîê.
2.11 Ìàñèâè
Ìàñèâè äîçâîëÿþòü îá'¹äíóâàòè äàíi îäíîãî òèïó òàêèì ÷èíîì
ùîá äî íèõ ìîæíà áóëî çâåðòàòèñÿ ïî íàçâi ñàìîãî ìàñèâó òà iíäå-
êñó. Òàêi êîíñòðóêöi¨ øèðîêî çàñòîñîâóþòüñÿ äëÿ çáåðiãàííÿ ðiçíèõ
ñïèñêiâ, ìàòðèöü òà ií.
int a [ 1 0 ] ; // ñòâîðþ¹ ìàñèâ a [ 0 ] , . . . . . . . , a [ 9 ]
// i í i ö i à ë i ç à ö i ÿ ìàñèâó : a [ 0 ] = 9 , a [ 1 ] = 8 , a [ 2 ] = 7
int a [ 3 ] = { 9 , 8 , 7 } ;
int b [ 3 ] [ 5 ] ; // äâîâèìiðíèé ìàñèâ (ìàòðèöÿ)
Íèæíÿ ãðàíèöÿ ìàñèâó çàâæäè ïðèéìà¹òüñÿ çà íóëü, à ÷èñëî
êîòðå âêàçó¹òüñÿ ïðè îãîëîøåííi ìàñèâó çàä๠éîãî ðîçìið. Òàêèì
÷èíîì âåðõíÿ ãðàíèöÿ ìàñèâó áóäå çàâæäè íà îäèíèöþ ìåíøîþ.
Äîñòóï äî åëåìåíòiâ ìàñèâó âiäáóâà¹òüñÿ ïî àíàëîãi¨, íàïðèêëàä
a[i], b[i][j] i ò.ä. Ïðèñâî¹ííÿ îäíîãî ìàñèâó iíøîìó íàïðÿìó
íå äîïóñêà¹òüñÿ, ó òàêèõ âèïàäêàõ ¨õ ïîòðiáíî êîïiþâàòè ïîåëå-
ìåíòíî. Äèíàìi÷íi ìàñèâè, òîáòî ìàñèâè ðîçìiðè ÿêèõ áè çàäàâà-
ëèñÿ íà åòàïi âèêîíàííÿ, à íå êîìïiëÿöi¨, íàïðÿìó íå ïiäòðèìó-
þòüñÿ, ïðîòå ìîæóòü áóòè çìîäåëüîâàíi ç äîïîìîãîþ âêàçiâíèêiâ
(äèâ. 2.14).
2.12 Ñòðóêòóðè
Ñòðóêòóðè âèêîðèñòîâóþòü òîäi, êîëè íåîáõiäíî îá'¹äíàòè äå-
êiëüêà äàíèõ ðiçíèõ òèïiâ â îäíié çìiííié. Öå çðó÷íî íàïðèêëàä
ïðè ðåàëiçàöi¨ áàç äàíèõ õî÷à i äàëåêî íå ëèøå äëÿ öüîãî. Åëåìåí-
òè ñòðóêòóðè íàçèâàþòüñÿ ïîëÿìè i äëÿ äîñòóïó äî íèõ ó ïðîãðàìi
âèêîðèñòîâóþòü êðàïêó äëÿ âiääiëåííÿ iìåíi ñòðóêòóðè âiä iìåíi
ïîëÿ.
struct p o i n t {
int x , y ;
}
p o i n t p ;
// äîñòóï äî åëåìåíòiâ ñòðóêòóðè :
p . x = 1 0 ;
p . y = 7 ;
2.13 Îá'¹äíàííÿ
Îá'¹äíàííÿ ÷èìîñü ñõîæå íà ñòðóêòóðó, àëå éîãî ÷ëåíè âèêî-
ðèñòîâóþòü ïàì'ÿòü ñóìiñíî i ¨õ çíà÷åííÿ ïåðåêðèâàþòüñÿ. Òîáòî
çíà÷åííÿ òàêié çìiííié ìîæå áóòè ïðèñâî¹íî ëèøå îäíå, àëå òèï
ìîæå áóòè ðiçíèì, â çàëåæíîñòi âiä òîãî ÿêi âè ïåðåäáà÷èòå.
union i n t _ d b l {
int i ;
double x ;
}
i n t _ d b l n = 7 ;
n = 5 . 6 7 ;
2.14 Âêàçiâíèêè
Âêàçiâíèê íà âiäìiíó âiä çâè÷àéíèõ çìiííèõ çáåðiã๠ëèøå àäðå-
ñó ðîçòàøóâàííÿ äàíèõ ó ïàì'ÿòi. Íàñïðàâäi öå äóæå ïîòóæíèé
iíñòðóìåíò ç äîïîìîãîþ ÿêîãî ìîæíà áóäóâàòè ñêëàäíi ñòðóêòóðè
äàíèõ, íàïðèêëàä ñòåêè, ÷åðãè, êiëüöÿ, çâ'ÿçàíi ñïèñêè, äâiéêîâi
äåðåâà òà ií. Öå îêðåìà âåëèêà òåìà, ïðîòå íàéïðîñòiøå âêàçiâíè-
êè ìîæíà âèêîðèñòîâóâàòè äëÿ ðåàëiçàöi¨ äèíàìi÷íèõ ìàñèâiâ.
int∗ p ; // â ê à ç i â í è ê íà òèï i n t
p = new int [ 1 0 ] ; // ðîçìiùó¹ìî ìàñèâ p [ 0 ] . . . p [ 9 ]
delete [ ] p ; // çâiëüíÿ¹ìî ïàì 'ÿòü çàéíÿòó ìàñèâîì
Íàâåäåìî ïðèêëàä ïðîãðàìè, äå êîðèñòóâà÷ ââîäèòü ðîçìið ìà-
ñèâó, ïîòiì ââîäèòü ñàì ìàñèâ, ïiñëÿ ÷îãî ïðîãðàìà ïîâòîðíî âè-
âîäèòü éîãî íà åêðàí.
#include i o s t r e a m
using namespace s t d ;
int main ( )
{
int i , s i z e ;
int∗ a ;
c o u t Ââåäiòü ðîçìið ìàñèâó : ;
c i n s i z e ;
if ( s i z e ==0) return 1 ;
a = new int[ s i z e ] ;
for( i =0; i s i z e ;++ i ) {
c o u t a [ i ]= ;
c i n a [ i ] ;
}
c o u t −−−−−−−−−−−−−−−−−−−−−−−− e n d l ;
for( i =0; i s i z e ;++ i ) {
c o u t a [ i ]=a [ i ] e n d l ;
}
delete [ ] a ;
return 0 ;
}
Ïðè ðîáîòi ç âêàçiâíèêàìè ïîòðiáíî ïàì'ÿòàòè, ùî âñÿ âiäïî-
âiäàëüíiñòü çà âèäiëåííÿ òà çâiëüíåííÿ ïàì'ÿòi ïîâíiñòþ ëÿã๠íà
ïðîãðàìiñòà, òîìó íå ïîòðiáíî çàáóâàòè ïðî çâiëüíåííÿ ïàì'ÿòi ÿê
òiëüêè çìiííà ïåðåñò๠áóòè ïîòðiáíîþ (îïåðàòîð delete).
2.15 Àðèôìåòè÷íi âèðàçè
Ó àðèôìåòè÷íèõ âèðàçàõ âèêîðèñòîâóþòüñÿ íàñòóïíi îïåðàöi¨:
3
4. 2.18 Öèêëè 2 ÁÀÇÎÂI ÊÎÍÑÒÐÓÊÖIˆ C++
+ , - äîäàâàííÿ , âiäíiìàííÿ
* , / ìíîæåííÿ , äiëåííÿ
% çàëèøîê âiä äiëåííÿ
++ çáiëüøåííÿ íà îäèíèöþ (iíêðåìåíò)
-- çìåíøåííÿ íà îäèíèöþ (äåêðåìåíò)
ïîáiòîâèé çñóâ ïðàâîðó÷
ïîáiòîâèé çñóâ ëiâîðó÷
ïîáiòîâà îïåðàöiÿ I
| ïîáiòîâà îïåðàöiÿ ÀÁÎ
×àñòèíà îïåðàöié âèêîíó¹ äi¨ íàïðÿìó íàä îïåðàíäàìè. Ïîòði-
áíî çâåðíóòè óâàãó, ùî ïðè âèêîðèñòàííi îïåðàöié ++ òà -- ìà¹
çíà÷åííÿ ¨õ ðîçìiùåííÿ âiäíîñíî îïåðàíäó. Íàïðèêëàä i++ çáiëü-
øó¹ çìiííó i íà îäèíèöþ, àëå ó ÿêîñòi ðåçóëüòàòó ïîâåðò๠¨¨ çíà-
÷åííÿ äî çáiëüøåííÿ, à ++i íàòîìiñòü ïîâåðò๠çíà÷åííÿ âæå ïiñëÿ
çáiëüøåííÿ. Ïðè îïåðàöiÿõ ïîáiòîâîãî çñóâó âèâiëüíåíi áiòè çàïîâ-
íþþòüñÿ íóëÿìè.
Iñíó¹ ùå îäèí âàæëèâèé ìîìåíò. Ðåçóëüòàò îïåðàöi¨ äiëåííÿ çà-
ëåæèòü âiä òèïó îïåðàíäiâ, ÿêùî ó ÿêîñòi îïåðàíäiâ çàäàþòüñÿ
öiëi ÷èñëà, òî âèêîíó¹òüñÿ öiëî÷èñëîâå äiëåííÿ (äðîáîâà ÷àñòèíà
ðåçóëüòàòó âiäêèäà¹òüñÿ). Öå äóæå ñóòò¹âèé ìîìåíò ÿêèé ìîæå áó-
òè íå î÷åâèäíèì îñîáëèâî ïðîãðàìiñòàì íà Pascal. Äëÿ òîãî ùîá
ðåçóëüòàòîì äiëåííÿ äâîõ öiëèõ ÷èñåë áóëî äðîáîâå ÷èñëî ïîòðiáíî
âèêîðèñòàòè ÿâíå ïðèâåäåííÿ òèïiâ. Ó C++ öå ðîáèòüñÿ ç äîïîìî-
ãîþ iìåíi òèïó âçÿòîãî ó êðóãëi äóæêè ðîçìiùåíîãî ïåðåä îïåðàí-
äîì. Íàïðèêëàä: f = (double)i/k.
2.16 Îïåðàòîð ðîçãàëóæåííÿ
Îïåðàòîð ðîçãàëóæåííÿ âèêîðèñòîâó¹òüñÿ ó òîìó âèïàäêó êîëè
ïîòðiáíî çìiíèòè ïîðÿäîê âèêîíàííÿ îïåðàòîðiâ ó çàëåæíîñòi âiä
ÿêî¨ñü óìîâè.
if ( âèðàç )
ÿêùî òàê ;
else
ÿêùî í i ;
Íó íàïðèêëàä:
if ( a==2)
c o u t H i ;
else
c o u t Bye ;
Ó ëîãi÷íèõ âèðàçàõ âèêîðèñòîâóþòüñÿ íàñòóïíi îïåðàöi¨:
== äîðiâíþ¹
!= íå äîðiâíþ¹
, ìåíøå , áiëüøå
= , = ìåíøå äîðiâíþ¹ , áiëüøå äîðiâíþ¹
! îïåðàöiÿ ÍI (NOT)
îïåðàöiÿ I (AND)
|| îïåðàöiÿ ÀÁÎ (OR)
2.17 Îïåðàòîð switch
Iíîäi ïîòðiáíî ïðîàíàëiçóâàòè çíà÷åííÿ çìiííî¨ ç íàáîðó íàïåðåä
âiäîìèõ êîíñòàíò, íó íàïðèêëàä ÿêùî ïðîãðàìà ïiäòðèìó¹ ïàðà-
ìåòðè êîìàíäíîãî ðÿäêà, òî ïîòðiáíî àíàëiçóâàòè ââåäåíi êëþ÷i.
Ëàíöþæîê óòâîðåíèé îïåðàòîðàìè if ó òàêîìó ðàçi áóäå çàíàäòî
âåëèêèé, òîìó â òàêèõ âèïàäêàõ âèêîðèñòîâóþòü îïåðàòîð switch:
switch ( âèðàç ) {
case êîíñòàíòà : îïåðàòîðè
case êîíñòàíòà : îïåðàòîðè
. . . . . .
default: îïåðàòîðè
}
Áiëüø äîêëàäíî öå âèäíî íà ïðèêëàäi:
switch ( a ) {
case 1 :
c o u t One ;
break;
case 2 :
c o u t Two ;
break;
default:
c o u t ?? ;
}
Ïîòðiáíî çâåðíóòè óâàãó, ùî ïiñëÿ âèêîíàííÿ îïåðàòîðiâ ÿêi âiä-
ïîâiäàþòü ïîòðiáíié êîíñòàíòi âèêîíàííÿ îïåðàòîðó switch íå çà-
êií÷ó¹òüñÿ, à ïî÷èíàþòü âèêîíóâàòèñÿ îïåðàòîðè ÿêi çíàõîäÿòüñÿ
äàëi, áiëÿ iíøèõ ìiòîê. Öå âiäðiçíÿ¹ äàíèé îïåðàòîð âiä éîãî àíàëî-
ãiâ ó äåÿêèõ iíøèõ ìîâàõ (íàïðèêëàä case ó Pascal). Äëÿ òîãî ùîá
çàâåðøèòè âèêîíàííÿ êîíñòðóêöi¨ ïîòðiáíî âèêîðèñòàòè îïåðàòîð
break. Áëîê default çàä๠îïåðàòîðè ÿêi áóäóòü âèêîíóâàòèñÿ ó
ðàçi ÿêùî çíà÷åííÿ çìiííî¨ íå âiäïîâiä๠æîäíîìó ç íàâåäåíèõ âà-
ðiàíòiâ (òîáòî àíàëîã else).
2.18 Öèêëè
Öèêëè âèêîðèñòîâóþòüñÿ ó òèõ âèïàäêàõ ÿêùî ó ïðîãðàìi ïî-
òðiáíî ðåàëiçóâàòè ïîâòîðåííÿ ïåâíî¨ äiëÿíêè êîäó â çàëåæíîñòi
âiä ÿêî¨ñü óìîâè. Ó C++ iñíó¹ òðè êîíñòðóêöi¨ ÿêi çàäàþòü öèêëè.
Ïåðø çà âñå ïîòðiáíî çãàäàòè öèêë ç ïåðåäóìîâîþ. Òàêèé öèêë
âèêîíó¹òüñÿ äî òèõ ïið äîêè ðåçóëüòàòîì âèðàçó âêàçàíîãî ó çàãî-
ëîâêó ¹ çíà÷åííÿ true.
while ( âèðàç )
îïåðàòîð ;
Iñíó¹ òàêîæ éîãî ìîäèôiêàöiÿ, öèêë do, ÿêèé çàä๠öèêë ç ïiñëÿ-
óìîâîþ. Òîáòî óìîâà ïåðåâiðÿ¹òüñÿ íå íà ïî÷àòêó öèêëó, à âêiíöi,
âñÿ iíøà ïîâåäiíêà öèêëó ¹ àíàëîãi÷íîþ while.
do
. . . . . .
while ( âèðàç ) ;
Ïîòðiáíî ëèøå çâåðíóòè óâàãó, ùî ó öèêëi do íå ïîòðiáíî âèêî-
ðèñòîâóâàòè ñêëàäåíèé îïåðàòîð ÿêùî ïîòðiáíî âñòàâèòè äåêiëü-
êà îïåðàòîðiâ, êëþ÷îâi ñëîâà do òà while òóò âæå âèêîíóþòü ðîëü
îïåðàòîðíèõ äóæîê.
×àñòî öèêëè âèêîðèñòîâóþòü íàïðèêëàä äëÿ ðîáîòè ç ìàñèâàìè,
êîëè ïðè êîæíîìó ïðîõîäi öèêëó ïîòðiáíî çìiíþâàòè iíäåêñ, òîäi
çðó÷íî âèêîðèñòîâóâàòè íàñòóïíó êîíñòðóêöiþ:
for ( âèðàç1 ; âèðàç2 ; âèðàç3 )
îïåðàòîð ;
Çâåðíiòü óâàãó, ùî âèðàçè âiäîêðåìëþþòüñÿ êðàïêîþ ç êîìîþ.
Êîìïiëÿòîð ïðèâîäèòü öèêë for äî íàñòóïíîãî âèãëÿäó:
âèðàç1 ;
while ( âèðàç2 ) {
îïåðàòîð ;
âèðàç3 ;
}
Òàêèì ÷èíîì, ÿêùî íàì íàïðèêëàä ïîòðiáíî âèâåñòè íà åêðàí
âìiñò ÿêîãîñü ìàñèâó int a[10] òî ìîæíà âèêîðèñòàòè òàêó êîí-
ñòðóêöiþ:
for ( int i =0; i 10;++ i )
c o u t a [ i ] e n d l ;
Òàêîæ ó öèêëàõ ìîæíà âèêîðèñòîâóâàòè îïåðàòîðè continue
(ïåðåðèâ๠ïîòî÷íèé êðîê öèêëó i ïî÷èí๠íîâèé) òà break (ïðè-
ìóñîâèé âèõiä iç öèêëó).
2.19 Ïðîñòîðè iìåí
C++ îòðèìàâ ó ñïàäùèíó âiä C ¹äèíèé ãëîáàëüíèé ïðîñòið iìåí.
Ïðîòå ïðè îá'¹äíàííi ïðîãðàì íàïèñàíèõ ðiçíèìè êîëåêòèâàìè, à
òèì áiëüøå îñêiëüêè C++ çàîõî÷ó¹ âèêîðèñòàííÿ ñòîðîííiõ áiáëiî-
òåê ìîæóòü áóòè êîíôëiêòè. Òîìó áóëî ââåäåíî êîíöåïöiþ ïðîñòî-
ðó iìåí.
namespace LMPin {
int n ;
s t r i n g s ;
}
Òîäi ïîâíèé iäåíòèôiêàòîð áóäå ñêëàäàòèñÿ ç íàçâè ïðîñòîðó
iìåí òà âëàñíå iäåíòèôiêàòîðó ðîçäiëåíèõ ñèìâîëîì ::. Íàïðèêëàä
LMPin::n ÷è LMPin::s. Ìîæíà òàêîæ îòðèìàòè äîñòóï äî âñiõ iìåí
çàäàíîãî ïðîñòîðó âèêîíàâøè using namespace LMPin, òîäi iäåíòè-
ôiêàòîðè ìîæíà ïèñàòè ïðîñòî: n òà s. Ó âiäïîâiäíîñòi ç íîâèìè
ñòàíäàðòàìè ANSI ñòàíäàðòíi çàãîëîâêîâi ôàéëè òåïåð âèêîðèñòî-
âóþòü ïðîñòið iìåí std, òîìó äëÿ ðîáîòè ç íèìè ïîòðiáíî âñòàâëÿòè
ó ñâî¨ ïðîãðàìè ðÿäîê using namespace std.
4
5. 4 ÑÒÀÍÄÀÐÒÍI ÁIÁËIÎÒÅÊÈ
3 Ñòâîðåííÿ âëàñíèõ ôóíêöié
3.1 Âèçíà÷åííÿ ôóíêöi¨
Ôóíêöi¨ âèêîðèñòîâóþòüñÿ äëÿ îá'¹äíàííÿ äiëÿíîê êîäó ÿêi ÷à-
ñòî âèêîðèñòîâóþòüñÿ ó ìåæàõ îäíîãî áëîêó. Ôóíêöiÿ ì๠íàçâó,
íàáið âõiäíèõ ïàðàìåòðiâ, áëîê îïåðàòîðiâ, à òàêîæ ìîæå ïîâåðòà-
òè ðåçóëüòàò.
òèï iì'ÿ_ôóíêöi¨ (òèï ïàðàìåòð [,...]) {
òiëî ôóíêöi¨
return çíà÷åííÿ;
}
ßêùî ôóíêöiÿ íå ïîâåðò๠äàíèõ, òî âêàçóþòü òèï void. Ïàðàìå-
òðè çàäàþòüñÿ ó òàêîìó æ ñòèëi ÿê i çâè÷àéíå îãîëîøåííÿ çìiííèõ.
Îïåðàòîð return ñëóæèòü äëÿ ïîâåðíåííÿ çíà÷åííÿ, òàêèì ÷èíîì
ôóíêöi¨ ìîæíà âèêîðèñòîâóâàòè ó âèðàçàõ.
// ïëîùà ïðÿìîêóòíèêà
float r e c t _ a r e a ( float w, h ) {
return w∗h ;
}
Äîïóñêà¹òüñÿ âñåðåäèíi òiëà ôóíêöi¨ ïîñèëàòèñÿ íà íå¨ æ ñàìó,
òàêi ôóíêöi¨ íàçèâàþòüñÿ ðåêóðñèâíèìè. Ðåêóðñiÿ äîçâîëÿ¹ ñóòò¹-
âî ñêîðîòèòè ðîçìið ïðîãðàìíîãî êîäó àëå ïîòðåáó¹ äåÿêîãî òðå-
íóâàííÿ ùîá çðîçóìiòè ïðèíöèïè.
// ôàêòîðiàë , ðåêóðñèâíà ô−ö i ÿ
int f a c t o r i a l ( int x ) {
if ( x==1)
return 1 ;
else
return x∗ f a c t o r i a l ( x −1);
}
Ïàðàìåòðè ó ôóíêöiþ ìîæíà ïåðåäàâàòè íå ëèøå ïî çíà÷åííþ,
àëå é çà ïîñèëàííÿì, äëÿ öüîãî ñëóæèòü ïðåôiêñ (ó Pascal ç òi¹þ
æ ìåòîþ âèêîðèñòîâó¹òüñÿ ìîäèôiêàòîð var).
// ïåðåäà÷à çíà÷åíü ÷ å ð å ç ïîñèëàííÿ
void g e t _ i n t ( int v ) {
s c a n f ( %d ,v ) ;
}
// âèêëèêà¹òüñÿ òàêà ôóíêöiÿ íàñòóïíèì ÷èíîì :
g e t _ i n t ( i ) ;
Ó öüîìó êîäi çìiííó i áóäå çìiíåíî. Çâåðíiòü óâàãó, ùî ïðè ïåðåäà-
÷i ïàðàìåòðiâ çà ïîñèëàííÿìè ïðè âèêëèêó ôóíêöi¨ îáîâ'ÿçêîâî ïî-
òðiáíî çàäàâàòè çìiííi, âèêëèê äàíî¨ ôóíêöi¨ ó âèãëÿäi get_int(5)
¹ ïîìèëêîþ.
3.2 Ðîçìiùåííÿ ôóíêöié ó çîâíiøíiõ ôàéëàõ
×àñòî äóæå çðó÷íî áóâ๠âèíåñòè íàáið âëàñíèõ ôóíêöié ó îêðå-
ìèé ôàéë. Òàêèì ÷èíîì ìîæíà ñòâîðèòè âëàñíó áiáëiîòåêó i ïî-
òiì âèêîðèñòîâóâàòè ¨¨ ó iíøèõ ïðîãðàìàõ. Áiáëiîòåêè çàäàþòüñÿ
ó C++ ïàðîþ ôàéëiâ ç ðîçøèðåííÿìè .h (çàãîëîâêîâèé ôàéë) òà
.cpp (ôàéë ðåàëiçàöi¨). Çàãîëîâêîâèé ôàéë ìiñòèòü ëèøå îãîëî-
øåííÿ çàãîëîâêiâ ôóíêöié i ñàìå âií ïiäêëþ÷à¹òüñÿ äî îñíîâíî¨
ïðîãðàìè ç äîïîìîãîþ äèðåêòèâè #include, à áåçïîñåðåäíüî ñàìi
ôóíêöi¨ îïèñóþòüñÿ ó ôàéëi ðåàëiçàöi¨.
Íàïðèêëàä, ñòâîðèìî áiáëiîòåêó factorial. Äëÿ öüîãî ïîòðiáíî
ñòâîðèòè äâà ôàéëè:
// f a c t o r i a l . h
int f a c t o r i a l ( int x ) ;
// f a c t o r i a l . cpp
int f a c t o r i a l ( int x ) {
if ( x==1)
return 1 ;
else
return x∗ f a c t o r i a l ( x −1);
}
Òåïåð ôóíêöiþ factorial ìîæíà âèêîðèñòîâóâàòè ó iíøèõ ïðî-
ãðàìàõ âêàçàâøè äèðåêòèâó #include factotial.h. Íàñïðàâäi,
ïðàâèëüíà êîìïiëÿöiÿ ïðîãðàìè, ÿêà ñêëàäà¹òüñÿ ç äåêiëüêîõ ôàé-
ëiâ âèìàã๠çíàííÿ îïöié êîìïiëÿòîðà òà óêëàäà÷à (linker), ÿêi ìî-
æóòü âiäðiçíÿòèñÿ â çàëåæíîñòi âiä òîãî ÿêi êîìïiëÿòîðè i íà ÿêié
ïëàòôîðìi âèêîðèñòîâóþòüñÿ. Òîìó íà öüîìó àêöåíòóâàòè óâàãó
íå áóäåìî, ó áóäü-ÿêîìó ðàçi ó ðîçïîâñþäæåíèõ IDE äëÿ C++ äî-
äàâàííÿ ôàéëó ó ïðîåêò àâòîìàòè÷íî îçíà÷๠éîãî êîìïîíóâàííÿ
(linking), òîìó îñîáëèâî íi÷îãî ñêëàäíîãî íàñïðàâäi òóò íåìà.
4 Ñòàíäàðòíi áiáëiîòåêè
4.1 Ââåäåííÿ/âèâåäåííÿ äàíèõ
Iñòîðè÷íî iñíó¹ äâà ïiäõîäè äî ðåàëiçàöi¨ ââåäåííÿ/âèâåäåííÿ
äàíèõ. Öå ìîæå áóòè àáî êëàñè÷íèé ïiäõiä C (ç ôóíêöiÿìè òèïó
printf òà scanf) ÷è ïiäõiä C++ áàçîâàíèé íà êîíöåïöi¨ ïîòîêiâ.
Ðîçãëÿíåìî îáèäâà ïiäõîäè.
Äëÿ ðîáîòè ç ôóíêöiÿìè ââåäåííÿ/âèâåäåííÿ ó ñòèëi C ïîòðiáíî
íà ïî÷àòêó âêàçàòè #include cstdio
p r i n t f ( Ïëîùà äîðiâíþ¹ %d n , r e c t _ a r e a ( 5 , 3 ) ) ;
s c a n f ( %f , a );
Ôóíêöiÿ printf ñëóæèòü äëÿ ôîðìàòîâàíîãî âèâîäó äàíèõ, ïåð-
øèé ¨¨ ïàðàìåòð öå ðÿäîê ó ÿêîìó ç äîïîìîãîþ ñèìâîëó % çà-
äàþòüñÿ ìiñöÿ êóäè ïîòðiáíî âñòàâèòè çíà÷åííÿ ïåðåäàíi iíøèì
ïàðàìåòðàì. Ïîâíèé îïèñ ôîðìàòó íàâîäèòüñÿ ó ñïåöiàëiçîâàíié
ëiòåðàòóði, à òóò ïðîñòî çàóâàæèìî, ùî %d ñëóæèòü äëÿ âñòàâ-
êè öiëîãî ÷èñëà, à %f äðîáîâîãî. Ùîá îêðóãëèòè äðîáîâå ÷èñëî
íàïðèêëàä äî òðüîõ çíàêiâ ïiñëÿ êîìè âèêîðèñòîâó¹òüñÿ ôîðìàò
%.3f. Ôóíêöiÿ scanf äîçâîëÿ¹ ââîäèòè äàíi ç êëàâiàòóðè, çâåðíiòü
óâàãó íà îïåðàòîð âçÿòòÿ àäðåñè ().
Ó C++ äëÿ îðãàíiçàöi¨ ââåäåííÿ/âèâåäåííÿ ðåêîìåíäó¹òüñÿ âè-
êîðèñòîâóâàòè êîíöåïöiþ ïîòîêiâ. Äëÿ öüîãî ïîòðiáíî ïiäêëþ÷èòè
áiáëiîòåêó iostream.
c o u t H e l l o , World ! e n d l ;
// âèâåäåííÿ äàíèõ
c i n a ; // ââåäåííÿ äàíèõ
Ïîòîêè cout (âèâåäåííÿ) òà cin (ââåäåííÿ) ¹ çâè÷àéíèìè êëà-
ñàìè, à îïåðàöiÿ ïîáiòîâîãî çñóâó () ïåðåâàíòàæåíà äëÿ ðîáîòè
ç ïîòîêàìè. Ìîäèôiêàòîð endl ñëóæèòü äëÿ ïåðåâåäåííÿ ðÿäêà,
õî÷à íiùî íå çàâàæà¹ âèêîðèñòîâóâàòè ñòàðèé ñòèëü ç 'n'.
4.2 Ñèìâîëüíi äàíi
Ó C íå iñíóâàëî ñïåöiàëiçîâàíîãî òèïó äëÿ ïðåäñòàâëåííÿ ðÿä-
êiâ ñèìâîëiâ, çàìiñòü öüîãî äîâîäèëîñÿ âèêîðèñòîâóâàòè ñèìâîëüíi
ìàñèâè. Ïðè÷îìó êðàùå âèêîðèñòîâóâàòè âêàçiâíèêè, òîäi íåìà¹
ïðîáëåì ç ðîçìiðîì ðÿäêà, òàêà çìiííà çáåðiã๠àäðåñó ïåðøîãî
ñèìâîëà ðÿäêà ó ïàì'ÿòi, à çàêií÷óâàâñÿ òàêèé ðÿäîê íóëüîâèì
ñèìâîëîì (NULL àáî '0'). Òàêi æ òåêñòîâi ðÿäêè ìîæíà âèêîðè-
ñòîâóâàòè i ó C++.
char∗ s = H e l l o ! ;
c o u t s e n d l ;
Äëÿ òîãî ùîá ïðîâîäèòè ç òàêèìè ðÿäêàìè ïåâíi äi¨ ïîòðiáíî
ïiäêëþ÷èòè áiáëiîòåêó cstring.
char* strcat(s1,s2) êîíêàòåíàöiÿ äâîõ ðÿäêiâ
int strcmp(s1,s2) ïîðiâíÿòè ðÿäêè
char* strcpy(s1,s2) êîïiþâàòè ðÿäîê s2 ó s1
int strlen(s) äîâæèíà ðÿäêà
int strchr(s,c) çíàéòè ïåðøå âõîäæåííÿ ñèìâîëó c
int atoi(s) êîíâåðòó¹ ðÿäîê ó öiëå ÷èñëî
double atof(s) êîíâåðòó¹ ðÿäîê ó äðîáîâå ÷èñëî
i ò.ä.
Äëÿ êîíâåðòàöi¨ ÷èñëà ó ñèìâîëüíèé ðÿäîê ìîæíà âèêîðèñòîâó-
âàòè ôóíêöiþ sprintf, ÿêà àíàëîãi÷íà printf ïðîòå íå âèâîäèòü
ðåçóëüòàò íà åêðàí, à çàïèñó¹ éîãî ó çìiííó âêàçàíó ó ïåðøîìó
ïàðàìåòði (ç çâè÷àéíî).
Ó C++ ç'ÿâèâñÿ íîâèé êëàñ string, ÿêèé iíêàïñóëþ¹ ó ñîái âñþ
ôóíêöiîíàëüíiñòü ïîòðiáíó äëÿ ðîáîòè ç ñèìâîëüíèìè ðÿäêàìè.
Çìiííèì òèïó string ìîæíà ïðèñâîþâàòè çíà÷åííÿ çìiííèõ òèïó
char*, à îò çâîðîòí¹ ïðèñâî¹ííÿ íå äîïóñòèìî, ó òàêèõ âèïàäêàõ
âèêîðèñòîâóþòü ìåòîä c_str êëàñó string. Äëÿ òîãî ùîá äàíèé
êëàñ áóâ äîñòóïíèì ïîòðiáíî ïiäêëþ÷èòè áiáëiîòåêó string.
s t r i n g s ; // îãîëîøó¹ìî ïóñòèé ðÿäîê s
s t r i n g s 1 ( Ïðèâiò ! ) ; // i í i ö i à ë i ç ó ¹ ì î ðÿäîê
s = Ãè−ãè // ïðèñâî¹ííÿ çíà÷åííÿ ðÿäêó
5
6. 4.5 Âèïàäêîâi ÷èñëà 5 ÎÁ'™ÊÒÍÎ-ÎÐI™ÍÒÎÂÀÍÅ ÏÐÎÃÐÀÌÓÂÀÍÍß
s = s + : −) + s 1 ; // êîíêàòåíàöiÿ
int l e n = s . s i z e ; // äîâæèíà ðÿäêà
c o u t s . s u b s t r ( 0 , 4 ) ; // âèäiëèòè ï i ä ð ÿ ä î ê
int l o c = s . f i n d ( : −) , 0 ) ; // øóêà¹ìî ï i ä ð ÿ ä î ê
s 1 . i n s e r t ( 0 , s ) ; // âñòàâèòè ï i ä ð ÿ ä î ê
s . e r a s e ( 0 , 4 ) ; // âèäàëèòè ï i ä ð ÿ ä î ê
Ùîá çêîíâåðòóâàòè ðÿäîê ñèìâîëiâ ó ÷èñëî ìîæíà ñêîðèñòàòèñÿ
ôóíêöiÿìè atoi ÷è atof (öiëå òà äðîáîâå ÷èñëà âiäïîâiäíî).
i n t e g e r=a t o i ( b u f f e r . c _ s t r ( ) ) ;
f l t =a t o f ( b u f f e r . c _ s t r ( ) ) ;
À îò êîíâåðòàöiÿ ÷èñëà ó ðÿäîê òèïó string âæå äàëåêî íå òàêà
î÷åâèäíà. Äëÿ öüîãî ìîæíà ñòâîðèòè âëàñíèé ñèìâîëüíèé ïîòiê i
çàïèñàâøè ó íüîãî ÷èñëî ïîòiì îòðèìàòè âæå ñèìâîëüíèé ðåçóëü-
òàò. Äëÿ öüîãî ïîòðiáíî ïiäêëþ÷èòè áiáëiîòåêó sstream. Íàâåäåìî
ïðèêëàä ôóíêöi¨ ÿêà êîíâåðòó¹ öiëå ÷èñëî ó ñèìâîëüíèé ðÿäîê:
s t r i n g i n t 2 s t r i n g ( const int number )
{
o s t r i n g s t r e a m o s s ;
o s s number ;
return o s s . s t r ( ) ;
}
4.3 Ðîáîòà ç ôàéëàìè
Äëÿ ðîáîòè ç ôàéëàìè ïîòðiáíî ïiäêëþ÷èòè áiáëiîòåêó cstdio.
Êîæåí ôàéë ó ïðîãðàìi ïðåäñòàâëÿ¹òüñÿ âêàçiâíèêîì íà òèï FILE.
FILE ∗ f ; // çàäà¹ìî ôàéëîâó çìiííó
// âiäêðèâà¹ìî ôàéë íà çàïèñ
f = f o p e n ( f i l e n a m e . t x t , w ) ;
f p r i n t f ( f , H e l l o ! n ) ; // âèâîäèìî ä à í i ó ôàéë
f c l o s e ( f ) ; // çàêðèâà¹ìî ôàéë
// âiäêðèâà¹ìî ôàéë íà ÷èòàííÿ
f = f o p e n ( f i l e n a m e . t x t , r ) ;
// ÷èòà¹ìî ðÿäîê ç ôàéëó ó çìiííó s
f s c a n f ( f , %s , s ) ;
// âiäêðèâà¹ìî ôàéë íà äîäàâàííÿ
f = f o p e n ( f i l e n a m e . t x t , a ) ;
Iñíóþòü i iíøi ðåæèìè âiäêðèòòÿ ôàéëiâ, çîêðåìà ôàéë ìîæíà
âiäêðèâàòè îäíî÷àñíî i äëÿ çàïèñó i äëÿ ÷èòàííÿ, ìîæíà ïðàöþ-
âàòè ç áiíàðíèìè ôàéëàìè òà ií. Ïîâíó iíôîðìàöiþ ïðî âèêîðè-
ñòàííÿ äàíèõ ôóíêöié ìîæíà çíàéòè ó âiäïîâiäíié ëiòåðàòóði.
Êðiì òîãî, ó C++ ç'ÿâèâñÿ ùå îäèí ñïîñiá ðîáîòè ç ôàéëàìè,
ó ñòèëi òèõ æå ïîòîêiâ. ßêùî ïiäêëþ÷èòè áiáëiîòåêó fstream, òî
ñò๠ìîæëèâèì âèêîðèñòîâóâàòè êëàñè ifstream òà ofstream äëÿ
ñòâîðåííÿ òà êåðóâàííÿ âiäïîâiäíî âõiäíèìè òà âèõiäíèìè ïîòî-
êàìè. Íàïðèêëàä ùîá âèâåñòè äàíi ó ôàéë ìîæíà ñêîðèñòàòèñÿ
òàêèì ñïîñîáîì:
o f s t r e a m f_out ;
f_out . open ( f i l e n a m e . t x t ) ;
f_out Ïåðøèé ðÿäîê e n d l ;
f_out Äðóãèé ðÿäîê e n d l ;
f_out . c l o s e ( ) ;
×èòàòè äàíi ç âõiäíîãî ôàéëó ìîæíà àáñîëþòíî àíàëîãi÷íî. Ïî-
òðiáíî ëèøå âèêîðèñòîâóâàòè êëàñ ifstream, à ñàì ïðîöåñ ç÷èòóâà-
ííÿ äàíèõ ¹ ïîâíiñòþ àíàëîãi÷íèì ðîáîòi çi ñòàíäàðòíèì ïîòîêîì
ââîäó cin.
4.4 Ìàòåìàòè÷íi ôóíêöi¨
Ôóíêöiÿ âçÿòòÿ àáñîëþòíîãî çíà÷åííÿ (ìîäóëÿ) ÷èñëà abs çíàõî-
äèòüñÿ ó áiáëiîòåöi cstdlib, iíøi ìàòåìàòè÷íi ôóíêöi¨ âèìàãàþòü
áiáëiîòåêó cmath.
sin, cos, tan òðèãîíîìåòðè÷íi ôóíêöi¨
asin, acos, atan îáåðíåíi òðèãîíîìåòðè÷íi ôóíêöi¨
sinh, cosh, tanh ãiïåðáîëi÷íi ôóíêöi¨
exp(x) ex
log íàòóðàëüíèé ëîãàðèôì
log10 äåñÿòêîâèé ëîãàðèôì
pow(a,b) ab
4.5 Âèïàäêîâi ÷èñëà
Ôóíêöi¨ äëÿ ãåíåðàöi¨ âèïàäêîâèõ ÷èñåë çîñåðåäæåíi ó áiáëiîòåöi
cstdlib. Ïåðø çà âñå, ùîá âèêëþ÷èòè ìîæëèâiñòü ïîâòîðåííÿ ÷è-
ñåë ïîòðiáíî ç äîïîìîãîþ ôóíêöi¨ srand iíiöiàëiçóâàòè ëi÷èëüíèê
äîâiëüíèì çíà÷åííÿì, íàéêðàùå äëÿ öüîãî ïiäiéäå ïîòî÷íèé ÷àñ:
s r a n d ( time (NULL ) ) ;
Äëÿ îòðèìàííÿ âëàñíå âèïàäêîâîãî ÷èñëà âèêîðèñòîâóþòü ôóí-
êöiþ rand, ÿêà ãåíåðó¹ âèïàäêîâå ÷èñëî ó äiàïàçîíi âiä 0 äî
RAND_MAX (íà ñó÷àñíèõ êîìï'þòåðàõ öå 2147483647). ßêùî ïîòði-
áíî çíàéòè ÷èñëî ó äiàïàçîíi âiä 0 äî 1, òî ðåçóëüòàò ïîòðiáíî
âiäïîâiäíèì ÷èíîì ïåðåðàõóâàòè.
x = rand ( ) ;
// çíàõîäèìî âèïàäêîâå ÷èñëî ó ä i à ï à ç î í i 0 . . 1
x = ( float) rand ( ) /RAND_MAX;
5 Îá'¹êòíî-îði¹íòîâàíå ïðîãðàìóâàííÿ
5.1 Ïîíÿòòÿ êëàñó òà îá'¹êòó
Îá'¹êòíî-îði¹íòîâàíå ïðîãðàìóâàííÿ öå ïàðàäèãìà ïðîãðàìó-
âàííÿ, ó ÿêié îñíîâíîþ êîíöåïöi¹þ ¹ âèêîðèñòàííÿ ïîíÿòòÿ îá'-
¹êò ÿêèé îòîòîæíþ¹òüñÿ ç îá'¹êòîì ó ïðåäìåòíié îáëàñòi. Ïåðøîþ
îá'¹êòíî-îði¹íòîâàíîþ ìîâîþ ïðîãðàìóâàííÿ áóëà Simula-67 ÿêà
íà ìîìåíò ñâ ïîÿâè, ó êiíöi 60-õ, ñåðéîçíî âèïåðåäèëà ñâié ÷àñ
i íå íàáóëà øèðîêîãî âæèòêó ÷åðåç íå ãîòîâíiñòü òîäiøíiõ ïðî-
ãðàìiñòiâ ñïðèéíÿòè íîâó êîíöåïöiþ ïðîãðàìóâàííÿ. Ñàìå Simula
íàäèõíóëà Áüÿðíà Ñòðàóñòðóïà íà ðåàëiçàöiþ êëàñiâ ó C++. ×î-
ìó âèíèêëà äàíà ïàðàäèãìà? Ñïðàâà ó òîìó, ùî ðàíî ÷è ïiçíî ïiä
÷àñ óñêëàäíåííÿ ïðîãðàìíîãî ïðîäóêòó íàñòóï๠òàêèé ìîìåíò, ùî
ó ðàìêàõ òðàäèöiéíîãî ïðîöåäóðíîãî ïiäõîäó ðîçâ'ÿçîê ïðîáëåìè
ñò๠äóæå ñêëàäíèì. Îá'¹êòíî-îði¹íòîâàíèé ïiäõiä äîçâîëÿ¹ ñóò-
ò¹âî ñïðîñòèòè çàäà÷i ìîäåëþâàííÿ ñêëàäíèõ ñèñòåì.
Âçàãàëi òåìà îá'¹êòíî-îði¹íòîâàíîãî ïðîãðàìóâàííÿ çàñëóãîâó¹
îêðåìî¨ âåëèêî¨ ðîçìîâè, òóò ìè ïîêè ïðîñòî îáìåæèìîñÿ îñîáëè-
âîñòÿìè ðåàëiçàöi¨. Îòæå, êëàñ (class) öå ïåâíà ñòðóêòóðà äà-
íèõ, ÿêà ñèëüíî íàãàäó¹ struct ïðîòå äîçâîëÿ¹ âêëþ÷àòè ó ñîáå
íå ëèøå çìiííi (âëàñòèâîñòi) àëå é ôóíêöi¨ (ìåòîäè). Òàêèé ïiäõiä
íàçèâà¹òüñÿ iíêàïñóëÿöi¹þ. Ïîêàæåìî ðåàëiçàöiþ ïðîñòîãî êëàñó
ÿêèé iíêàïñóëþ¹ ìåõàíiçì ðîáîòè ç ñèìâîëüíèìè ðÿäêàìè.
class my_string {
public:
void a s s i g n ( const char∗ s t r ) ;
int l e n g t h ( ) const { return l e n ; }
void p r i n t ( ) const
{ c o u t s e n d l ; }
private:
char s [ 2 2 5 ] ;
int l e n ;
} ; // çâåðíiòü óâàãó , òóò ì๠áóòè êðàïêà ç êîìîþ
void my_string : : a s s i g n ( const char∗ s t r ) {
delete [ ] s ;
l e n = s t r l e n ( s ) ;
s = new char[ l e n + 1 ] ;
s t r c p y ( s , s t r ) ;
}
Ðîçãëÿíåìî íàâåäåíèé êîä äîêëàäíiøå. ßê áà÷èìî, êëàñ äiéñíî
áàãàòî ÷èì íàãàäó¹ ñòðóêòóðó. Çà ¹äèíèì âèíÿòêîì êëàñ ìî-
æå âêëþ÷àòè ôóíêöi¨, ÿêi ïðèéíÿòî íàçèâàòè ìåòîäàìè. Êëþ÷îâi
ñëîâà public òà private çàäàþòü îáëàñòi âèäèìîñòi ÷ëåíiâ êëàñà.
Ó äàíîìó âèïàäêó çìiííi s òà len îãîëîøåíi ó ïðèâàòíié ÷àñòèíi
êëàñó, à öå îçíà÷à¹, ùî äîñòóï äî íèõ ìàþòü ëèøå ìåòîäè äàíî-
ãî êëàñó, ççîâíi çâåðíóòèñÿ äî íèõ íåìîæëèâî. Ïî çàìîâ÷óâàííþ
âñi åëåìåíòè êëàñó ¹ ïðèâàòíèìè ÿêùî íå âêàçàíî iíøîãî, öå äî-
çâîëÿ¹ âèêëþ÷èòè íåïåðåäáà÷åíi çìiíè ñòðóêòóðè äàíèõ. Öå îñî-
áëèâiñòü îá'¹êòíî-îði¹íòîâàíîãî ïðîãðàìóâàííÿ, âñi ìàíiïóëÿöi¨ ç
äàíèìè ïðèéíÿòî ðîáèòè ç äîïîìîãîþ ìåòîäiâ. Ìåòîäè length òà
print ñëóæàòü äëÿ ïîâåðíåííÿ äîâæèíè ðÿäêà òà âèâåäåííÿ ðÿäêà
íà åêðàí âiäïîâiäíî. Äèðåêòèâà const âêàçó¹ íà òå, ùî òiëà ìåòî-
äiâ çàäàþòüñÿ òóò æå âñåðåäèíi êëàñó. Ðåàëiçàöiÿ æ ìåòîäó assign
ÿêèé ñëóæèòü äëÿ ïåðåäà÷i ñèìâîëüíîãî ðÿäêó ó ïðèõîâàíó çìiííó
s âèíåñåíà íàçîâíi. Ìåòîäè îïèñóþòüñÿ òàê æå ñàìî ÿê i çâè÷àéíi
6
7. 5.4 Øàáëîíè 5 ÎÁ'™ÊÒÍÎ-ÎÐI™ÍÒÎÂÀÍÅ ÏÐÎÃÐÀÌÓÂÀÍÍß
ôóíêöi¨ àëå ïåðåä iì'ÿì îáîâ'ÿçêîâî ïîòðiáíî âêàçóâàòè iì'ÿ êëàñó
âiäîêðåìëåíå ñèìâîëàìè ::.
Òåïåð ïîãëÿíåìî ÿê ìîæíà âèêîðèñòàòè äàíèé êëàñ:
int main ( ) {
my_string s t ;
s t . a s s i g n ( Ïðèâiò ! ) ;
s t . p r i n t ( ) ;
c o u t Äîâæèíà s t = s t . l e n g t h ( ) ;
return 0 ;
}
ßê áà÷èìî äëÿ âèêëèêó ìåòîäiâ âèêîðèñòîâó¹òüñÿ îïåðàòîð
¾êðàïêà¿ (òàê ÿ i ó âèïàäêó çi ñòðóêòóðîþ). Çìiííà st çãiäíî òåð-
ìiíîëîãi¨ ÎÎÏ íàçèâà¹òüñÿ îá'¹êòîì êëàñó my_string.
5.2 Êîíñòðóêòîðè òà äåñòðóêòîðè
Ìåòîä, ¹äèíà ðîáîòà ÿêîãî ïîëÿã๠â iíiöiàëiçàöi¨ îá'¹êòó êëà-
ñó íàçèâà¹òüñÿ êîíñòðóêòîðîì (constructor). ×àñòî iíiöiàëiçàöiÿ
ïåðåäáà÷๠âèäiëåííÿ ïàì'ÿòi. Êîíñòðóêòîð âèêëèêà¹òüñÿ êîæíî-
ãî ðàçó ÿê ñòâîðþ¹òüñÿ íîâèé îá'¹êò äàíîãî êëàñó. Êîíñòðóêòîð
ç îäíèì âõiäíèì ïàðàìåòðîì ìîæå âèêîíóâàòè ïðèâåäåííÿ òè-
ïiâ ÿêùî òiëüêè íå çàäàíî êëþ÷îâå ñëîâî explicit. Äåñòðóêòîð
(destructor) öå ìåòîä, çàäà÷à ÿêîãî ïîëÿã๠ó òîìó, ùîá çàâåð-
øèòè iñíóâàííÿ çìiííî¨ êëàñó. Çàçâè÷àé öå ïåðåäáà÷๠çâiëüíåííÿ
çàéíÿòî¨ ïàì'ÿòi. Êîíñòðóêòîð îãîëîøó¹òüñÿ ÿê ìåòîä ç iì'ÿì iäåí-
òè÷íèì iìåíi êëàñó, à äåñòðóêòîð àíàëîãi÷íî àëå ïåðøîþ ëiòåðîþ
ñòàâèòüñÿ ñèìâîë ¾òèëüäà¿ (~).
class my_string {
public:
explicit my_string ( int n ) // êîíñòðóêòîð
{ s = new char[ n + 1 ] ; l q n = n ; }
~my_string ( ) { delete [ ] s ; } // äåñòðóêòîð
void a s s i g n ( const char∗ s t r ) ;
int l e n g t h ( ) const { return l e n ; }
void p r i n t ( ) const
{ c o u t s e n d l ; }
private:
char s [ 2 2 5 ] ;
int l e n ;
} ;
}
Òåïåð ó îñíîâíié ïðîãðàìi ìîæíà âèêîðèñòîâóâàòè êëàñ íàñòó-
ïíèì ÷èíîì:
my_string a ( 7 ) ;
a . a s s i g n ( Ïðèâiò ! ) ;
a . p r i n t ( ) ;
Äëÿ îäíîãî é òîãî æ êëàñó ìîæíà çàäàòè äåêiëüêà êîíñòðóêòî-
ðiâ, òîäi êîìïiëÿòîð áóäå îáèðàòè ç íèõ òîé ÿêèé ïiäõîäèòü ïî
âõiäíèì ïàðàìåòðàì. Íàïðèêëàä ìè ìîæåìî äîäàòè ùå îäèí êîí-
ñòðóêòîð íàñòóïíîãî âèãëÿäó:
my_string ( const char∗ p ) {
l e n = s t r l e n ( p ) ;
s = new char[ l e n + 1 ] ;
s t r c p y ( s , p ) ;
}
Òåïåð îá'¹êò ìîæíà îãîëîøóâàòè i òàê:
my_string a ( Ïðèâiò ! ) ;
Âçàãàëi ðåêîìåíäó¹òüñÿ òàêîæ ïåðåäáà÷èòè ùå é êîíñòðóêòîð
áåç àðãóìåíòiâ, àëå íå áóäåìî çîñåðåäæóâàòè íà öüîìó óâàãó.
5.3 Ïåðåâàíòàæóâàííÿ
Ïåðåâàíòàæóâàííÿì (overloading) íàçèâàþòü ïðàêòèêó ïðèçíà-
÷åííÿ äåêiëüêîõ çíà÷åíü îïåðàòîðó ÷è ôóíêöi¨. Íàïðèêëàä ìîæíà
ñòâîðèòè äåêiëüêà ìåòîäiâ ç îäíàêîâèì iì'ÿì àëå ç ðiçíèì íàáîðîì
ïàðàìåòðiâ i êîìïiëÿòîð àâòîìàòè÷íî áóäå îáèðàòè íåîáõiäíèé ìå-
òîä â çàëåæíîñòi âiä òîãî ç ÿêèìè ïàðàìåòðàìè äàíèé ìåòîä âèêëè-
êà¹òüñÿ. Íàïðèêëàä äî ìåòîäà print áåç ïàðàìåòðiâ ìîæíà äîäàòè
ùå é òàêèé:
void p r i n t ( int n ) const {
for( int i =0; i n;++ i )
c o u t s e n d l ;
}
Òåïåð ÿêùî ìè íàïèøåìî st.print(), òî ðÿäîê áóäå íàäðóêîâà-
íî ÿê i ðàíiøå îäèí ðàç, à ÿêùî íàïèøåìî st.print(5), òî ðÿäîê
íàäðóêó¹òüñÿ ï'ÿòü ðàçiâ.
Ïåðåâàíòàæóâàòè ìîæíà íå ëèøå ìåòîäè àëå é îïåðàòîðè. Íà-
ïðèêëàä ìè ìîæåìî íàâ÷èòè ñòàíäàðòíèé îïåðàòîð äîäàâàííÿ +
âèêîíóâàòè îïåðàöiþ êîíêàòåíàöi¨ äâîõ ðÿäêiâ òèïó my_string.
my_string operator+(const my_string a ,
const my_string b ) {
my_string ∗ temp=new my_string ( a . l e n+b . l e n ) ;
s t r c p y ( temp−s , a . s ) ;
s t r c a t ( temp−s . b . s ) ;
return ∗temp ;
}
Òåïåð ìîæíà âèêîðèñòîâóâàòè íàñòóïíi êîíñòðóêöi¨:
my_string one ( H e l l o ) , two ( C++! ) ;
my_string both ;
both = one + two ;
// òåïåð b o t h ìiñòèòü ðÿäîê H e l l o C++!
Âèêîðèñòàííÿ ó îïèñi îïåðàòîðó îçíà÷à¹, ùî ïàðàìåòðè ïåðå-
äàþòüñÿ çà ïîñèëàííÿì, à êëþ÷îâå ñëîâî const âêàçó¹, ùî ¨õ íå
ìîæíà çìiíþâàòè. Öå ñòàíäàðòíà ôîðìà çàïèñó äëÿ áiíàðíèõ îïå-
ðàòîðiâ. Îïåðàòîð - âèêîðèñòîâó¹òüñÿ çàìiñòü êðàïêè ó òîìó âè-
ïàäêó êîëè îá'¹êò ñòâîðþ¹òüñÿ íà åòàïi âèêîíàííÿ (îïåðàòîð new),
à íå êîìïiëÿöi¨.
5.4 Øàáëîíè
Øàáëîíè âèêîðèñòîâóþòüñÿ ó C++ äëÿ çàáåçïå÷åííÿ óçàãàëü-
íåíîãî ïðîãðàìóâàííÿ. Íó íàïðèêëàä âè ïèøåòå êëàñ ÿêèé áè ií-
êàïñóëþâàâ ó ñîái ôóíêöiîíàëüíiñòü ñòåêó äàíèõ, àëå ïðè öüîìó
âè ìîæåòå íå îáìåæóâàòèñÿ ðåàëiçàöi¹þ ñòåêó äëÿ ÿêîãîñü îäíîãî
òèïó äàíèõ, à çàìiñòü öüîãî ìîæåòå îïåðóâàòè ç ÿêèìîñü àáñòðà-
êòíèì òèïîì, íàçâåìî éîãî íàïðèêëàä TYPE. Òîäi âñå, ùî ïîòðiáíî
òî öå ìîäèôiêóâàòè îãîëîøåííÿ êëàñó íàñòóïíèì ÷èíîì:
template class TYPE
class s t a c k {
. . . . .
private:
. . . . .
TYPE∗ s ;
} ;
À îá'¹êò òàêîãî êëàñó ñòâîðþ¹òüñÿ íàñòóïíèì ÷èíîì:
s t a c k char stk_ch ; // ñòåê ñèìâîëiâ
s t a c k double stk_ch ; // ñòåê äðîáîâèõ ÷èñåë
Òàêèì ÷èíîì óçàãàëüíåíå ïðîãðàìóâàííÿ äîçâîëÿ¹ ñóòò¹âî åêî-
íîìèòè îá'¹ì êîäó, áî íàïèñàíèé îäíîãî ðàçó êîä ìîæíà âèêîðè-
ñòîâóâàòè áàãàòî ðàçiâ.
5.5 Íàñëiäóâàííÿ
Îñîáëèâiñòþ ÎÎÏ ¹ íàäàííÿ ïåðåâàãè ïîâòîðíîìó âèêîðèñòàí-
íþ êîäó çà äîïîìîãîþ ìåõàíiçìó íàñëiäóâàííÿ. Íàïðèêëàä ó íàñ
¹ êëàñ fruit ÿêèé îïèñó¹ ÿêèéñü óçàãàëüíåíèé ôðóêò, òàêèé êëàñ
íàçèâà¹òüñÿ áàçîâèì. Òåïåð ìè ìîæåìî ñòâîðèòè êëàñ apple ïî-
ðîäæåíèé âiä êëàñó fruit i ÿêèé îêðiì âæå îïèñàíèõ ó áàçîâîìó
êëàñi âëàñòèâîñòåé ôðóêòà iíêàïñóëþ¹ ùå é îðèãiíàëüíi âëàñòè-
âîñòi ÿáëóêà. Äàëi ìè ìîæåìî âiä òîãî æ êëàñó fruit ïîðîäèòè
êëàñ pear ÿêèé áóäå îïèñóâàòè ãðóøi, à âiä êëàñó apple ïîðîäè-
òè êëàñè macintosh òà crispin ÿêi äîäàòêîâî ùå áóäóòü îïèñóâàòè
âëàñòèâîñòi ðiçíèõ ñîðòiâ ÿáëóê. Îñü òàêèì ÷èíîì áóäó¹òüñÿ i¹ðàð-
õiÿ êëàñiâ. Ùîá âêàçàòè êîìïiëÿòîðó, ùî äàíèé êëàñ ïîðîäæåíèé
âiä iíøîãî êëàñó ïîòðiáíî ïiñëÿ iìåíi êëàñó äîïèñàòè : public òà
iì'ÿ áàçîâîãî êëàñó.
class s t u d e n t {
. . . . .
} ;
7
8. 6 ÁIÁËIÎÒÅÊÀ ØÀÁËÎÍIÂ STL
class grad_student : public s t u d e n t {
. . . . .
} ;
Ïðè öüîìó âñi ìåòîäè òà çìiííi áàçîâîãî êëàñó àâòîìàòè÷íî áó-
äóòü ïðåäñòàâëåíi i ó íîâîìó êëàñi, äóáëþâàòè ïðè îïèñi ¨õ íå ïî-
òðiáíî. Íàòîìiñòü ìîæíà äîäàâàòè äîäàòêîâi çìiííi òà ìåòîäè. Äî-
ïóñêà¹òüñÿ òàêîæ ìíîæèííå íàñëiäóâàííÿ, òîäi iìåíà áàçîâèõ êëà-
ñiâ âiäîêðåìëþþòüñÿ êîìàìè, àëå ìíîæèííîãî íàñëiäóâàííÿ êðà-
ùå ïî ìîæëèâîñòi íå äîïóñêàòè.
5.6 Ïîëiìîðôiçì
Ïiä ïîëiìîðôiçìîì ðîçóìiþòü ñèòóàöiþ êîëè îäíà é òà æ ôóí-
êöiÿ ÷è îïåðàòîð ìàþòü äåêiëüêà âàðiàíòiâ. Íàïðèêëàä ñòàíäàð-
òíèé îïåðàòîð äiëåííÿ ó C++ ¹ ïîëiìîðôíèì, áî êîëè âií çàñòîñî-
âó¹òüñÿ äî äðîáîâèõ ÷èñåë, òî ðåçóëüòàòîì éîãî âèêîíàííÿ òàêîæ
áóäå äðîáîâå ÷èñëî, à ÿêùî äiëÿòüñÿ öiëi ÷èñëà, òî i ðåçóëüòàò áóäå
öiëèì ÷èñëîì íàâiòü ÿêùî äëÿ öüîãî äîâåäåòüñÿ âiäêèíóòè äðîáî-
âó ÷àñòèíó. ßêùî ãîâîðèòè ïðî êëàñè, òî òóò ïiä ïîëiìîðôiçìîì
ðîçóìiþòü ñèòóàöiþ êîëè ó i¹ðàðõi¨ êëàñiâ çóñòði÷àþòüñÿ îäíàêîâi
ìåòîäè, òîäi ïðè âèêîíàííi ïðîãðàìè áóäå îáèðàòèñÿ íåîáõiäíèé.
Íó íàïðèêëàä ìè ìà¹ìî êëàñ shape òà ïîðîäæåíi âiä íüîãî êëàñè
rect òà circle, i ó êîæíîìó ç íèõ ¹ ìåòîä draw ÿêèé ñëóæèòü äëÿ
âèâåäåííÿ íà åêðàí äàíî¨ ôiãóðè.
class shape {
. . . . .
public:
virtual void draw ( )
{ draw_nothing ; }
} ;
class r e c t : public shape {
. . . . .
public:
virtual void draw ( )
{ draw_rect ; }
} ;
class c i r c l e : public shape {
. . . . .
public:
virtual void draw ( )
{ d r a w _ c i r c l e ; }
} ;
Äèðåêòèâà virtual çàä๠âiðòóàëüíèé ìåòîä (ÿê i ó Pascal), öå
îçíà÷à¹, ùî äàíèé ìåòîä òåïåð áóäå ïîëiìîðôíèì. Ùî öå îçíà÷à¹
ìîæíà ïîêàçàòè íà ïðèêëàäi:
shape ∗ s1 , s 2 ;
s 1 = new r e c t ( ) ;
s 2 = new c i r c l e ( ) ;
s1−draw ( ) ; // Ìàëþ¹ìî ïðÿìîêóòíèê
s2−draw ( ) ; // Ìàëþ¹ìî êîëî
I îñü òóò ìè áà÷èìî ó äi¨ îäèí ç íàéâàæëèâiøèõ ïðèíöèïiâ ÎÎÏ.
Ïîëiìîðôiçì äîçâîëÿ¹ çâåðòàþ÷èñü äî îäíîãî é òîãî æ ìåòîäó áà-
çîâîãî êëàñó îòðèìóâàòè ðiçíèé ðåçóëüòàò â çàëåæíîñòi âiä òîãî
ÿêîãî æ â äiéñíîñòi êëàñó ¹ îá'¹êò. Íàñïðàâäi, ìè ìîæåìî íàâiòü
ïðî öå íå çíàòè, àëå ãðàìîòíî ïîáóäóâàâøè i¹ðàðõiþ êëàñiâ ìè ìî-
æåìî âiëüíî îïåðóâàòè îá'¹êòàìè ðiçíèõ êëàñiâ íàâiòü ïðî öå íå
äóìàþ÷è. Ïîòðiáíî òiëüêè çâåðíóòè óâàãó, ùî ÿêáè ìè íå âèêîðè-
ñòàëè äèðåêòèâó virtual ó áàçîâîìó êëàñi, òî ñêîðèñòàòèñÿ ïîëi-
ìîðôiçìîì ìè á íå çìîãëè, â îáîõ áè âèïàäêàõ âèêëèêàâñÿ á ìåòîä
draw áàçîâîãî êëàñó shape. Àêòèâíå âèêîðèñòàííÿ ïîëiìîðôiçìó
÷àñòî ïðèçâîäèòü äî ïîÿâè ó i¹ðàðõi¨ òàê çâàíèõ àáñòðàêòíèõ êëà-
ñiâ ç àáñòðàêòíèìè ìåòîäàìè. Òàêi êëàñè íå iíêàïñóëþþòü ó ñåáå
æîäíó ôóíêöiîíàëüíiñòü, à ïðîñòî ¹ øàáëîíàìè äëÿ ñòâîðåííÿ íà
¨õ áàçi íîâèõ êëàñiâ i äëÿ òîãî ùîá ìîæíà áóëî äî íèõ çâåðòàòèñÿ.
5.7 Îñîáëèâi ñèòóàöi¨
Äóæå âàæëèâèì ìîìåíòîì ïðè íàïèñàííi ÿêiñíèõ ïðîãðàì ¹ ïå-
ðåäáà÷åííÿ ïîìèëîê ÿêi ìîæóòü âèíèêàòè âíàñëiäîê äié êîðèñòó-
âà÷à i êîðåêòíå âiäíîâëåííÿ ðîáîòè ïiñëÿ îáðîáêè òàêî¨ ñèòóàöi¨.
Äëÿ îáðîáêè ïîìèëîê ó C++ ïåðåäáà÷åíî òåðìií ¾îñîáëèâà ñèòó-
àöiÿ¿ (exception). Äëÿ ñëiäêóâàííÿ çà òàêèìè ñèòóàöiÿìè ñëóæèòü
áëîê try, îáðîáíèêè çàäàþòüñÿ áëîêàìè catch, à áåçïîñåðåäíüî
îñîáëèâà ñèòóàöiÿ ãåíåðó¹òüñÿ îïåðàòîðîì throw. Íó íàïðèêëàä
ìè ìà¹ìî êëàñ vect, éîãî êîíñòðóêòîð íàìàãà¹òüñÿ ïðè ñòâîðåííi
îá'¹êòó âèäiëèòè ïàì'ÿòü i ó âèïàäêó ÿêùî öå íå âäà¹òüñÿ ãåíå-
ðó¹ îñîáëèâó ñèòóàöiþ ç äîïîìîãîþ throw. Îñêiëüêè îá'¹êòè a òà
b êëàñó vect ñòâîðþþòüñÿ ó ìåæàõ îïåðàòîðó try, òî ó ðàçi âèíè-
êíåííÿ òàêi ñèòóàöi¨ ïåðåõîïëþþòü i äàëi óïðàâëiííÿ ïåðåäà¹òüñÿ
âiäïîâiäíîìó ïî íàáîðó âõiäíèõ ïàðàìåòðiâ áëîêó catch.
v e c t : : v e c t ( int n ) : s i z e ( n ) {
if( n 1 )
throw( n ) ;
p = new int[ n ] ;
if( p == 0 )
throw( Íåì๠ïàì ' ÿ ò i ) ;
}
void g ( ) {
try {
v e c t a ( n ) , b ( n ) ;
. . .
}
// íåâiðíèé ðîçìið
catch( int n ) { . . . }
// íåì๠ïàì ' ÿòi
catch( char∗ e r r o r ) { . . . }
}
Òàêèì ÷èíîì ó ðàçi âèíèêíåííÿ ïîìèëêè ó ïðîãðàìè ¹ øàíñ
ïðèéíÿòè íåîáõiäíi ìiðè i ñïðîáóâàòè ïîâòîðèòè çàïëàíîâàíó äiþ.
Ïîòðiáíî ðîçóìiòè, ùî ñëiäêóâàííÿ çà îñîáëèâèìè ñèòóàöiÿìè íå
ëiêâiäîâó¹ ïîìèëêè, à ëèøå äîçâîëÿ¹ ¨õ ëîêàëiçóâàòè i çàõèù๠âiä
àâàðiéíîãî çàâåðøåííÿ ïðîãðàìè.
6 Áiáëiîòåêà øàáëîíiâ STL
6.1 Êîíòåéíåðè
Ñòàíäàðòíà áiáëiîòåêà øàáëîíiâ (STL, Standard Template Li-
brary) ¹ ñòàíäàðòíîþ áiáëiîòåêîþ C++ ÿêà íàä๠ìîæëèâîñòi óçà-
ãàëüíåíîãî ïðîãðàìóâàííÿ. Òðüîìà ¨¨ êîìïîíåíòàìè ¹: êîíòåéíåðè,
iòåðàòîðè òà àëãîðèòìè. Áiáëiîòåêó ïîáóäîâàíî ç âèêîðèñòàííÿì
øàáëîíiâ òîìó ¨¨ êîìïîíåíòè ìîæóòü ïðàöþâàòè ç áóäü-ÿêèìè òè-
ïàìè äàíèõ.
Êîíòåéíåðè äiëÿòüñÿ íà äâi îñíîâíi ðîäèíè: ïîñëiäîâíi êîíòåéíå-
ðè òà àñîöiàòèâíi êîíòåéíåðè. Ïîñëiäîâíi êîíòåéíåðè âêëþ÷àþòü
âåêòîðè (vectors), ñïèñêè (lists) òà äâîñòîðîííi ÷åðãè (deques). Òà-
êi êîíòåéíåðè ïðàöþþòü ç ïîñëiäîâíîñòÿìè åëåìåíòiâ. Àñîöiàòèâ-
íi êîíòåéíåðè âêëþ÷àþòü ìíîæèíè (sets), ìóëüòèìíîæèíè (multi-
sets), âiäîáðàæåííÿ (maps) òà ìóëüòèâiäîáðàæåííÿ (multimaps), i
ìiñòÿòü êëþ÷i äëÿ ïîøóêó åëåìåíòiâ. Óñi âàðiàíòè êîíòåéíåðiâ ìà-
þòü ñõîæèé iíòåðôåéñ.
Âåêòîð çàä๠çâè÷àéíèé äèíàìi÷íèé ìàñèâ. Äëÿ ñòâîðåííÿ íîâî-
ãî âåêòîðó âèêîðèñòîâó¹òüñÿ êîíñòðóêöiÿ vectoròèï çìiííà. Ìå-
òîä push_back ñëóæèòü äëÿ äîäàâàííÿ åëåìåíòà ó êiíåöü âåêòîðó.
Ìåòîä size ïîâåðò๠ðîçìið âåêòîði, à âèêîðèñòîâóþ÷è êâàäðàòíi
äóæêè äî åëåìåíòiâ âåêòîðó ìîæíà çâåðòàòèñÿ òàê æå ñàìî ÿê i äî
åëåìåíòiâ ìàñèâó. Ïîòðiáíî ùå çâåðíóòè óâàãó íà ïîíÿòòÿ iòåðà-
òîðà. Éîãî ìîæíà óÿâèòè ÿê óäîñêîíàëåíèé âêàçiâíèê, ÿêùî ïðî-
àíàëiçóâàòè òåêñò ïðèêëàäó, òî ìîæíà ëåãêî çðîçóìiòè ïðèíöèïè
ðîáîòè ç iòåðàòîðàìè i áåç äîäàòêîâèõ ïîÿñíåíü.
#include i o s t r e a m
#include v e c t o r // ïîòðiáíî ïiäêëþ÷èòè
#include s t r i n g
using namespace s t d ;
main ( )
{
v e c t o r s t r i n g SS ;
SS . push_back ( ×èñëî 10 ) ;
SS . push_back ( ×èñëî 20 ) ;
SS . push_back ( ×èñëî 30 ) ;
c o u t Âèâîäèìî âåêòîð : e n d l ;
8
9. ËIÒÅÐÀÒÓÐÀ
int i i ;
for( i i =0; i i SS . s i z e ( ) ; i i ++)
{
c o u t SS [ i i ] e n d l ;
}
c o u t e n d l Iòåðàòîð : e n d l ;
v e c t o r s t r i n g : : c o n s t _ i t e r a t o r c i i ;
for( c i i =SS . b e g i n ( ) ; c i i !=SS . end ( ) ; c i i ++)
{
c o u t ∗ c i i e n d l ;
}
c o u t e n d l Çâîðîòíié i ò å ð à ò î ð : e n d l ;
v e c t o r s t r i n g : : r e v e r s e _ i t e r a t o r r i i ;
for( r i i =SS . r b e g i n ( ) ; r i i !=SS . rend ( ) ; ++r i i )
{
c o u t ∗ r i i e n d l ;
}
c o u t e n d l Ïðèêëàäè âèâîäó : e n d l ;
c o u t SS . s i z e ( ) e n d l ;
c o u t SS [ 2 ] e n d l ;
swap ( SS [ 0 ] , SS [ 2 ] ) ;
c o u t SS [ 2 ] e n d l ;
}
Ç äîïîìîãîþ âåêòîðiâ ìîæíà çàäàâàòè i áàãàòîâèìiðíi ìàñèâè,
íàïðèêëàä ìàòðèöi.
v e c t o r v e c t o r int v I 2 M a t r i x ( 3 , v e c t o r int ( 2 , 0 ) ) ;
v I 2 M a t r i x [ 0 ] [ 0 ] = 0 ;
v I 2 M a t r i x [ 0 ] [ 1 ] = 1 ;
v I 2 M a t r i x [ 1 ] [ 0 ] = 1 0 ;
v I 2 M a t r i x [ 1 ] [ 1 ] = 1 1 ;
v I 2 M a t r i x [ 2 ] [ 0 ] = 2 0 ;
v I 2 M a t r i x [ 2 ] [ 1 ] = 2 1 ;
Ñïèñîê ¹ ñõîæèì íà âåêòîð àëå äîçâîëÿ¹ âñòàâëÿòè òà âèäàëÿòè
îá'¹êòè ó áóäü-ÿêîìó ïîðÿäêó.
#include i o s t r e a m
#include l i s t
using namespace s t d ;
main ( )
{
l i s t int L ;
L . push_back ( 0 ) ; // Äîäà¹ìî åëåìåíò â ê i í å ö ü
// Âñòàâëÿ¹ìî åëåìåíò íà ïî÷àòêó
L . push_front ( 0 ) ;
// Âñòàâëÿ¹ìî 2 ïåðåä ïåðøèì åëåìåíòîì
L . i n s e r t (++L . b e g i n ( ) , 2 ) ;
L . push_back ( 5 ) ;
L . push_back ( 6 ) ;
l i s t int : : i t e r a t o r i ;
for( i=L . b e g i n ( ) ; i != L . end ( ) ; ++i )
c o u t ∗ i ;
c o u t e n d l ;
return 0 ;
}
6.2 Àñîöiàòèâíi êîíòåéíåðè
Àñîöiàòèâíi êîíòåéíåðè ìiñòÿòü äîñòóïíi ïî êëþ÷ó åëåìåíòè òà
âiäíîøåííÿ Compare, ÿêå ¹ ïîðiâíÿëüíèì îá'¹êòîì àñîöiàòèâíîãî
êîíòåéíåðó.
#include i o s t r e a m
#include map
#include s t r i n g
using namespace s t d ;
int main ( ) {
maps t r i n g , int , l e s s s t r i n g name_age ;
name_age [ Ãàðði ] = 1 2 ;
name_age [ Ôðåä ] = 1 4 ;
name_age [ Ïåðñi ] = 1 7 ;
c o u t Ãàðði name_age [ Ãàðði ]
ð î ê i â . e n d l ;
}
Òóò âiäîáðàæåííÿ name_age ¹ àñîöiàòèâíèì ìàñèâîì ó ÿêîìó
êëþ÷îì ¹ òèï string. Îá'¹êò Compare öå lessstring.
Áiëüøå ïðî áiáëiîòåêó øàáëîíiâ STL ìîæíà âçíàòè ç âiäïîâiäíî¨
ëiòåðàòóðè. Öå äîñèòü øèðîêà òåìà ÿêó íàâðÿä ÷è ìîæíà îñâiòèòè
ñòèñëî.
7 Iíòåãðîâàíi ñåðåäîâèùà äëÿ C++
Microsoft Visual C++ ïîòóæíà êîìåðöiéíà ñèñòåìà ðîçðîá-
êè íà C++ äëÿ îïåðàöiéíèõ ñèñòåì ðîäèíè Windows ðîçðîáëåíà
ôiðìîþ Microsoft. Ïiñëÿ âåðñi¨ 6.0 Microsoft ïðîâåëà ñâî¹ðiäíó ðå-
âîëþöiþ ç äîïîìîãîþ âëàñíî¨ òåõíîëîãi¨ .NET. Ç öüîãî ìîìåíòó
íàìiòèâñÿ âiäõiä âiä âæå ìîðàëüíî çàñòàðiëî¨ áiáëiîòåêè MFC äî
âèêîðèñòàííÿ WinForms. Ïðàöþ¹ ëèøå íà ïëàòôîðìi Windows.
Borland C++ Builder êîìåðöiéíå iíòåãðîâàíå ñåðåäîâèùå
ôiðìè CodeGear (áóâøà Borland) äëÿ ðîçðîáêè ïðîãðàì íà C++.
Ñèëüíî ñõîæèé íà Delphi çà âèíÿòêîì âëàñíå ìîâè ïðîãðàìóâàííÿ.
Ïðàöþ¹ íà ïëàòôîðìi Windows.
Eclipse ñèñòåìà ðîçðîáêè ç âiäêðèòèì êîäîì ñïîíñîðîâàíà
ôiðìîþ IBM. Ñòâîðþâàëàñÿ ÿê ñåðåäîâèùå ðîçðîáíèêà íà Java
àëå çàâäÿêè ãíó÷êié àðõiòåêòóði ç ïiäòðèìêîþ ïëàãiíiâ äîçâîëÿ¹
ðîçðîáëÿòè ïðîåêòè íà ðiçíèõ ìîâàõ, ó òîìó ÷èñëi íà C++. Äëÿ
êîìïiëÿöi¨ âèêîðèñòîâó¹ çîâíiøíié êîìïiëÿòîð, íàïðèêëàä GCC.
Ïiäòðèìó¹ Linux, Windows, MacOS X, Solaris, AIX, QNX.
KDevelop áàçîâå iíòåãðîâàíå ñåðåäîâèùå äëÿ KDE íà ïëà-
òôîðìi UNIX-like ç âiäêðèòèì êîäîì. Ñèñòåìà îði¹íòó¹òüñÿ íà âè-
êîðèñòàííÿ áiáëiîòåê Qt ôiðìè Trolltech äëÿ ïðîãðàìóâàííÿ ãðà-
ôi÷íîãî iíòåðôåéñó. Ó ÿêîñòi êîìïiëÿòîðà âèêîðèñòîâó¹òüñÿ çîâíi-
øíié, çàçâè÷àé GCC. Ïiäòðèìó¹ ïðàêòè÷íî âñi UNIX-like ñèñòåìè,
õî÷à áiëüøå îði¹íòó¹òüñÿ íà Linux.
Anjuta DevStudio iíòåãðîâàíå ñåðåäîâèùå ç âiäêðèòèì êî-
äîì, ùî ðîçðîáëÿ¹òüñÿ ó ðàìêàõ ïðîåêòó Gnome. Äëÿ ïîáóäîâè
ãðàôi÷íîãî iíòåðôåéñó ñèñòåìà ñõèëÿ¹òüñÿ äî áiáëiîòåê GTK+.
Âèêîðèñòîâó¹ çîâíiøíié êîìïiëÿòîð GCC. Ïiäòðèìó¹ ïðàêòè÷íî
âñi UNIX-like ñèñòåìè.
Íàáàãàòî áiëüøèé ïåðåëiê ðiçíîìàíiòíèõ iíòåãðîâàíèõ ñåðå-
äîâèù ðîçðîáêè äëÿ C++ ìîæíà çíàéòè íà ñàéòi Wikipedia:
http://en.wikipedia.org/wiki/Category:Integrated_development_environments
Web-ðåñóðñè
1. http://www.cppreference.com/
2. http://www.cprogramming.com/
3. http://www.cplusplus.com/doc/tutorial/
4. http://www.yolinux.com/TUTORIALS/
Ëiòåðàòóðà
1. Àéðà Ïîë. Îáúåêòíî-îðèåíòèðîâàííîå ïðîãðàììèðîâàíèå íà
C++. 1999.
2. Robert L Wood. C Programming for Scientists Engineers. 2002.
3. Charles Wright. Visual C++ 6 for Dummies. Quick Reference.
Äàíèé äîâiäíèê ¹ àâòîðñüêîþ ðîáîòîþ i ðîçïîâñþäæó¹òüñÿ çãiäíî âèìîã ëi-
öåíçi¨ Creative Commons: BY-NC-SA.
9