Вы находитесь на странице: 1из 21

Ñîäåðæàíèå

Ïðåäèñëîâèå . . . . . . . . . . . . . . . . . . . . . 24
Ââåäåíèå . . . . . . . . . . . . . . . . . . . . . . . 25
Íîâûå êîíöåïöèè ïðîãðàììèðîâàíèÿ . . . . . . . . . . . . . . . . . . . . . . . 25
Îáúåêòíî-îðèåíòèðîâàííîå ïðîãðàììèðîâàíèå . . . . . . . . . . . . . . . . . 25
Óíèôèöèðîâàííûé ÿçûê ìîäåëèðîâàíèÿ . . . . . . . . . . . . . . . . . . . . . 26
ßçûêè è ïëàòôîðìû ðàçðàáîòêè . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Äëÿ ÷åãî íóæíà ýòà êíèãà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Íîâûå êîíöåïöèè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Ïîñëåäîâàòåëüíîñòü èçëîæåíèÿ ìàòåðèàëà . . . . . . . . . . . . . . . . . . 27
Çíàíèÿ, íåîáõîäèìûå äëÿ ÷òåíèÿ ýòîé êíèãè . . . . . . . . . . . . . . . . . 28
Òåõíè÷åñêîå è ïðîãðàììíîå îáåñïå÷åíèå. . . . . . . . . . . . . . . . . . . . . 28
Êîíñîëüíûå ïðîãðàììû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Èñõîäíûå òåêñòû ïðîãðàìì . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Óïðàæíåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Ïðîùå, ÷åì êàæåòñÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Ïðåïîäàâàòåëÿì . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Ñòàíäàðòíûé C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Óíèôèöèðîâàííûé ÿçûê ìîäåëèðîâàíèÿ (UML) . . . . . . . . . . . . . . . . 29
Ñðåäñòâà ðàçðàáîòêè ïðîãðàììíîãî îáåñïå÷åíèÿ . . . . . . . . . . . . . . . 30
Ðàçëè÷èÿ ìåæäó C è C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Îïòèìàëüíûé ïîðÿäîê èçó÷åíèÿ ÎÎÏ . . . . . . . . . . . . . . . . . . . . . 30
Íîâîââåäåíèÿ â C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Èçáûòî÷íûå âîçìîæíîñòè . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Óïðàæíåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Îò èçäàòåëüñòâà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

Ãëàâà 1. Îáùèå ñâåäåíèÿ . . . . . . . . . . . . . . . 32


Äëÿ ÷åãî íóæíî îáúåêòíî-îðèåíòèðîâàííîå ïðîãðàììèðîâàíèå? . . . . . . . . . 32
Ïðîöåäóðíûå ÿçûêè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Äåëåíèå íà ôóíêöèè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Íåäîñòàòêè ñòðóêòóðíîãî ïðîãðàììèðîâàíèÿ . . . . . . . . . . . . . . . . . 33
Íåêîíòðîëèðóåìûé äîñòóï ê äàííûì . . . . . . . . . . . . . . . . . . . . . 34
Ìîäåëèðîâàíèå ðåàëüíîãî ìèðà . . . . . . . . . . . . . . . . . . . . . . . 35
Îáúåêòíî-îðèåíòèðîâàííûé ïîäõîä . . . . . . . . . . . . . . . . . . . . . . . 36
Àíàëîãèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
ÎÎÏ: ïîäõîä ê îðãàíèçàöèè ïðîãðàììû . . . . . . . . . . . . . . . . . . . . 38
8 Ñîäåðæàíèå

Õàðàêòåðèñòèêè îáúåêòíî-îðèåíòèðîâàííûõ ÿçûêîâ . . . . . . . . . . . . . . . 38


Îáúåêòû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Êëàññû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Íàñëåäîâàíèå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Ïîâòîðíîå èñïîëüçîâàíèå êîäà . . . . . . . . . . . . . . . . . . . . . . . . 42
Ïîëüçîâàòåëüñêèå òèïû äàííûõ . . . . . . . . . . . . . . . . . . . . . . . . 42
Ïîëèìîðôèçì è ïåðåãðóçêà . . . . . . . . . . . . . . . . . . . . . . . . . . 42
C++ è C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Èçó÷åíèå îñíîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Óíèâåðñàëüíûé ÿçûê ìîäåëèðîâàíèÿ (UML) . . . . . . . . . . . . . . . . . . . . 44
Ðåçþìå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Âîïðîñû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

Ãëàâà 2. Îñíîâû ïðîãðàììèðîâàíèÿ íà C++ . . . . . . . 48


×òî íåîáõîäèìî äëÿ ðàáîòû . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Ñòðóêòóðà ïðîãðàììû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Ôóíêöèè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Îïåðàòîðû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Ðàçäåëÿþùèå çíàêè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Âûâîä ñ èñïîëüçîâàíèåì cout . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Ñòðîêîâûå êîíñòàíòû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Äèðåêòèâû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Äèðåêòèâû ïðåïðîöåññîðà . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Çàãîëîâî÷íûå ôàéëû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Äèðåêòèâà using . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Êîììåíòàðèè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Ñèíòàêñèñ êîììåíòàðèåâ . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Èñïîëüçîâàíèå êîììåíòàðèåâ . . . . . . . . . . . . . . . . . . . . . . . . . 56
Àëüòåðíàòèâíûé âèä êîììåíòàðèåâ . . . . . . . . . . . . . . . . . . . . . . 56
Ïåðåìåííûå öåëîãî òèïà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Îïèñàíèå ïåðåìåííûõ öåëîãî òèïà . . . . . . . . . . . . . . . . . . . . . . 57
Îáúÿâëåíèå è îïðåäåëåíèå ïåðåìåííîé . . . . . . . . . . . . . . . . . . . 58
Èìåíà ïåðåìåííûõ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Îïåðàöèÿ ïðèñâàèâàíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Öåëûå êîíñòàíòû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Îïåðàòîð âûâîäà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Ìàíèïóëÿòîð endl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Äðóãèå öåëûå òèïû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Ñèìâîëüíûå ïåðåìåííûå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Ñèìâîëüíûå êîíñòàíòû . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Èíèöèàëèçàöèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Óïðàâëÿþùèå ïîñëåäîâàòåëüíîñòè . . . . . . . . . . . . . . . . . . . . . . 63
Ââîä ñ ïîìîùüþ cin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Îïðåäåëåíèå ïåðåìåííûõ ïðè ïåðâîì èñïîëüçîâàíèè . . . . . . . . . . . . 65
Êàñêàäèðîâàíèå îïåðàöèè << . . . . . . . . . . . . . . . . . . . . . . . . . 66
Âûðàæåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Ïðèîðèòåòû âûïîëíåíèÿ îïåðàöèé . . . . . . . . . . . . . . . . . . . . . . 66
Âåùåñòâåííûå òèïû. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Òèï float . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Ñîäåðæàíèå 9

Òèïû double è long double . . . . . . . . . . . . . . . . . . . . . . . . . . . 68


Âåùåñòâåííûå êîíñòàíòû . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Ïðåôèêñ const . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Äèðåêòèâà #define . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Òèï bool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Ìàíèïóëÿòîð setw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Êàñêàäèðîâàíèå îïåðàöèè << . . . . . . . . . . . . . . . . . . . . . . . . . 72
Ìíîæåñòâåííîå îïðåäåëåíèå . . . . . . . . . . . . . . . . . . . . . . . . . 72
Ôàéë çàãîëîâêà IOMANIP . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Òàáëèöà òèïîâ ïåðåìåííûõ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Áåççíàêîâûå òèïû äàííûõ . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Ïðåîáðàçîâàíèÿ òèïîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Íåÿâíûå ïðåîáðàçîâàíèÿ òèïîâ . . . . . . . . . . . . . . . . . . . . . . . . 75
ßâíûå ïðåîáðàçîâàíèÿ òèïîâ . . . . . . . . . . . . . . . . . . . . . . . . . 77
Àðèôìåòè÷åñêèå îïåðàöèè . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Îñòàòîê îò äåëåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Àðèôìåòè÷åñêèå îïåðàöèè ñ ïðèñâàèâàíèåì . . . . . . . . . . . . . . . . . 79
Èíêðåìåíò . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Äåêðåìåíò . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Áèáëèîòå÷íûå ôóíêöèè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Çàãîëîâî÷íûå ôàéëû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Áèáëèîòå÷íûå ôàéëû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Çàãîëîâî÷íûå è áèáëèîòå÷íûå ôàéëû. . . . . . . . . . . . . . . . . . . . . 84
Ôîðìû äèðåêòèâû #include . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Ðåçþìå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Âîïðîñû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Óïðàæíåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

Ãëàâà 3. Öèêëû è âåòâëåíèÿ . . . . . . . . . . . . . . 92


Îïåðàöèè îòíîøåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Öèêëû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Öèêë for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Èíèöèàëèçèðóþùåå âûðàæåíèå . . . . . . . . . . . . . . . . . . . . . . . . 96
Óñëîâèå âûïîëíåíèÿ öèêëà . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Èíêðåìåíòèðóþùåå âûðàæåíèå . . . . . . . . . . . . . . . . . . . . . . . . 96
×èñëî âûïîëíåíèé öèêëà . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Íåñêîëüêî îïåðàòîðîâ â òåëå öèêëà . . . . . . . . . . . . . . . . . . . . . . 97
Áëîêè è îáëàñòü âèäèìîñòè ïåðåìåííûõ . . . . . . . . . . . . . . . . . . . 98
Ôîðìàòèðîâàíèå è ñòèëü îôîðìëåíèÿ öèêëîâ . . . . . . . . . . . . . . . . 99
Îáíàðóæåíèå îøèáîê . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Âàðèàíòû öèêëà for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Îïðåäåëåíèå ñ÷åò÷èêà öèêëà âíóòðè îïåðàòîðà öèêëà for . . . . . . . . . . 101
Íåñêîëüêî èíèöèàëèçèðóþùèõ âûðàæåíèé è óñëîâèé öèêëà . . . . . . . . . 101
Öèêë while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Íåñêîëüêî îïåðàòîðîâ â öèêëå while . . . . . . . . . . . . . . . . . . . . . 104
Ïðèîðèòåòû àðèôìåòè÷åñêèõ îïåðàöèé è îïåðàöèé îòíîøåíèÿ . . . . . . . 105
Öèêë do . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Âûáîð òèïà öèêëà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Âåòâëåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
10 Ñîäåðæàíèå

Óñëîâíûé îïåðàòîð if. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109


Íåñêîëüêî îïåðàòîðîâ â òåëå if. . . . . . . . . . . . . . . . . . . . . . . . 110
if âíóòðè öèêëîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
Ôóíêöèÿ exit(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Îïåðàòîð if¼else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Ôóíêöèÿ getche() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Óñëîâèÿ ñ ïðèñâàèâàíèåì . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Âëîæåííûå âåòâëåíèÿ if...else . . . . . . . . . . . . . . . . . . . . . . . . 116
if è else âî âëîæåííûõ âåòâëåíèÿõ . . . . . . . . . . . . . . . . . . . . . . 117
Êîíñòðóêöèÿ else...if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Îïåðàòîð switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Îïåðàòîð break . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
switch è ñèìâîëüíûå ïåðåìåííûå . . . . . . . . . . . . . . . . . . . . . . 122
Êëþ÷åâîå ñëîâî default . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Ñðàâíåíèå switch è if...else . . . . . . . . . . . . . . . . . . . . . . . . . . 124
Óñëîâíàÿ îïåðàöèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
Ëîãè÷åñêèå îïåðàöèè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Îïåðàöèÿ ëîãè÷åñêîãî È . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Ëîãè÷åñêîå ÈËÈ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Ëîãè÷åñêîå ÍÅ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Öåëûå âåëè÷èíû â êà÷åñòâå áóëåâûõ . . . . . . . . . . . . . . . . . . . . . 129
Ïðèîðèòåòû îïåðàöèé C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Äðóãèå îïåðàòîðû ïåðåõîäà . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Îïåðàòîð break . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Ðàñøèðåííàÿ òàáëèöà ñèìâîëîâ ASCII . . . . . . . . . . . . . . . . . . . . 133
Îïåðàòîð continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Îïåðàòîð goto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Ðåçþìå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Âîïðîñû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
Óïðàæíåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138

Ãëàâà 4. Ñòðóêòóðû . . . . . . . . . . . . . . . . . . 142


Ñòðóêòóðû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Ïðîñòàÿ ñòðóêòóðà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Îïðåäåëåíèå ñòðóêòóðû . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Îïðåäåëåíèå ñòðóêòóðíîé ïåðåìåííîé . . . . . . . . . . . . . . . . . . . 144
Äîñòóï ê ïîëÿì ñòðóêòóðû . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Äðóãèå âîçìîæíîñòè ñòðóêòóð . . . . . . . . . . . . . . . . . . . . . . . . 146
Ïðèìåð ïðèìåíåíèÿ ñòðóêòóð . . . . . . . . . . . . . . . . . . . . . . . . 148
Âëîæåííûå ñòðóêòóðû . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Ïðèìåð êàðòî÷íîé èãðû . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Ñòðóêòóðû è êëàññû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Ïåðå÷èñëåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Äíè íåäåëè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Ïåðå÷èñëåíèÿ è ïðîãðàììà ïîäñ÷åòà ÷èñëà ñëîâ . . . . . . . . . . . . . . 159
Ïðèìåð êàðòî÷íîé èãðû . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Íåäîñòàòîê ïåðå÷èñëåíèé . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Ïðèìåðû ïåðå÷èñëÿåìûõ òèïîâ . . . . . . . . . . . . . . . . . . . . . . . 163
Ðåçþìå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Âîïðîñû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Óïðàæíåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Ñîäåðæàíèå 11

Ãëàâà 5. Ôóíêöèè. . . . . . . . . . . . . . . . . . . 168


Ïðîñòûå ôóíêöèè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Îáúÿâëåíèå ôóíêöèè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Âûçîâ ôóíêöèè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Îïðåäåëåíèå ôóíêöèè . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Îáû÷íûå è áèáëèîòå÷íûå ôóíêöèè. . . . . . . . . . . . . . . . . . . . . . 172
Îòñóòñòâèå îáúÿâëåíèÿ. . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
Ïåðåäà÷à àðãóìåíòîâ â ôóíêöèþ . . . . . . . . . . . . . . . . . . . . . . . . . 174
Ïåðåäà÷à êîíñòàíò â ôóíêöèþ . . . . . . . . . . . . . . . . . . . . . . . . 174
Ïåðåäà÷à çíà÷åíèé ïåðåìåííûõ â ôóíêöèþ . . . . . . . . . . . . . . . . . 175
Ïåðåäà÷à àðãóìåíòîâ ïî çíà÷åíèþ . . . . . . . . . . . . . . . . . . . . . . 176
Ñòðóêòóðíûå ïåðåìåííûå â êà÷åñòâå àðãóìåíòîâ . . . . . . . . . . . . . . 177
Èìåíà ïåðåìåííûõ âíóòðè ïðîòîòèïà ôóíêöèè . . . . . . . . . . . . . . . 181
Çíà÷åíèå, âîçâðàùàåìîå ôóíêöèåé . . . . . . . . . . . . . . . . . . . . . . . 181
Îïåðàòîð return . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
Èñêëþ÷åíèå íåíóæíûõ ïåðåìåííûõ . . . . . . . . . . . . . . . . . . . . . 184
Ñòðóêòóðíàÿ ïåðåìåííàÿ â êà÷åñòâå âîçâðàùàåìîãî çíà÷åíèÿ . . . . . . . 185
Ññûëêè íà àðãóìåíòû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Ïåðåäà÷à ïî ññûëêå àðãóìåíòîâ ñòàíäàðòíûõ òèïîâ . . . . . . . . . . . . . 187
Óñëîæíåííûé âàðèàíò ïåðåäà÷è ïî ññûëêå . . . . . . . . . . . . . . . . . 189
Ïåðåäà÷à ñòðóêòóðíûõ ïåðåìåííûõ ïî ññûëêå . . . . . . . . . . . . . . . . 191
Çàìå÷àíèå î ññûëêàõ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Ïåðåãðóæåííûå ôóíêöèè. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Ïåðåìåííîå ÷èñëî àðãóìåíòîâ ôóíêöèè . . . . . . . . . . . . . . . . . . . 193
Ðàçëè÷íûå òèïû àðãóìåíòîâ . . . . . . . . . . . . . . . . . . . . . . . . . 195
Ðåêóðñèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Âñòðàèâàåìûå ôóíêöèè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
Àðãóìåíòû ïî óìîë÷àíèþ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Îáëàñòü âèäèìîñòè è êëàññ ïàìÿòè . . . . . . . . . . . . . . . . . . . . . . . 202
Ëîêàëüíûå ïåðåìåííûå . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
Ãëîáàëüíûå ïåðåìåííûå. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
Ñòàòè÷åñêèå ëîêàëüíûå ïåðåìåííûå . . . . . . . . . . . . . . . . . . . . . 207
Âîçâðàùåíèå çíà÷åíèÿ ïî ññûëêå . . . . . . . . . . . . . . . . . . . . . . . . 208
Âûçîâ ôóíêöèè â êà÷åñòâå ëåâîãî îïåðàíäà îïåðàöèè ïðèñâàèâàíèÿ . . . . 209
Çà÷åì íóæíî âîçâðàùåíèå ïî ññûëêå? . . . . . . . . . . . . . . . . . . . . 210
Êîíñòàíòíûå àðãóìåíòû ôóíêöèè . . . . . . . . . . . . . . . . . . . . . . . . 210
Ðåçþìå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Âîïðîñû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Óïðàæíåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

Ãëàâà 6. Îáúåêòû è êëàññû . . . . . . . . . . . . . . 217


Ïðîñòîé êëàññ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Êëàññû è îáúåêòû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Îïðåäåëåíèå êëàññà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
Èñïîëüçîâàíèå êëàññà . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
Âûçîâ ìåòîäîâ êëàññà . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
Îáúåêòû ïðîãðàììû è îáúåêòû ðåàëüíîãî ìèðà . . . . . . . . . . . . . . . . . 224
Äåòàëè èçäåëèÿ â êà÷åñòâå îáúåêòîâ. . . . . . . . . . . . . . . . . . . . . 224
Êðóãè â êà÷åñòâå îáúåêòîâ . . . . . . . . . . . . . . . . . . . . . . . . . . 225
12 Ñîäåðæàíèå

Êëàññ êàê òèï äàííûõ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226


Êîíñòðóêòîðû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
Ïðèìåð ñî ñ÷åò÷èêîì . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Ãðàôè÷åñêèé ïðèìåð . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
Îáúåêòû â êà÷åñòâå àðãóìåíòîâ ôóíêöèé. . . . . . . . . . . . . . . . . . . . . 232
Îáúåêòû â êà÷åñòâå àðãóìåíòîâ . . . . . . . . . . . . . . . . . . . . . . . 236
Êîíñòðóêòîð êîïèðîâàíèÿ ïî óìîë÷àíèþ . . . . . . . . . . . . . . . . . . . . . 237
Îáúåêòû, âîçâðàùàåìûå ôóíêöèåé . . . . . . . . . . . . . . . . . . . . . . . 239
Àðãóìåíòû è îáúåêòû. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Ïðèìåð êàðòî÷íîé èãðû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Ñòðóêòóðû è êëàññû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
Êëàññû, îáúåêòû è ïàìÿòü . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
Ñòàòè÷åñêèå äàííûå êëàññà . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
Ïðèìåíåíèå ñòàòè÷åñêèõ ïîëåé êëàññà . . . . . . . . . . . . . . . . . . . 247
Ïðèìåð èñïîëüçîâàíèÿ ñòàòè÷åñêèõ ïîëåé êëàññà . . . . . . . . . . . . . . 247
Ðàçäåëüíîå îáúÿâëåíèå è îïðåäåëåíèå ïîëåé êëàññà . . . . . . . . . . . . 248
ñonst è êëàññû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Êîíñòàíòíûå ìåòîäû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
Êîíñòàíòíûå îáúåêòû . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
Çà÷åì íóæíû êëàññû? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
Ðåçþìå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
Âîïðîñû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
Óïðàæíåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257

Ãëàâà 7. Ìàññèâû è ñòðîêè . . . . . . . . . . . . . . 261


Îñíîâû ìàññèâîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
Îïðåäåëåíèå ìàññèâîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Ýëåìåíòû ìàññèâà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Äîñòóï ê ýëåìåíòàì ìàññèâà. . . . . . . . . . . . . . . . . . . . . . . . . 263
Ñðåäíåå àðèôìåòè÷åñêîå ýëåìåíòîâ ìàññèâà . . . . . . . . . . . . . . . . 264
Èíèöèàëèçàöèÿ ìàññèâà . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
Ìíîãîìåðíûå ìàññèâû . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Ïåðåäà÷à ìàññèâîâ â ôóíêöèè . . . . . . . . . . . . . . . . . . . . . . . . 271
Ìàññèâû ñòðóêòóð . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
Ìàññèâû êàê ÷ëåíû êëàññîâ . . . . . . . . . . . . . . . . . . . . . . . . . 275
Ìàññèâû îáúåêòîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Ìàññèâû èíòåðâàëîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Ãðàíèöû ìàññèâà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Äîñòóï ê îáúåêòàì â ìàññèâå . . . . . . . . . . . . . . . . . . . . . . . . 280
Ìàññèâû êàðò . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
Ñòðîêè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
Ñòðîêîâûå ïåðåìåííûå . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
Ñ÷èòûâàíèå íåñêîëüêèõ ñòðîê . . . . . . . . . . . . . . . . . . . . . . . . 288
Êîïèðîâàíèå ñòðîê . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Êîïèðîâàíèå ñòðîê áîëåå ïðîñòûì ñïîñîáîì . . . . . . . . . . . . . . . . 290
Ìàññèâû ñòðîê . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
Ñòðîêè êàê ÷ëåíû êëàññîâ . . . . . . . . . . . . . . . . . . . . . . . . . . 292
Îïðåäåëåííûå ïîëüçîâàòåëåì òèïû ñòðîê . . . . . . . . . . . . . . . . . . 294
Ñòàíäàðòíûé êëàññ string ÿçûêà C++ . . . . . . . . . . . . . . . . . . . . . 296
Ñîäåðæàíèå 13

Îïðåäåëåíèå îáúåêòîâ êëàññà string è ïðèñâàèâàíèå èì çíà÷åíèé . . . . . 296


Ââîä/âûâîä äëÿ îáúåêòîâ êëàññà string . . . . . . . . . . . . . . . . . . . 298
Ïîèñê îáúåêòîâ êëàññà string . . . . . . . . . . . . . . . . . . . . . . . . . 299
Ìîäèôèêàöèÿ îáúåêòîâ êëàññà string . . . . . . . . . . . . . . . . . . . . 300
Ñðàâíåíèå îáúåêòîâ êëàññà string . . . . . . . . . . . . . . . . . . . . . . 301
Äîñòóï ê ñèìâîëàì â îáúåêòàõ êëàññà string . . . . . . . . . . . . . . . . . 302
Äðóãèå ìåòîäû êëàññà string . . . . . . . . . . . . . . . . . . . . . . . . . 303
Ðåçþìå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
Âîïðîñû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
Óïðàæíåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307

Ãëàâà 8. Ïåðåãðóçêà îïåðàöèé . . . . . . . . . . . . . 312


Ïåðåãðóçêà óíàðíûõ îïåðàöèé . . . . . . . . . . . . . . . . . . . . . . . . . . 313
Êëþ÷åâîå ñëîâî operator . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
Àðãóìåíòû îïåðàöèè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
Çíà÷åíèÿ, âîçâðàùàåìûå îïåðàöèåé . . . . . . . . . . . . . . . . . . . . 315
Âðåìåííûå áåçûìÿííûå îáúåêòû . . . . . . . . . . . . . . . . . . . . . . 317
Ïîñòôèêñíûå îïåðàöèè . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
Ïåðåãðóçêà áèíàðíûõ îïåðàöèé . . . . . . . . . . . . . . . . . . . . . . . . . 320
Àðèôìåòè÷åñêèå îïåðàöèè . . . . . . . . . . . . . . . . . . . . . . . . . . 320
Îáúåäèíåíèå ñòðîê . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
Ìíîæåñòâåííàÿ ïåðåãðóçêà . . . . . . . . . . . . . . . . . . . . . . . . . 325
Îïåðàöèè ñðàâíåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
Îïåðàöèè àðèôìåòè÷åñêîãî ïðèñâàèâàíèÿ . . . . . . . . . . . . . . . . . 328
Îïåðàöèÿ èíäåêñàöèè ìàññèâà ([]) . . . . . . . . . . . . . . . . . . . . . . 330
Ïðåîáðàçîâàíèå òèïîâ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
Ïðåîáðàçîâàíèÿ îñíîâíûõ òèïîâ â îñíîâíûå òèïû . . . . . . . . . . . . . 335
Ïðåîáðàçîâàíèÿ îáúåêòîâ â îñíîâíûå òèïû è íàîáîðîò . . . . . . . . . . . 336
Ïðåîáðàçîâàíèÿ ñòðîê â îáúåêòû êëàññà string è íàîáîðîò . . . . . . . . . 338
Ïðåîáðàçîâàíèÿ îáúåêòîâ êëàññîâ â îáúåêòû äðóãèõ êëàññîâ . . . . . . . . 340
Ïðåîáðàçîâàíèÿ: êîãäà ÷òî èñïîëüçîâàòü . . . . . . . . . . . . . . . . . . 346
Äèàãðàììû êëàññîâ UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
Îáúåäèíåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
Íàïðàâëåííîñòü . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
«Ïîäâîäíûå êàìíè» ïåðåãðóçêè îïåðàöèé è ïðåîáðàçîâàíèÿ òèïîâ . . . . . . . 348
Èñïîëüçîâàíèå ïîõîæèõ çíà÷åíèé . . . . . . . . . . . . . . . . . . . . . . 348
Èñïîëüçîâàíèå ïîõîæåãî ñèíòàêñèñà . . . . . . . . . . . . . . . . . . . . 348
Ïîêàçûâàéòå îãðàíè÷åíèå . . . . . . . . . . . . . . . . . . . . . . . . . . 349
Èçáåãàéòå íåîïðåäåëåííîñòè . . . . . . . . . . . . . . . . . . . . . . . . 349
Íå âñå îïåðàöèè ìîãóò áûòü ïåðåãðóæåíû . . . . . . . . . . . . . . . . . . 349
Êëþ÷åâûå ñëîâà explicit è mutable . . . . . . . . . . . . . . . . . . . . . . . . 349
Ïðåäîòâðàùåíèå ïðåîáðàçîâàíèÿ òèïîâ ñ ïîìîùüþ explicit . . . . . . . . . 350
Èçìåíåíèå äàííûõ îáúåêòà, îáúÿâëåííûõ êàê const,
èñïîëüçóÿ êëþ÷åâîå ñëîâî mutable . . . . . . . . . . . . . . . . . . . . . 351
Ðåçþìå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
Âîïðîñû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
Óïðàæíåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
14 Ñîäåðæàíèå

Ãëàâà 9. Íàñëåäîâàíèå . . . . . . . . . . . . . . . . 361


Áàçîâûé è ïðîèçâîäíûé êëàññû . . . . . . . . . . . . . . . . . . . . . . . . . 362
Îïðåäåëåíèå ïðîèçâîäíîãî êëàññà . . . . . . . . . . . . . . . . . . . . . 364
Îáîáùåíèå â äèàãðàììàõ êëàññîâ â UML . . . . . . . . . . . . . . . . . . 364
Äîñòóï ê áàçîâîìó êëàññó . . . . . . . . . . . . . . . . . . . . . . . . . . 365
Ðåçóëüòàò ïðîãðàììû COUNTEN . . . . . . . . . . . . . . . . . . . . . . . 366
Ñïåöèôèêàòîð äîñòóïà protected. . . . . . . . . . . . . . . . . . . . . . . 366
Íåäîñòàòêè èñïîëüçîâàíèÿ ñïåöèôèêàòîðà protected . . . . . . . . . . . . 368
Íåèçìåííîñòü áàçîâîãî êëàññà . . . . . . . . . . . . . . . . . . . . . . . 368
Ðàçíîîáðàçèå òåðìèíîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . 368
Êîíñòðóêòîðû ïðîèçâîäíîãî êëàññà . . . . . . . . . . . . . . . . . . . . . . . 368
Ïåðåãðóçêà ôóíêöèé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
Êàêîé èç ìåòîäîâ èñïîëüçîâàòü?. . . . . . . . . . . . . . . . . . . . . . . . . 372
Îïåðàöèÿ ðàçðåøåíèÿ è ïåðåãðóçêà ôóíêöèé . . . . . . . . . . . . . . . . 372
Íàñëåäîâàíèå â êëàññå Distance . . . . . . . . . . . . . . . . . . . . . . . . . 373
Ïðèìåíåíèå ïðîãðàììû ENGLEN . . . . . . . . . . . . . . . . . . . . . . 374
Êîíñòðóêòîðû êëàññà DistSign . . . . . . . . . . . . . . . . . . . . . . . . 375
Ìåòîäû êëàññà DistSign . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
 ïîääåðæêó íàñëåäîâàíèÿ. . . . . . . . . . . . . . . . . . . . . . . . . . 375
Èåðàðõèÿ êëàññîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
Àáñòðàêòíûé áàçîâûé êëàññ . . . . . . . . . . . . . . . . . . . . . . . . . 379
Êîíñòðóêòîðû è ôóíêöèè . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
Íàñëåäîâàíèå è ãðàôèêà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
Îáùåå è ÷àñòíîå íàñëåäîâàíèå . . . . . . . . . . . . . . . . . . . . . . . . . 383
Êîìáèíàöèè äîñòóïà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
Âûáîð ñïåöèôèêàòîðà äîñòóïà. . . . . . . . . . . . . . . . . . . . . . . . 384
Óðîâíè íàñëåäîâàíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
Ìíîæåñòâåííîå íàñëåäîâàíèå . . . . . . . . . . . . . . . . . . . . . . . . . . 388
Ìåòîäû êëàññîâ è ìíîæåñòâåííîå íàñëåäîâàíèå . . . . . . . . . . . . . . 389
×àñòíîå íàñëåäîâàíèå â ïðîãðàììå EMPMULT. . . . . . . . . . . . . . . . . . 393
Êîíñòðóêòîðû ïðè ìíîæåñòâåííîì íàñëåäîâàíèè . . . . . . . . . . . . . . 393
Êîíñòðóêòîðû áåç àðãóìåíòîâ . . . . . . . . . . . . . . . . . . . . . . . . 396
Êîíñòðóêòîð ñî ìíîãèìè àðãóìåíòàìè . . . . . . . . . . . . . . . . . . . . 396
Íåîïðåäåëåííîñòü ïðè ìíîæåñòâåííîì íàñëåäîâàíèè . . . . . . . . . . . . . 397
Âêëþ÷åíèå: êëàññû â êëàññàõ . . . . . . . . . . . . . . . . . . . . . . . . . . 398
Âêëþ÷åíèå â ïðîãðàììå EMPCONT . . . . . . . . . . . . . . . . . . . . . 399
Êîìïîçèöèÿ: ñëîæíîå âêëþ÷åíèå . . . . . . . . . . . . . . . . . . . . . . 403
Ðîëü íàñëåäîâàíèÿ ïðè ðàçðàáîòêå ïðîãðàìì . . . . . . . . . . . . . . . . . . 403
Ðåçþìå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
Âîïðîñû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
Óïðàæíåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407

Ãëàâà 10. Óêàçàòåëè . . . . . . . . . . . . . . . . . 411


Àäðåñà è óêàçàòåëè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
Îïåðàöèÿ ïîëó÷åíèÿ àäðåñà & . . . . . . . . . . . . . . . . . . . . . . . . . . 412
Ïåðåìåííûå óêàçàòåëè . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
Íåäîñòàòêè ñèíòàêñèñà . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416
Óêàçàòåëè äîëæíû èìåòü çíà÷åíèå . . . . . . . . . . . . . . . . . . . . . . 416
Ñîäåðæàíèå 15

Äîñòóï ê ïåðåìåííîé ïî óêàçàòåëþ . . . . . . . . . . . . . . . . . . . . . 417


Óêàçàòåëü íà void . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
Óêàçàòåëè è ìàññèâû. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421
Óêàçàòåëè-êîíñòàíòû è óêàçàòåëè-ïåðåìåííûå . . . . . . . . . . . . . . . . . 423
Óêàçàòåëè è ôóíêöèè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424
Ïåðåäà÷à ïðîñòîé ïåðåìåííîé. . . . . . . . . . . . . . . . . . . . . . . . 424
Ïåðåäà÷à ìàññèâîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
Ñîðòèðîâêà ýëåìåíòîâ ìàññèâà . . . . . . . . . . . . . . . . . . . . . . . 428
Ðàññòàíîâêà ñ èñïîëüçîâàíèåì óêàçàòåëåé . . . . . . . . . . . . . . . . . 428
Ñîðòèðîâêà ìåòîäîì ïóçûðüêà . . . . . . . . . . . . . . . . . . . . . . . . 430
Óêàçàòåëè íà ñòðîêè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432
Óêàçàòåëè íà ñòðîêîâûå êîíñòàíòû. . . . . . . . . . . . . . . . . . . . . . 432
Ñòðîêè êàê àðãóìåíòû ôóíêöèé. . . . . . . . . . . . . . . . . . . . . . . . 433
Êîïèðîâàíèå ñòðîê ñ èñïîëüçîâàíèåì óêàçàòåëåé . . . . . . . . . . . . . . 434
Áèáëèîòåêà ñòðîêîâûõ ôóíêöèé . . . . . . . . . . . . . . . . . . . . . . . 434
Ìîäèôèêàòîð const è óêàçàòåëè . . . . . . . . . . . . . . . . . . . . . . . 435
Ìàññèâû óêàçàòåëåé íà ñòðîêè . . . . . . . . . . . . . . . . . . . . . . . . 436
Óïðàâëåíèå ïàìÿòüþ: îïåðàöèè new è delete . . . . . . . . . . . . . . . . . . . 437
Îïåðàöèÿ new . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
Îïåðàöèÿ delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
Êëàññ String ñ èñïîëüçîâàíèåì îïåðàöèè new . . . . . . . . . . . . . . . . 440
Óêàçàòåëè íà îáúåêòû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
Ññûëêè íà ÷ëåíû êëàññà . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
Äðóãîå ïðèìåíåíèå îïåðàöèè new . . . . . . . . . . . . . . . . . . . . . . 444
Ìàññèâ óêàçàòåëåé íà îáúåêòû. . . . . . . . . . . . . . . . . . . . . . . . 445
Äåéñòâèÿ ïðîãðàììû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446
Äîñòóï ê ìåòîäàì êëàññà. . . . . . . . . . . . . . . . . . . . . . . . . . . 446
Ñâÿçíûé ñïèñîê . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
Öåïî÷êà óêàçàòåëåé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
Äîáàâëåíèå íîâûõ ýëåìåíòîâ â ñïèñîê . . . . . . . . . . . . . . . . . . . 449
Ïîëó÷åíèå ñîäåðæèìîãî ñïèñêà . . . . . . . . . . . . . . . . . . . . . . . 450
Êëàññû, ñîäåðæàùèå ñàìè ñåáÿ . . . . . . . . . . . . . . . . . . . . . . . 450
Ïîïîëíåíèå ïðèìåðà LINKLIST . . . . . . . . . . . . . . . . . . . . . . . . 451
Óêàçàòåëè íà óêàçàòåëè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
Ñîðòèðóåì óêàçàòåëè. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
Òèï äàííûõ person** . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454
Ñðàâíåíèå ñòðîê . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454
Ïðèìåð ðàçáîðà ñòðîêè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455
Ðàçáîð àðèôìåòè÷åñêèõ âûðàæåíèé . . . . . . . . . . . . . . . . . . . . . 456
Ïðîãðàììà PARSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
Ñèìóëÿòîð: ëîøàäèíûå ñêà÷êè . . . . . . . . . . . . . . . . . . . . . . . . . . 459
Ðàçðàáîòêà ëîøàäèíûõ ñêà÷åê . . . . . . . . . . . . . . . . . . . . . . . . 460
Ìîäåëèðîâàíèå õîäà âðåìåíè . . . . . . . . . . . . . . . . . . . . . . . . 463
Óíè÷òîæåíèå ìàññèâà óêàçàòåëåé íà îáúåêòû . . . . . . . . . . . . . . . . 463
Ôóíêöèÿ putch() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464
Äèàãðàììû UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464
Äèàãðàììà ñîñòîÿíèé â UML . . . . . . . . . . . . . . . . . . . . . . . . . 465
Ñîñòîÿíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466
Ïåðåõîäû. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466
Îò ñîñòîÿíèÿ ê ñîñòîÿíèþ . . . . . . . . . . . . . . . . . . . . . . . . . . 466
16 Ñîäåðæàíèå

Îòëàäêà óêàçàòåëåé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467


Ðåçþìå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467
Âîïðîñû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
Óïðàæíåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471

Ãëàâà 11. Âèðòóàëüíûå ôóíêöèè . . . . . . . . . . . . 476


Âèðòóàëüíûå ôóíêöèè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476
Äîñòóï ê îáû÷íûì ìåòîäàì ÷åðåç óêàçàòåëè. . . . . . . . . . . . . . . . . 477
Äîñòóï ê âèðòóàëüíûì ìåòîäàì ÷åðåç óêàçàòåëè. . . . . . . . . . . . . . . 479
Ïîçäíåå ñâÿçûâàíèå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
Àáñòðàêòíûå êëàññû è ÷èñòûå âèðòóàëüíûå ôóíêöèè . . . . . . . . . . . . 481
Âèðòóàëüíûå ôóíêöèè è êëàññ person . . . . . . . . . . . . . . . . . . . . 483
Âèðòóàëüíûå ôóíêöèè â ãðàôè÷åñêîì ïðèìåðå . . . . . . . . . . . . . . . 485
Âèðòóàëüíûå äåñòðóêòîðû . . . . . . . . . . . . . . . . . . . . . . . . . . 488
Âèðòóàëüíûå áàçîâûå êëàññû . . . . . . . . . . . . . . . . . . . . . . . . 489
Äðóæåñòâåííûå ôóíêöèè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
Äðóæåñòâåííûå ôóíêöèè êàê ìîñòû ìåæäó êëàññàìè . . . . . . . . . . . . 491
Ëîìàÿ ñòåíû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
Ïðèìåð ñ àíãëèéñêèìè ìåðàìè äëèíû . . . . . . . . . . . . . . . . . . . . 493
Äðóæåñòâåííîñòü è ôóíêöèîíàëüíàÿ çàïèñü . . . . . . . . . . . . . . . . . 496
Äðóæåñòâåííûå êëàññû. . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
Ñòàòè÷åñêèå ôóíêöèè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500
Äîñòóï ê ñòàòè÷åñêèì ôóíêöèÿì . . . . . . . . . . . . . . . . . . . . . . . 501
Èíèöèàëèçàöèÿ êîïèðîâàíèÿ è ïðèñâàèâàíèÿ . . . . . . . . . . . . . . . . . . 502
Ïåðåãðóçêà îïåðàòîðà ïðèñâàèâàíèÿ . . . . . . . . . . . . . . . . . . . . 503
Êîíñòðóêòîð êîïèðîâàíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . 506
Îáúåêòíûå äèàãðàììû UML . . . . . . . . . . . . . . . . . . . . . . . . . 510
Ýôôåêòèâíîå èñïîëüçîâàíèå ïàìÿòè êëàññîì String. . . . . . . . . . . . . 510
Óêàçàòåëü this . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516
Äîñòóï ê êîìïîíåíòíûì äàííûì ÷åðåç óêàçàòåëü this . . . . . . . . . . . . 517
Èñïîëüçîâàíèå this äëÿ âîçâðàòà çíà÷åíèé . . . . . . . . . . . . . . . . . 518
Èñïðàâëåííàÿ ïðîãðàììà STRIMEM . . . . . . . . . . . . . . . . . . . . . 520
Äèíàìè÷åñêàÿ èíôîðìàöèÿ î òèïàõ . . . . . . . . . . . . . . . . . . . . . . . 523
Ïðîâåðêà òèïà êëàññà ñ ïîìîùüþ dynamic_cast . . . . . . . . . . . . . . . . . 523
Èçìåíåíèå òèïîâ óêàçàòåëåé ñ ïîìîùüþ dynamic_cast . . . . . . . . . . . 524
Îïåðàòîð typeid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526
Ðåçþìå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527
Âîïðîñû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 528
Óïðàæíåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531

Ãëàâà 12. Ïîòîêè è ôàéëû . . . . . . . . . . . . . . 536


Ïîòîêîâûå êëàññû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536
Ïðåèìóùåñòâà ïîòîêîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537
Èåðàðõèÿ ïîòîêîâûõ êëàññîâ . . . . . . . . . . . . . . . . . . . . . . . . . 537
Êëàññ ios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539
Êëàññ istream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542
Êëàññ ostream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543
Êëàññû iostream è _withassign. . . . . . . . . . . . . . . . . . . . . . . . . 544
Ïðåäîïðåäåëåííûå ïîòîêîâûå îáúåêòû . . . . . . . . . . . . . . . . . . . 544
Ñîäåðæàíèå 17

Îøèáêè ïîòîêîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545


Áèòû ñòàòóñà îøèáêè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545
Ââîä ÷èñåë . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546
Ïåðåèçáûòîê ñèìâîëîâ. . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
Ââîä ïðè îòñóòñòâèè äàííûõ . . . . . . . . . . . . . . . . . . . . . . . . . 547
Ââîä ñòðîê è ñèìâîëîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548
Îòëàäêà ïðèìåðà ñ àíãëèéñêèìè ðàññòîÿíèÿìè . . . . . . . . . . . . . . . 548
Ïîòîêîâûé ââîä/âûâîä äèñêîâûõ ôàéëîâ . . . . . . . . . . . . . . . . . . . . 551
Ôîðìàòèðîâàííûé ôàéëîâûé ââîä/âûâîä . . . . . . . . . . . . . . . . . . 551
Ñòðîêè ñ ïðîáåëàìè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554
Ââîä/âûâîä ñèìâîëîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555
Äâîè÷íûé ââîä/âûâîä . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557
Îïåðàòîð reinterpret_cast . . . . . . . . . . . . . . . . . . . . . . . . . . . 558
Çàêðûòèå ôàéëîâ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558
Îáúåêòíûé ââîä/âûâîä . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559
Ñîâìåñòèìîñòü ñòðóêòóð äàííûõ . . . . . . . . . . . . . . . . . . . . . . . 560
Ââîä/âûâîä ìíîæåñòâà îáúåêòîâ. . . . . . . . . . . . . . . . . . . . . . . 561
Áèòû ðåæèìîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563
Óêàçàòåëè ôàéëîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564
Âû÷èñëåíèå ïîçèöèè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564
Âû÷èñëåíèå ñäâèãà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565
Ôóíêöèÿ tellg() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567
Îáðàáîòêà îøèáîê ôàéëîâîãî ââîäà/âûâîäà . . . . . . . . . . . . . . . . . . 567
Ðåàãèðîâàíèå íà îøèáêè . . . . . . . . . . . . . . . . . . . . . . . . . . . 567
Àíàëèç îøèáîê . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568
Ôàéëîâûé ââîä/âûâîä ñ ïîìîùüþ ìåòîäîâ. . . . . . . . . . . . . . . . . . . . 570
Êàê îáúåêòû çàïèñûâàþò è ÷èòàþò ñàìè ñåáÿ . . . . . . . . . . . . . . . . 570
Êàê êëàññû çàïèñûâàþò è ÷èòàþò ñàìè ñåáÿ . . . . . . . . . . . . . . . . . 572
Êîä òèïà îáúåêòà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578
Ïåðåãðóçêà îïåðàòîðîâ èçâëå÷åíèÿ è âñòàâêè . . . . . . . . . . . . . . . . . . 581
Ïåðåãðóçêà cout è cin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581
Ïåðåãðóçêà << è >> äëÿ ôàéëîâ . . . . . . . . . . . . . . . . . . . . . . . 583
Ïàìÿòü êàê ïîòîê . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585
Àðãóìåíòû êîìàíäíîé ñòðîêè . . . . . . . . . . . . . . . . . . . . . . . . . . 586
Âûâîä íà ïå÷àòàþùåå óñòðîéñòâî . . . . . . . . . . . . . . . . . . . . . . . . 589
Ðåçþìå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590
Âîïðîñû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 591
Óïðàæíåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592

Ãëàâà 13. Ìíîãîôàéëîâûå ïðîãðàììû . . . . . . . . . 596


Ïðè÷èíû èñïîëüçîâàíèÿ ìíîãîôàéëîâûõ ïðîãðàìì . . . . . . . . . . . . . . . 596
Áèáëèîòåêè êëàññîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597
Îðãàíèçàöèÿ è êîíöåïòóàëèçàöèÿ . . . . . . . . . . . . . . . . . . . . . . 598
Ñîçäàíèå ìíîãîôàéëîâîé ïðîãðàììû . . . . . . . . . . . . . . . . . . . . . . 598
Çàãîëîâî÷íûå ôàéëû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599
Äèðåêòîðèè. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599
Ïðîåêòû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 600
Ìåæôàéëîâîå âçàèìîäåéñòâèå . . . . . . . . . . . . . . . . . . . . . . . . . 600
Âçàèìîäåéñòâèå èñõîäíûõ ôàéëîâ. . . . . . . . . . . . . . . . . . . . . . 600
18 Ñîäåðæàíèå

Çàãîëîâî÷íûå ôàéëû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605


Ïðîñòðàíñòâà èìåí. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 609
Êëàññ ñâåðõáîëüøèõ ÷èñåë. . . . . . . . . . . . . . . . . . . . . . . . . . . . 613
×èñëà êàê ñòðîêè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613
Îïèñàòåëü êëàññà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614
Ìåòîäû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615
Ïðèêëàäíàÿ ïðîãðàììà. . . . . . . . . . . . . . . . . . . . . . . . . . . . 617
Ìîäåëèðîâàíèå âûñîòíîãî ëèôòà . . . . . . . . . . . . . . . . . . . . . . . . 619
Ðàáîòà ïðîãðàììû ELEV . . . . . . . . . . . . . . . . . . . . . . . . . . . 620
Ïðîåêòèðîâàíèå ñèñòåìû . . . . . . . . . . . . . . . . . . . . . . . . . . 621
Ëèñòèíã ïðîãðàììû ELEV. . . . . . . . . . . . . . . . . . . . . . . . . . . 623
Äèàãðàììà ñîñòîÿíèé äëÿ ïðîãðàììû ELEV . . . . . . . . . . . . . . . . . 634
Ðåçþìå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635
Âîïðîñû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636
Ïðîåêòû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638

Ãëàâà 14. Øàáëîíû è èñêëþ÷åíèÿ . . . . . . . . . . . 640


Øàáëîíû ôóíêöèé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640
Øàáëîí ïðîñòîé ôóíêöèè . . . . . . . . . . . . . . . . . . . . . . . . . . 642
Øàáëîíû ôóíêöèé ñ íåñêîëüêèìè àðãóìåíòàìè . . . . . . . . . . . . . . . 644
Øàáëîíû êëàññîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
Êîíòåêñòîçàâèñèìîå èìÿ êëàññà . . . . . . . . . . . . . . . . . . . . . . . 651
Ñîçäàíèå êëàññà ñâÿçíûõ ñïèñêîâ ñ ïîìîùüþ øàáëîíîâ . . . . . . . . . . 653
Õðàíåíèå ïîëüçîâàòåëüñêèõ òèïîâ . . . . . . . . . . . . . . . . . . . . . . 655
UML è øàáëîíû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 658
Èñêëþ÷åíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659
Äëÿ ÷åãî íóæíû èñêëþ÷åíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . 660
Ñèíòàêñèñ èñêëþ÷åíèé . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661
Ïðîñòîé ïðèìåð èñêëþ÷åíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . 662
Ìíîãîêðàòíûå èñêëþ÷åíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . 666
Èñêëþ÷åíèÿ è êëàññ Distance . . . . . . . . . . . . . . . . . . . . . . . . . 668
Èñêëþ÷åíèÿ ñ àðãóìåíòàìè . . . . . . . . . . . . . . . . . . . . . . . . . 670
Êëàññ bad_alloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673
Ðàçìûøëåíèÿ îá èñêëþ÷åíèÿõ . . . . . . . . . . . . . . . . . . . . . . . . 674
Ðåçþìå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675
Âîïðîñû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676
Óïðàæíåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 678

Ãëàâà 15. Ñòàíäàðòíàÿ áèáëèîòåêà øàáëîíîâ (STL) . . . 681


Ââåäåíèå â STL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682
Êîíòåéíåðû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682
Àëãîðèòìû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687
Èòåðàòîðû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688
Âîçìîæíûå ïðîáëåìû ñ STL . . . . . . . . . . . . . . . . . . . . . . . . . 689
Àëãîðèòìû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690
Àëãîðèòì find (). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690
Àëãîðèòì count () . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691
Àëãîðèòì sort() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692
Àëãîðèòì search() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692
Ñîäåðæàíèå 19

Àëãîðèòì merge(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693


Ôóíêöèîíàëüíûå îáúåêòû . . . . . . . . . . . . . . . . . . . . . . . . . . 694
Ïîëüçîâàòåëüñêèå ôóíêöèè âìåñòî ôóíêöèîíàëüíûõ îáúåêòîâ . . . . . . . 695
Äîáàâëåíèå _if ê àðãóìåíòàì . . . . . . . . . . . . . . . . . . . . . . . . . 696
Àëãîðèòì for_each () . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697
Àëãîðèòì transform() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697
Ïîñëåäîâàòåëüíûå êîíòåéíåðû . . . . . . . . . . . . . . . . . . . . . . . . . 698
Âåêòîðû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699
Ñïèñêè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702
Èòåðàòîðû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 706
Èòåðàòîðû êàê èíòåëëåêòóàëüíûå óêàçàòåëè . . . . . . . . . . . . . . . . . 706
Èòåðàòîðû â êà÷åñòâå èíòåðôåéñà . . . . . . . . . . . . . . . . . . . . . . 708
Ñîîòâåòñòâèå àëãîðèòìîâ êîíòåéíåðàì . . . . . . . . . . . . . . . . . . . 710
Ðàáîòà ñ èòåðàòîðàìè . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713
Ñïåöèàëèçèðîâàííûå èòåðàòîðû . . . . . . . . . . . . . . . . . . . . . . . . 717
Àäàïòåðû èòåðàòîðîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717
Ïîòîêîâûå èòåðàòîðû . . . . . . . . . . . . . . . . . . . . . . . . . . . . 720
Àññîöèàòèâíûå êîíòåéíåðû . . . . . . . . . . . . . . . . . . . . . . . . . . . 724
Ìíîæåñòâà è ìóëüòèìíîæåñòâà . . . . . . . . . . . . . . . . . . . . . . . 725
Îòîáðàæåíèÿ è ìóëüòèîòîáðàæåíèÿ . . . . . . . . . . . . . . . . . . . . . 729
Àññîöèàòèâíûé ìàññèâ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730
Õðàíåíèå ïîëüçîâàòåëüñêèõ îáúåêòîâ . . . . . . . . . . . . . . . . . . . . . . 731
Ìíîæåñòâî îáúåêòîâ person . . . . . . . . . . . . . . . . . . . . . . . . . 732
Ñïèñîê îáúåêòîâ êëàññà person . . . . . . . . . . . . . . . . . . . . . . . 735
Ôóíêöèîíàëüíûå îáúåêòû . . . . . . . . . . . . . . . . . . . . . . . . . . . . 738
Ïðåäîïðåäåëåííûå ôóíêöèîíàëüíûå îáúåêòû . . . . . . . . . . . . . . . . 739
Ñîçäàíèå ñîáñòâåííûõ ôóíêöèîíàëüíûõ îáúåêòîâ . . . . . . . . . . . . . . 741
Ôóíêöèîíàëüíûå îáúåêòû è ïîâåäåíèå êîíòåéíåðîâ. . . . . . . . . . . . . 746
Ðåçþìå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746
Âîïðîñû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 747
Óïðàæíåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 749

Ãëàâà 16. Ðàçðàáîòêà îáúåêòíî-îðèåíòèðîâàííîãî ÏÎ . . 752


Ýâîëþöèÿ ïðîöåññà ñîçäàíèÿ ïðîãðàììíîãî îáåñïå÷åíèÿ . . . . . . . . . . . 752
Ïðîöåññ ïðîñèæèâàíèÿ øòàíîâ . . . . . . . . . . . . . . . . . . . . . . . 753
Êàñêàäíûé ïðîöåññ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 753
Îáúåêòíî-îðèåíòèðîâàííîå ïðîãðàììèðîâàíèå . . . . . . . . . . . . . . . 753
Ñîâðåìåííûå ïîäõîäû . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754
Ìîäåëèðîâàíèå âàðèàíòîâ èñïîëüçîâàíèÿ. . . . . . . . . . . . . . . . . . . . 755
Äåéñòâóþùèå ñóáúåêòû . . . . . . . . . . . . . . . . . . . . . . . . . . . 755
Âàðèàíòû èñïîëüçîâàíèÿ. . . . . . . . . . . . . . . . . . . . . . . . . . . 756
Ñöåíàðèè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 756
Äèàãðàììû âàðèàíòîâ èñïîëüçîâàíèÿ . . . . . . . . . . . . . . . . . . . . 757
Îïèñàíèÿ âàðèàíòîâ èñïîëüçîâàíèÿ . . . . . . . . . . . . . . . . . . . . . 758
Îò âàðèàíòîâ èñïîëüçîâàíèÿ ê êëàññàì . . . . . . . . . . . . . . . . . . . 758
Ïðåäìåòíàÿ îáëàñòü ïðîãðàììèðîâàíèÿ. . . . . . . . . . . . . . . . . . . . . 759
Ðóêîïèñíûå ôîðìû. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 760
Äîïóùåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 762
Ïðîãðàììà LANDLORD: ñòàäèÿ ðàçâèòèÿ . . . . . . . . . . . . . . . . . . . . . 762
Äåéñòâóþùèå ñóáúåêòû . . . . . . . . . . . . . . . . . . . . . . . . . . . 762
20 Ñîäåðæàíèå

Âàðèàíòû èñïîëüçîâàíèÿ. . . . . . . . . . . . . . . . . . . . . . . . . . . 762


Îïèñàíèå âàðèàíòîâ èñïîëüçîâàíèÿ . . . . . . . . . . . . . . . . . . . . . 763
Ñöåíàðèè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765
Äèàãðàììû äåéñòâèé UML . . . . . . . . . . . . . . . . . . . . . . . . . . 765
Îò âàðèàíòîâ èñïîëüçîâàíèÿ ê êëàññàì . . . . . . . . . . . . . . . . . . . . . 766
Ñïèñîê ñóùåñòâèòåëüíûõ . . . . . . . . . . . . . . . . . . . . . . . . . . . 766
Óòî÷íåíèå ñïèñêà. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767
Îïðåäåëåíèå àòðèáóòîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . 768
Îò ãëàãîëîâ ê ñîîáùåíèÿì . . . . . . . . . . . . . . . . . . . . . . . . . . 768
Äèàãðàììà êëàññîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 770
Äèàãðàììû ïîñëåäîâàòåëüíîñòåé . . . . . . . . . . . . . . . . . . . . . . 770
Íàïèñàíèå êîäà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 774
Çàãîëîâî÷íûé ôàéë . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 775
Èñõîäíûå .cpp ôàéëû . . . . . . . . . . . . . . . . . . . . . . . . . . . . 780
Âûíóæäåííûå óïðîùåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . 789
Âçàèìîäåéñòâèå ñ ïðîãðàììîé . . . . . . . . . . . . . . . . . . . . . . . . . 789
Çàêëþ÷åíèå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 791
Ðåçþìå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 791
Âîïðîñû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 792
Ïðîåêòû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 794

Ïðèëîæåíèå À. Òàáëèöà ASCII . . . . . . . . . . . . . 796


Ïðèëîæåíèå Á. Òàáëèöà ïðèîðèòåòîâ îïåðàöèé C++ . . . 803
Òàáëèöà ïðèîðèòåòîâ îïåðàöèé . . . . . . . . . . . . . . . . . . . . . . . . . 803
Çàðåçåðâèðîâàííûå ñëîâà . . . . . . . . . . . . . . . . . . . . . . . . . . . . 803

Ïðèëîæåíèå Â. Microsoft Visual C++ . . . . . . . . . . 806


Ýëåìåíòû ýêðàíà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 806
Îäíîôàéëîâûå ïðîãðàììû . . . . . . . . . . . . . . . . . . . . . . . . . . . 807
Êîìïîíîâêà ñóùåñòâóþùåãî ôàéëà . . . . . . . . . . . . . . . . . . . . . 807
Ñîçäàíèå íîâîãî ôàéëà . . . . . . . . . . . . . . . . . . . . . . . . . . . 808
Îøèáêè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 808
Èíôîðìàöèÿ î òèïàõ â ïðîöåññå èñïîëíåíèÿ (RTTI) . . . . . . . . . . . . . 808
Ìíîãîôàéëîâûå ïðîãðàììû . . . . . . . . . . . . . . . . . . . . . . . . . . . 809
Ïðîåêòû è ðàáî÷èå îáëàñòè . . . . . . . . . . . . . . . . . . . . . . . . . 809
Ðàáîòà íàä ïðîåêòîì . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 809
Ñîõðàíåíèå, çàêðûòèå è îòêðûòèå ïðîåêòîâ . . . . . . . . . . . . . . . . . 810
Êîìïèëÿöèÿ è êîìïîíîâêà . . . . . . . . . . . . . . . . . . . . . . . . . . 811
Ïðîãðàììû ñ êîíñîëüíîé ãðàôèêîé . . . . . . . . . . . . . . . . . . . . . . . 811
Îòëàäêà ïðîãðàìì . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 811
Ïîøàãîâàÿ òðàññèðîâêà . . . . . . . . . . . . . . . . . . . . . . . . . . . 812
Ïðîñìîòð ïåðåìåííûõ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 812
Ïîøàãîâàÿ òðàññèðîâêà ôóíêöèé . . . . . . . . . . . . . . . . . . . . . . 812
Òî÷êè îñòàíîâà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 813

Ïðèëîæåíèå Ã. Borland C++ Builder. . . . . . . . . . . 814


Çàïóñê ïðèìåðîâ â C++ Builder . . . . . . . . . . . . . . . . . . . . . . . . . . 815
Î÷èñòêà ýêðàíà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815
Ñîäåðæàíèå 21

Ñîçäàíèå íîâîãî ïðîåêòà . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815


Çàäàíèå èìåíè è ñîõðàíåíèå ïðîåêòà . . . . . . . . . . . . . . . . . . . . . . 817
Ðàáîòà ñ ñóùåñòâóþùèìè ôàéëàìè . . . . . . . . . . . . . . . . . . . . . . . 817
Êîìïèëÿöèÿ, ñâÿçûâàíèå è çàïóñê ïðîãðàìì. . . . . . . . . . . . . . . . . . . 818
Çàïóñê ïðîãðàììû â C++ Builder . . . . . . . . . . . . . . . . . . . . . . . 818
Çàïóñê ïðîãðàììû â MS DOS . . . . . . . . . . . . . . . . . . . . . . . . 818
Ïðåäâàðèòåëüíî ñêîìïèëèðîâàííûå çàãîëîâî÷íûå ôàéëû. . . . . . . . . . 818
Çàêðûòèå è îòêðûòèå ïðîåêòîâ . . . . . . . . . . . . . . . . . . . . . . . . 818
Äîáàâëåíèå çàãîëîâî÷íîãî ôàéëà ê ïðîåêòó . . . . . . . . . . . . . . . . . . . 819
Ñîçäàíèå íîâîãî çàãîëîâî÷íîãî ôàéëà . . . . . . . . . . . . . . . . . . . 819
Ðåäàêòèðîâàíèå çàãîëîâî÷íîãî ôàéëà . . . . . . . . . . . . . . . . . . . . 819
Îïðåäåëåíèå ìåñòîíàõîæäåíèÿ çàãîëîâî÷íîãî ôàéëà . . . . . . . . . . . . 819
Ïðîåêòû ñ íåñêîëüêèìè èñõîäíûìè ôàéëàìè . . . . . . . . . . . . . . . . . . 820
Ñîçäàíèå äîïîëíèòåëüíûõ èñõîäíûõ ôàéëîâ . . . . . . . . . . . . . . . . 820
Äîáàâëåíèå ñóùåñòâóþùèõ èñõîäíûõ ôàéëîâ . . . . . . . . . . . . . . . . 820
Ìåíåäæåð ïðîåêòîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 821
Ïðîãðàììû ñ êîíñîëüíîé ãðàôèêîé . . . . . . . . . . . . . . . . . . . . . 821
Îòëàäêà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 822
Ïîøàãîâûé ïðîãîí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 822
Ïðîñìîòð ïåðåìåííûõ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 822
Ïîøàãîâàÿ òðàññèðîâêà ôóíêöèé . . . . . . . . . . . . . . . . . . . . . . 822
Òî÷êè îñòàíîâà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823

Ïðèëîæåíèå Ä. Óïðîùåííûé âàðèàíò êîíñîëüíîé ãðàôèêè 824


Èñïîëüçîâàíèå ïîäïðîãðàìì áèáëèîòåêè êîíñîëüíîé ãðàôèêè . . . . . . . . . 825
Ôóíêöèè áèáëèîòåêè êîíñîëüíîé ãðàôèêè . . . . . . . . . . . . . . . . . . . . 825
Ðåàëèçàöèÿ ôóíêöèé êîíñîëüíîé ãðàôèêè . . . . . . . . . . . . . . . . . . . . 827
Êîìïèëÿòîðû Microsoft . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827
Êîìïèëÿòîðû Borland. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 828
Ëèñòèíãè èñõîäíûõ êîäîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 828

Ïðèëîæåíèå Å. Àëãîðèòìû è ìåòîäû STL . . . . . . . . 836


Àëãîðèòìû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 836
Ìåòîäû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843
Èòåðàòîðû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 845

Ïðèëîæåíèå Æ. Îòâåòû è ðåøåíèÿ . . . . . . . . . . . 847


Ãëàâà 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 847
Ãëàâà 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 847
Ãëàâà 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 849
Ãëàâà 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853
Ãëàâà 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 855
Ãëàâà 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 859
Ãëàâà 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 862
Ãëàâà 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 866
Ãëàâà 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 871
Ãëàâà 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876
Ãëàâà 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 881
22 Ñîäåðæàíèå

Ãëàâà 12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 886
Ãëàâà 13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 889
Ãëàâà 14 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 890
Ãëàâà 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 894
Ãëàâà 16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 898

Ïðèëîæåíèå Ç. Áèáëèîãðàôèÿ . . . . . . . . . . . . . 899


Óãëóáëåííîå èçó÷åíèå Ñ++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 899
Îñíîâîïîëàãàþùèå äîêóìåíòû . . . . . . . . . . . . . . . . . . . . . . . . . 900
UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 900
Èñòîðèÿ Ñ++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 901
È äðóãîå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 901

Àëôàâèòíûé óêàçàòåëü . . . . . . . . . . . . . . . . 902


Ãëàâà 1
Îáùèå ñâåäåíèÿ
è Çà÷åì íóæíî îáúåêòíî-îðèåíòèðîâàííîå ïðîãðàììèðîâàíèå
è Õàðàêòåðèñòèêè îáúåêòíî-îðèåíòèðîâàííûõ ÿçûêîâ
è C++ è C
è Èçó÷åíèå îñíîâ
è Óíèâåðñàëüíûé ÿçûê ìîäåëèðîâàíèÿ (UML)

Èçó÷èâ ýòó êíèãó, âû ïîëó÷èòå îñíîâíûå íàâûêè ñîçäàíèÿ ïðîãðàìì íà ÿçûêå


C++, ïîääåðæèâàþùåì îáúåêòíî-îðèåíòèðîâàííîå ïðîãðàììèðîâàíèå (ÎÎÏ).
Äëÿ ÷åãî íóæíî ÎÎÏ? Êàêîâû ïðåèìóùåñòâà ÎÎÏ ïåðåä òàêèìè òðàäèöèîííû-
ìè ÿçûêàìè ïðîãðàììèðîâàíèÿ, êàê Pascal, C èëè BASIC? ×òî ÿâëÿåòñÿ îñíîâîé
ÎÎÏ?  ÎÎÏ ñóùåñòâóåò äâå êëþ÷åâûå êîíöåïöèè — îáúåêòû è êëàññû. Êàêîâ
ñìûñë ýòèõ äâóõ òåðìèíîâ? Êàê ñâÿçàíû ìåæäó ñîáîé ÿçûêè C è C++?
Ýòà ãëàâà ïîñâÿùåíà ðàññìîòðåíèþ ïåðå÷èñëåííûõ âîïðîñîâ, à òàêæå îáçîðó
ñðåäñòâ ÿçûêà, î êîòîðûõ ïîéäåò ðå÷ü â äðóãèõ ãëàâàõ êíèãè. Íå áåñïîêîéòåñü,
åñëè ìàòåðèàë, èçëîæåííûé â ýòîé ãëàâå, ïîêàæåòñÿ âàì ÷åðåñ÷óð àáñòðàêòíûì.
Âñå ìåòîäû è êîíöåïöèè, êîòîðûå ìû óïîìÿíåì, áóäóò ïîäðîáíî ðàññìîòðåíû
â ïîñëåäóþùèõ ãëàâàõ êíèãè.

Äëÿ ÷åãî íóæíî îáúåêòíî-


îðèåíòèðîâàííîå ïðîãðàììèðîâàíèå?
Ðàçâèòèå îáúåêòíî-îðèåíòèðîâàííîãî ìåòîäà îáóñëîâëåíî îãðàíè÷åííîñòüþ äðó-
ãèõ ìåòîäîâ ïðîãðàììèðîâàíèÿ, ðàçðàáîòàííûõ ðàíåå. ×òîáû ëó÷øå ïîíÿòü è îöå-
íèòü çíà÷åíèå ÎÎÏ, íåîáõîäèìî ðàçîáðàòüñÿ, â ÷åì ñîñòîèò ýòà îãðàíè÷åííîñòü
è êàêèì îáðàçîì îíà ïðîÿâëÿåòñÿ â òðàäèöèîííûõ ÿçûêàõ ïðîãðàììèðîâàíèÿ.

Ïðîöåäóðíûå ÿçûêè
C, Pascal, FORTRAN è äðóãèå ñõîäíûå ñ íèìè ÿçûêè ïðîãðàììèðîâàíèÿ îòíîñÿò-
ñÿ ê êàòåãîðèè ïðîöåäóðíûõ ÿçûêîâ. Êàæäûé îïåðàòîð òàêîãî ÿçûêà ÿâëÿåòñÿ óêà-
Äëÿ ÷åãî íóæíî îáúåêòíî-îðèåíòèðîâàííîå ïðîãðàììèðîâàíèå? 33

çàíèåì êîìïüþòåðó ñîâåðøèòü íåêîòîðîå äåéñòâèå, íàïðèìåð ïðèíÿòü äàííûå îò


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

Äåëåíèå íà ôóíêöèè
Êîãäà ðàçìåð ïðîãðàììû âåëèê, ñïèñîê êîìàíä ñòàíîâèòñÿ ñëèøêîì ãðîìîçäêèì.
Î÷åíü íåáîëüøîå ÷èñëî ïðîãðàììèñòîâ ñïîñîáíî óäåðæèâàòü â ãîëîâå áîëåå
500 ñòðîê ïðîãðàììíîãî êîäà, åñëè ýòîò êîä íå ðàçäåëåí íà áîëåå ìåëêèå ëîãè÷å-
ñêèå ÷àñòè. Ôóíêöèÿ ÿâëÿåòñÿ ñðåäñòâîì, îáëåã÷àþùèì âîñïðèÿòèå ïðè ÷òåíèè
òåêñòà ïðîãðàììû (òåðìèí ôóíêöèÿ óïîòðåáëÿåòñÿ â ÿçûêàõ C è C++; â äðóãèõ
ÿçûêàõ ïðîãðàììèðîâàíèÿ ýòî æå ïîíÿòèå íàçûâàþò ïîäïðîãðàììîé èëè ïðîöå-
äóðîé). Ïðîãðàììà, ïîñòðîåííàÿ íà îñíîâå ïðîöåäóðíîãî ìåòîäà, ðàçäåëåíà íà
ôóíêöèè, êàæäàÿ èç êîòîðûõ â èäåàëüíîì ñëó÷àå âûïîëíÿåò íåêîòîðóþ çàêîí-
÷åííóþ ïîñëåäîâàòåëüíîñòü äåéñòâèé è èìååò ÿâíî âûðàæåííûå ñâÿçè ñ äðóãèìè
ôóíêöèÿìè ïðîãðàììû.
Ìîæíî ðàçâèòü èäåþ ðàçáèåíèÿ ïðîãðàììû íà ôóíêöèè, îáúåäèíèâ íåñêîëü-
êî ôóíêöèé â ìîäóëü (çà÷àñòóþ ìîäóëü ïðåäñòàâëÿåò ñîáîé îòäåëüíûé ôàéë).
Ïðè ýòîì ñîõðàíÿåòñÿ ïðîöåäóðíûé ïðèíöèï: ïðîãðàììà äåëèòñÿ íà íåñêîëüêî
êîìïîíåíòîâ, êàæäûé èç êîòîðûõ ïðåäñòàâëÿåò ñîáîé íàáîð èíñòðóêöèé.
Äåëåíèå ïðîãðàììû íà ôóíêöèè è ìîäóëè ÿâëÿåòñÿ îñíîâîé ñòðóêòóðíîãî
ïðîãðàììèðîâàíèÿ. Ñòðóêòóðíîå ïðîãðàììèðîâàíèå ïðåäñòàâëÿåò ñîáîé íå÷òî
íå âïîëíå îïðåäåëåííîå, îäíàêî â òå÷åíèå íåñêîëüêèõ äåñÿòêîâ ëåò, ïîêà íå áûëà
ðàçðàáîòàíà êîíöåïöèÿ îáúåêòíî-îðèåíòèðîâàííîãî ïðîãðàììèðîâàíèÿ, îíî îñ-
òàâàëîñü âàæíûì ñïîñîáîì îðãàíèçàöèè ïðîãðàìì.

Íåäîñòàòêè ñòðóêòóðíîãî ïðîãðàììèðîâàíèÿ


 íåïðåêðàùàþùåìñÿ ïðîöåññå ðîñòà è óñëîæíåíèÿ ïðîãðàìì ñòàëè ïîñòåïåííî
âûÿâëÿòüñÿ íåäîñòàòêè ñòðóêòóðíîãî ïîäõîäà ê ïðîãðàììèðîâàíèþ. Âîçìîæíî,
âàì ïðèõîäèëîñü ñëûøàòü «ñòðàøíûå èñòîðèè» î òîì, êàê ïðîèñõîäèò ðàáîòà íàä
ïðîãðàììíûì ïðîåêòîì, èëè äàæå ñàìèì ó÷àñòâîâàòü â ñîçäàíèè òàêîãî ïðîåêòà:
çàäà÷à îêàçûâàåòñÿ ñëîæíåå, ÷åì êàçàëîñü, ñðîêè ñäà÷è ïðîåêòà ïåðåíîñÿòñÿ. Âñå
íîâûå è íîâûå ïðîãðàììèñòû ïðèâëåêàþòñÿ äëÿ ðàáîòû, ÷òî ðåçêî óâåëè÷èâàåò
ðàñõîäû. Îêîí÷àíèå ðàáîòû âíîâü ïåðåíîñèòñÿ, è â ðåçóëüòàòå ïðîåêò òåðïèò
êðàõ.
Ïðîàíàëèçèðîâàâ ïðè÷èíû ñòîëü ïå÷àëüíîé ñóäüáû ìíîãèõ ïðîåêòîâ, ìîæíî
ïðèéòè ê âûâîäó î íåäîñòàòî÷íîé ìîùè ñòðóêòóðíîãî ïðîãðàììèðîâàíèÿ: êàê
áû ýôôåêòèâíî íè ïðèìåíÿëñÿ ñòðóêòóðíûé ïîäõîä, îí íå ïîçâîëÿåò â äîñòàòî÷-
íîé ñòåïåíè óïðîñòèòü áîëüøèå ñëîæíûå ïðîãðàììû.
34 Ãëàâà 1. Îáùèå ñâåäåíèÿ

 ÷åì æå íåäîñòàòîê ïðîöåäóðíî-îðèåíòèðîâàííûõ ÿçûêîâ? Ñóùåñòâóåò äâå


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

Íåêîíòðîëèðóåìûé äîñòóï ê äàííûì


 ïðîöåäóðíîé ïðîãðàììå, íàïèñàííîé, ê ïðèìåðó, íà ÿçûêå C, ñóùåñòâóåò äâà
òèïà äàííûõ. Ëîêàëüíûå äàííûå íàõîäÿòñÿ âíóòðè ôóíêöèè è ïðåäíàçíà÷åíû äëÿ
èñïîëüçîâàíèÿ èñêëþ÷èòåëüíî ýòîé ôóíêöèåé. Íàïðèìåð, â ïðîãðàììå ñêëàäñêîãî
ó÷åòà ôóíêöèÿ, îñóùåñòâëÿþùàÿ âûâîä çàïèñè íà ýêðàí, ìîæåò èñïîëüçîâàòü ëî-
êàëüíûå äàííûå äëÿ õðàíåíèÿ èíôîðìàöèè î âûâîäèìîé çàïèñè. Ëîêàëüíûå äàí-
íûå ôóíêöèè íåäîñòóïíû íèêîìó, êðîìå ñàìîé ôóíêöèè, è íå ìîãóò áûòü èçìå-
íåíû äðóãèìè ôóíêöèÿìè.
Åñëè ñóùåñòâóåò íåîáõîäèìîñòü ñîâìåñòíîãî èñïîëüçîâàíèÿ îäíèõ è òåõ æå
äàííûõ íåñêîëüêèìè ôóíêöèÿìè, òî äàííûå äîëæíû áûòü îáúÿâëåíû êàê ãëî-
áàëüíûå. Ýòî, êàê ïðàâèëî, êàñàåòñÿ òåõ äàííûõ ïðîãðàììû, êîòîðûå ÿâëÿþòñÿ
íàèáîëåå âàæíûìè. Ïðèìåðîì çäåñü ìîæåò ñëóæèòü óæå óïîìÿíóòàÿ ó÷åòíàÿ
êíèãà. Ëþáàÿ ôóíêöèÿ èìååò äîñòóï ê ãëîáàëüíûì äàííûì (ìû íå ðàññìàòðèâà-
åì ñëó÷àé ãðóïïèðîâàíèÿ ôóíêöèé â ìîäóëè). Ñõåìà, èëëþñòðèðóþùàÿ êîíöåï-
öèþ ëîêàëüíûõ è ãëîáàëüíûõ äàííûõ, ïðèâåäåíà íà ðèñ. 1.1.

Ðèñ. 1.1. Ãëîáàëüíûå è ëîêàëüíûå ïåðåìåííûå

Áîëüøèå ïðîãðàììû îáû÷íî ñîäåðæàò ìíîæåñòâî ôóíêöèé è ãëîáàëüíûõ ïå-


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

Ðèñ. 1.2. Ïðîöåäóðíûé ïîäõîä

Áîëüøîå ÷èñëî ñâÿçåé ìåæäó ôóíêöèÿìè è äàííûìè, â ñâîþ î÷åðåäü, òàêæå


ïîðîæäàåò íåñêîëüêî ïðîáëåì. Âî-ïåðâûõ, óñëîæíÿåòñÿ ñòðóêòóðà ïðîãðàì-
ìû. Âî-âòîðûõ, â ïðîãðàììó ñòàíîâèòñÿ òðóäíî âíîñèòü èçìåíåíèÿ. Èçìåíåíèå
ñòðóêòóðû ãëîáàëüíûõ äàííûõ ìîæåò ïîòðåáîâàòü ïåðåïèñûâàíèÿ âñåõ ôóíê-
öèé, ðàáîòàþùèõ ñ ýòèìè äàííûìè. Íàïðèìåð, åñëè ðàçðàáîò÷èê ïðîãðàììû
ñêëàäñêîãî ó÷åòà ðåøèò ñäåëàòü êîä ïðîäóêòà íå 5-çíà÷íûì, à 12-çíà÷íûì, òî áó-
äåò íåîáõîäèìî èçìåíèòü ñîîòâåòñòâóþùèé òèï äàííûõ ñ short íà long. Ýòî îçíà-
÷àåò, ÷òî âî âñå ôóíêöèè, îïåðèðóþùèå êîäîì ïðîäóêòà, äîëæíû áûòü âíåñåíû
èçìåíåíèÿ, ïîçâîëÿþùèå îáðàáàòûâàòü äàííûå òèïà long. Ìîæíî ïðèâåñòè àíà-
ëîãè÷íûé áûòîâîé ïðèìåð, êîãäà â ñóïåðìàðêåòå èçìåíÿåòñÿ ðàñïîëîæåíèå îò-
äåëîâ, è ïîêóïàòåëÿì ïðèõîäèòñÿ ñîîòâåòñòâóþùèì îáðàçîì ìåíÿòü ñâîé ïðèâû÷-
íûé ïóòü îò îäíîãî îòäåëà ê äðóãîìó.
Êîãäà èçìåíåíèÿ âíîñÿòñÿ â ãëîáàëüíûå äàííûå áîëüøèõ ïðîãðàìì, áûâàåò
íåïðîñòî áûñòðî îïðåäåëèòü, êàêèå ôóíêöèè íåîáõîäèìî ñêîððåêòèðîâàòü. Äàæå
â òîì ñëó÷àå, êîãäà ýòî óäàåòñÿ ñäåëàòü, èç-çà ìíîãî÷èñëåííûõ ñâÿçåé ìåæäó
ôóíêöèÿìè è äàííûìè èñïðàâëåííûå ôóíêöèè íà÷èíàþò íåêîððåêòíî ðàáîòàòü
ñ äðóãèìè ãëîáàëüíûìè äàííûìè. Òàêèì îáðàçîì, ëþáîå èçìåíåíèå âëå÷åò çà ñî-
áîé äàëåêî èäóùèå ïîñëåäñòâèÿ.

Ìîäåëèðîâàíèå ðåàëüíîãî ìèðà


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

Ñâîéñòâà
Ïðèìåðàìè ñâîéñòâ (èíîãäà íàçûâàåìûõ õàðàêòåðèñòèêàìè) äëÿ ëþäåé ìîãóò ÿâ-
ëÿòüñÿ öâåò ãëàç èëè ìåñòî ðàáîòû; äëÿ ìàøèí — ìîùíîñòü äâèãàòåëÿ è êîëè÷åñò-
âî äâåðåé. Òàêèì îáðàçîì, ñâîéñòâà îáúåêòîâ ðàâíîñèëüíû äàííûì â ïðîãðàììàõ:
îíè èìåþò îïðåäåëåííîå çíà÷åíèå, íàïðèìåð ãîëóáîé äëÿ öâåòà ãëàç èëè 4 äëÿ êî-
ëè÷åñòâà äâåðåé àâòîìîáèëÿ.

Ïîâåäåíèå
Ïîâåäåíèå — ýòî íåêîòîðàÿ ðåàêöèÿ îáúåêòà â îòâåò íà âíåøíåå âîçäåéñòâèå. Íà-
ïðèìåð, âàø áîññ â îòâåò íà ïðîñüáó î ïîâûøåíèè ìîæåò äàòü îòâåò «äà» èëè
36 Ãëàâà 1. Îáùèå ñâåäåíèÿ

«íåò». Åñëè âû íàæìåòå íà òîðìîç àâòîìîáèëÿ, ýòî ïîâëå÷åò çà ñîáîé åãî îñòàíîâ-
êó. Îòâåò è îñòàíîâêà ÿâëÿþòñÿ ïðèìåðàìè ïîâåäåíèÿ. Ïîâåäåíèå ñõîäíî ñ ôóíê-
öèåé: âû âûçûâàåòå ôóíêöèþ, ÷òîáû ñîâåðøèòü êàêîå-ëèáî äåéñòâèå (íàïðèìåð,
âûâåñòè íà ýêðàí ó÷åòíóþ çàïèñü), è ôóíêöèÿ ñîâåðøàåò ýòî äåéñòâèå.
Òàêèì îáðàçîì, íè îòäåëüíî âçÿòûå äàííûå, íè îòäåëüíî âçÿòûå ôóíêöèè íå
ñïîñîáíû àäåêâàòíî îòîáðàçèòü îáúåêòû ðåàëüíîãî ìèðà.

Îáúåêòíî-îðèåíòèðîâàííûé ïîäõîä
Îñíîâîïîëàãàþùåé èäååé îáúåêòíî-îðèåíòèðîâàííîãî ïîäõîäà ÿâëÿåòñÿ îáú-
åäèíåíèå äàííûõ è äåéñòâèé, ïðîèçâîäèìûõ íàä ýòèìè äàííûìè, â åäèíîå öåëîå,
êîòîðîå íàçûâàåòñÿ îáúåêòîì.
Ôóíêöèè îáúåêòà, íàçûâàåìûå â C++ ìåòîäàìè èëè ôóíêöèÿìè-÷ëåíàìè,
îáû÷íî ïðåäíàçíà÷åíû äëÿ äîñòóïà ê äàííûì îáúåêòà. Åñëè íåîáõîäèìî ñ÷èòàòü
êàêèå-ëèáî äàííûå îáúåêòà, íóæíî âûçâàòü ñîîòâåòñòâóþùèé ìåòîä, êîòîðûé
âûïîëíèò ñ÷èòûâàíèå è âîçâðàòèò òðåáóåìîå çíà÷åíèå. Ïðÿìîé äîñòóï ê äàííûì
íåâîçìîæåí. Äàííûå ñîêðûòû îò âíåøíåãî âîçäåéñòâèÿ, ÷òî çàùèùàåò èõ îò ñëó-
÷àéíîãî èçìåíåíèÿ. Ãîâîðÿò, ÷òî äàííûå è ìåòîäû èíêàïñóëèðîâàíû. Òåðìèíû
ñîêðûòèå è èíêàïñóëÿöèÿ äàííûõ ÿâëÿþòñÿ êëþ÷åâûìè â îïèñàíèè îáúåêòíî-
îðèåíòèðîâàííûõ ÿçûêîâ.
Åñëè íåîáõîäèìî èçìåíèòü äàííûå îáúåêòà, òî, î÷åâèäíî, ýòî äåéñòâèå òàêæå
áóäåò âîçëîæåíî íà ìåòîäû îáúåêòà. Íèêàêèå äðóãèå ôóíêöèè íå ìîãóò èçìå-
íÿòü äàííûå êëàññà. Òàêîé ïîäõîä îáëåã÷àåò íàïèñàíèå, îòëàäêó è èñïîëüçîâà-
íèå ïðîãðàììû.
Òèïè÷íàÿ ïðîãðàììà íà ÿçûêå C++ ñîñòîèò èç ñîâîêóïíîñòè îáúåêòîâ, âçàè-
ìîäåéñòâóþùèõ ìåæäó ñîáîé ïîñðåäñòâîì âûçîâà ìåòîäîâ äðóã äðóãà. Ñòðóêòó-
ðà ïðîãðàììû íà C++ ïðèâîäèòñÿ íà ðèñ. 1.3.

Ðèñ. 1.3. Îáúåêòíî-îðèåíòèðîâàííûé ïîäõîä

Вам также может понравиться