Ãëàâà 2: Òèïîâå äàííè â Ñ++.
Ñúäúðæàíèå íà âòîðà ãëàâà
:
2.1. Êîíñòàíòíè ñòîéíîñòè
2.2. Ïðîìåíëèâè
2.3. Óêàçàòåëíè
òèïîâå
2.4. Ñúîòíàñÿùè òèïîâå (reference types)
2.5. Êîíñòàíòíè
òèïîâå
2.6. Èçáðîèìè òèïîâå
2.7. Òèï ìàñèâ
2.8. Òèï
êëàñ
Åçèêúò Ñ++ ïðåäëàãà íàáîð îò ïðåäâàðèòåëíî äåôèíèðàíè òèïîâå
äàííè, îïåðàòîðè çà îáðàáîòêàòà èì, êàêòî è íÿêîëêî îïåðàòîðè çà ïðîãðàìåí
êîíòðîë. Òåçè åëåìåíòè îïðåäåëÿò àçáóêàòà, ÷ðåç êîÿòî ìîãàò äà áúäàò íàïèñàíè
ìíîæåñòâî ãîëåìè ñèñòåìè, ïðèëîæèìè â ðåàëíèÿ ñâÿò. Íà òîâà áàçèñíî íèâî Ñ++ å
åäèí ïðîñò åçèê. Íåãîâàòà èçðàçèòåëíà ñèëà ñå óâåëè÷àâà ÷ðåç ïîääúðæàíåòî íà
ìåõàíèçìè, êîèòî ïîçâîëÿâàò íà ïðîãðàìèñòà äà äåôèíèðà íîâè äàííîâè
ñúâêóïíîñòè.
Ïúðâàòà ñòúïêà ïðè óñâîÿâàíåòî íà Ñ++ - ðàçáèðàíåòî íà
áàçèñíèÿ åçèê - å òåìà íà òàçè è ñëåäâàùàòà ãëàâà. Òàçè ãëàâà îáñúæäà
ïðåäâàðèòåëíî äèôèíèðàíèòå òèïîâå äàííè ïîÿñíÿâà ìåõàíèçìà çà êîíñòðóèðàíå íà
íîâè òèïîâå äàííè, äîêàòî ãëàâà 2 ðàçãëåæäà ïðåäâàðèòåëíî äåôèíèðàíèòå îïåðàöèè
è îïåðàòîðè. Òåêñòúò íà ïðîãðàìàòà, êîÿòî ïèøåì, êàêòî è äàííèòå, êîèòî
îáðàáîòâàìå, ñà çàïèñàíè â ïàìåòòà íà êîìïþòúðà êàòî ïîñëåäîâàòåëíîñò îò áèòîâå.
Âñåêè áèò ïðåäñòàâëÿâà åäèíè÷íà êëåòêà, êúäåòî ìîãàò äà ñå ñúäúðæàò ñòîéíîñòèòå
0 èëè 1. Íà ôèçè÷åí åçèê òåçè ñòîéíîñòè ñà åëåêòðè÷åñêè çàðÿäè, ñúîòâåòñòâóâàùè
íà “off” èëè “on”. Îáèêíîâåíî ÷àñò îò ïàìåòòà íà êîìïþòúðà èçãëåæäà
òàêà:
...00011011011100010110010000111011...
Ñúâêóïíîñòòà îò
áèòîâå íà òîâà íèâî íÿìà ñòðóêòóðà. Òðóäíî å äà ñå ãîâîðè çà òîçè ïîòîê îò
áèòîâå ïî êîéòî è äà å ñìèñëåí íà÷èí.
Âúðõó ïîñëåäîâàòåëíîñòòà îò áèòîâå
ñå íàëàãà ñòðóêòóðà êàòî ñå ñ÷èòà, ÷å òå ñà ãðóïèðàíè â áàéòîâå è äóìè. Íàé -
îáùî êàçàíî, áàéòúò å ñúâêóïíîñò îò 8 áèòà. Îáèêíîâåíî åäíà äóìà ñå îáðàçóâà îò
16 èëè 32 áèòà. Ðàçìåðúò íà áàéòà è äóìàòà âàðèðàò ìåæäó ðàçëè÷íèòå êîìïþòðè. Çà
òåçè ñòîéíîñòè ÷åñòî ñå êàçâà, ÷å ñà ìàøèííî çàâèñèìè. Ôèãóðà 1.1. ïîêàçâà
ãîðíàòà ïîñëåäîâàòåëíîñò îò áèòîâå, îðãàíèçèðàíà â ÷åòèðè àäðåñèðóåìè ðåäèöè îò
áàéòîâå.
Îðãàíèçàöèÿòà íà ïàìåòòà íè ïîçâîëÿâà äà ñå îáðúùàìå êúì
ïîäõîäÿùà ñúâêóïíîñò îò áèòîâå. Ïî òàêúâ íà÷èí âå÷å å âúçìîæíî äà ãîâîðèì çà
äóìàòà íà àäðåñ 1024 èëè çà áàéòà íà àäðåñ 1040, êîåòî íè ïîçâîëÿâà äà êàçâàìå
íàïðèìåð, ÷å áàéòà íà àäðåñ 1032 íå å ðàâåí íà áàéòà îò àäðåñ 1048.
Íî
âñå îùå íå å âúçìîæíî äà ñå ãîâîðè ñìèñëåíî çà ñúäúðæàíèåòî íà áàéòà íà àäðåñ
1032. Çàùî? Çàùîòî íå çíàåì êàê äà èíòåðïðåòèðàìå íåãîâàòà áèòîâà
ïîñëåäîâàòåëíîñò. Çà äà ãîâîðèì çà çíà÷åíèåòî íà áàéòà îò àäðåñ 1032, íèå òðÿáâà
äà çíàåì òèïà íà ñòîéíîñòòà, êîÿòî å ïðåäñòàâåíà.
Àáñòðàêöèÿòà íà
òèïîâåòå íè ïîçâîëÿâà äà ïðàâèì ñìèñëåíà èíòåðïðåòàöèÿ íà áèòîâà
ïîñëåäîâàòåëíîñò ñ ôèêñèðàíà äúëæèíà. Ñèìâîëèòå, öåëèòå è ðåàëíèòå ÷èñëà ñà
ïðèìåðè çà
1024 0 0 0 1 1 0 1 1
1032 0 1 1 1 0 0 0 1
1040 0 1 1 0 0
1 0 0
1048 0 0 1 1 1 0 1 1
Àäðåñèðóåìà ìàøèííà ïàìåò, òèïîâå äàííè.
Äðóãè òèïîâå ñà àäðåñèòå â ïàìåòòà è ìàøèííèòå èíñòðóêöèè, êîèòî
óïðàâëÿâàò ðàáîòàòà íà êîìïþòúðà.
Ñ++ ïðåäëàãà åäèí ïðåäâàðèòåëíî
äåôèíèðàí íàáîð îò òèïîâå íà äàííè, êîéòî ïîçâîëÿâà ïðåäñòàâÿíåòî íà öåëè è
ðåàëíè ÷èñëà è íà ñàìîñòîÿòåëíè ñèìâîëè.
Òèïúò char ìîæå äà áúäå
èçïîëçóâàí çà ïðåäñòàâÿíå íà åäèíè÷íè ñèìâîëè èëè ìàëêè öåëè ÷èñëà. Çàïèñâà ñå â
åäíà ìàøèííà äóìà.
Òèïúò int ñå èçïîëçóâà çà ïðåäñòàâÿíå íà öåëè
ñòîéíîñòè. Îáèêíîâåíî ñå çàïèñâà â åäíà ìàøèííà äóìà.
Ñ++ ïðåäëàãà ñúùî
short è long integer òèïîâå. Ôàêòè÷åñêèÿò ðàçìåð íà òåçè òèïîâå å ìàøèííî
çàâèñèì. Òèïîâåòå char, short, int è long ñå íàðè÷àò öåëè òèïîâå. Öåëèòå òèïîâå
ìîãàò äà áúäàò ñúñ èëè áåç çíàê (signed/unsigned). Ðàçëèêàòà ñå ïðîÿâÿâà â
ïðåäíàçíà÷åíèåòî íà íàé-ëåâèÿ áèò íà òèïà. Àêî òèïúò èìà çíàê, íàé-ëåâèÿò áèò ñå
èíòåðïðåòèðà êàòî çíàêîâ áèò, à îñòàíàëèòå áèòîâå ïðåäñòàâÿò ñòîéíîñòòà. Àêî
òèïúò ïðåäñòàâÿ áåç çíàêîâà ñòîéíîñò, âñè÷êè áèòîâå îïðåäåëÿò ñòîéíîñòòà. Àêî
çíàêîâèÿò áèò èìà ñúäúðæàíèå 1, ñòîéíîñòòà ñå èíòåðïðåòèðà êàòî îòðèöàòåëíà; àêî
å 0, êàòî ïîëîæèòåëíà. Åäèí 8-áèòîâ signed char ìîæå äà ïðåäñòàâè ñòîéíîñòèòå îò
-128 äî 127; à unsigned char - îò 0 äî 255.
Òèïîâåòå float è double
ïðåäñòàâÿò ðåàëíè ÷èñëà ñ åäèíè÷íà è äâîéíà òî÷íîñò. Îáèêíîâåíî òèïúò float ñå
ïðåäñòàâÿ â åäíà äóìà, à double - â äâå. Èñòèíñêèÿò ðàçìåð å ìàøèííî çàâèñèì.
Èçáîðúò íà òèïà äàííè ñå îïðåäåëÿ îò ðàçìåðà íà ñòîéíîñòèòå, êîèòî òðÿáâà äà
áúäàò çàïèñâàíè. Íàïðèìåð, àêî ñòîéíîñòèòå íèêîãà íå íàäõâúðëÿò 255 è íå ñà
ïî-ìàëêè îò 0, òîãàâà òèïúò unsigned char å ïîäõîäÿù. Îáà÷å, àêî ñå î÷àêâà
ñòîéíîñòèòå äà íàäõâúðëÿò 255, å íåîáõîäèìî äà ñå èçáåðå íÿêîé îò ïî-ãîëåìèòå
äàííîâè òèïîâå.
Òðåòèÿò òèï äàííè, ïðåäñòàâÿù ðåàëíè ÷èñëà long double,
âåðîÿòíî ùå áúäå äîáàâåí â áëèçêî áúäåùå. Long double å ïðåäëîæåí çà âêëþ÷âàíå
êúì ñòàíäàðòà íà åçèêà C ANSI.
2.1. Êîíñòàíòíè ñòîéíîñòè
Êîãàòî â
äàäåíà ïðîãðàìà ñå ïîÿâÿâà ñòîéíîñò êàòî 1, íàïðèìåð, òÿ ñå ïðèåìà çà ëèòåðàëíà
êîíñòàíòà: ëèòåðàëíà, çàùîòî ìîæåì äà ãîâîðèì çà íåÿ ñàìî êàòî çà ñòîéíîñò,
êîíñòàíòà, çàùîòî ñòîéíîñòòà é íå ìîæå äà áúäå ïðîìåíÿíà. Âñåêè ëèòåðàë èìà
ñúîòâåòåí òèï. 1, íàïðèìåð å îò òèï int. 3.14159 å ëèòåðàëíà êîíñòàíòà îò òèï
double. Ñ÷èòàìå ëèòåðàëíèòå êîíñòàíòè çà íåàäðåñèðóåìè; âúïðåêè, ÷å òÿõíàòà
ñòîéíîñò å ðàçïîëîæåíà íÿêúäå â ïàìåòòà, äîñòúïúò äî òîçè àäðåñ íå å
ñúùåñòâåí.
Öåëèòå ëèòåðàëíè êîíñòàíòè ìîãàò äà áúäàò íàïèñàíè â
äåñåòè÷åí, îñìè÷åí èëè øåñòíàäåñåòè÷åí âèä. ( Òîâà íå ïðîìåíÿ áèòîâîòî
ïðåäñòàâÿíå íà ñòîéíîñòòà.) Ñòîéíîñòòà 20, íàïðèìåð, ìîæå äà áúäå çàïèñàíà ïî
åäèí îò ñëåäíèòå òðè íà÷èíà:
20 // äåñåòè÷åí
024 // îñìè÷åí
0õ14 //
øåñòíàäåñåòè÷åí
Âîäåùàòà íóëà çà ëèòåðàëíà êîíñòàíòà îò öÿë òèï óêàçâà,
÷å êîíñòàíòàòà å îò îñìè÷åí òèï. Ïðåäñòàâÿíå, èçïîëçóâàùî 0õ èëè 0Õ â íà÷àëîòî
íà êîíñòàíòàòà, óêàçâà, ÷å òÿ å â øåñòíàäåñåòè÷åí çàïèñ. (Ïðèëîæåíèå À îáñúæäà
îòïå÷àòâàíåòî íà ñòîéíîñòè â îñìè÷åí è øåñòíàäåñåòè÷åí çàïèñ).
Âñÿêà öÿëà
ëèòåðàëíà êîíñòàíòà ìîæå äà áúäå äåôèíèðàíà îò òèï long ÷ðåç çàïèñâàíå íà L èëè
l ñëåä ñòîéíîñòòà é. (Áóêâàòà L ìîæå äà áúäå ãëàâíà èëè ìàëêà). Èçïîëçóâàíåòî íà
ìàëêà áóêâà l íå ñå ïðåïîðú÷âà, ïîíåæå ëåñíî ìîæå äà áúäå ñáúðêàíà ñ öèôðàòà 1.
Ïî ïîäîáåí íà÷èí öÿëà ëèòåðàëíà êîíñòàíòà ìîæå äà áúäå äåôèíèðàíà êàòî unsigned
÷ðåç äîáàâÿíå íà U èëè u ñëåä ñòîéíîñòòà é. Ëèòåðàëíà êîíñòàíòà îò òèï unsigned
long ìîæå ñúùî äà ñå äåôèíèðà. Íàïðèìåð,
128u 1024UL 1L
8Lu
Ðåàëíèòå ëèòåðàëíè êîíñòàíòè ìîãàò äà áúäàò çàïèñâàíè ÷ðåç åêñïîíåíòà
èëè ïî îáè÷àéíèÿ íà÷èí. Ïðè ïúðâîòî ïðåäñòàâÿíå åêñ-ïîíåíòàòà ìîæå äà áúäå
çàïèñàíà êàòî ñå èçïîëçóâàò áóêâèòå Å èëè å. Ðåàëíà ëèòåðàëíà êîíñòàíòà ìîæå äà
áúäå äåôèíèðàíà è îò òèï float ÷ðåç çàïèñâàíå íà F èëè f ñëåä ñòîéíîñòòà é. Åòî
íÿêîëêî ïðèìåðà çà ðåàëíè ëèòåðàëíè êîíñòàíòè:
3.14159F 0.1f 0.0
3e1
1.0E-3 2.
Ïå÷àòóåìèòå ëèòåðàëíè ñèìâîëíè êîíñòàíòè ìîãàò äà áúäàò
çàïèñàíè ÷ðåç çàãðàæäàíåòî íà ñèìâîëà â åäèíè÷íè êàâè÷êè. Íàïðèìåð,
‘a’
‘2’ ‘,’ ‘ ‘ (blank)
Íåïå÷àòóåìèòå ñèìâîëè, åäèíè÷íèòå èëè äâîéíèòå
êàâè÷êè, êàêòî è îáúðíàòàòà íàêëîíåíà ÷åðòà ìîãàò äà áúäàò ïðåäñòàâåíè ÷ðåç
ñëåäíèòå escape - ïîñëåäîâàòåëíîñòè:
newline n
horizontal tab
t
vertical tab v
backspace b
carrige return r
formfeed
f
alert (bell) a
backslash
question mark ?
single quote
’
double quote "
Ìîæå äà áúäå èçïîëçóâàíà è îáîáùåíà escape -
ïîñëåäîâàòåëíîñò. Òÿ èçãëåæäà òàêà:
îîî
êúäåòî îîî ïðåäñòàâëÿâà
ïîñëåäîâàòåëíîñò îò åäíà, äâå èëè òðè îñìè÷íè öèôðè. Ñòîéíîñòòà, ïðåäñòàâåíà
÷ðåç îñìè÷íèòå öèôðè, ïðåäñòàâëÿâà ÷èñëåíàòà ñòîéíîñò íà ñèìâîëà â ñèìâîëíèÿ
íàáîð íà ìàøèíàòà. Ïðèìåðèòå, êîèòî ñëåäâàò, ïðåäñòàâëÿâàò ëèòåðàëíè êîíñòàíòè,
êàòî ñå èçïîëçóâà ñèìâîëíèÿ íàáîð ASCII:
7 (bell) 14 (newLine)
�
(null) �62 (‘2’)
Âñÿêà íèçîâà ëèòåðàëíà êîíñòàíòà ïðåäñòàâëÿâà
ñúâêóïíîñò îò íóëà èëè ïîâå÷å ñèìâîëà, îáãðàäåíè ñ äâîéíè êàâè÷êè. Íåïå÷àòóåìèòå
ñèìâîëè ìîãàò äà áúäàò ïðåäñòàâÿíè ÷ðåç òåõíèòå escape - ïîñëåäîâàòåëíîñòè.
Íèçîâ ëèòåðàë ìîæå äà çàåìå íÿêîëêî ðåäà îò òåêñòà íà ïðîãðàìàòà. Îáðàòíàòà
íàêëîíåíà ÷åðòà êàòî ïîñëåäåí ñèìâîë íà ðåäà óêàçâà, ÷å íèçîâèÿò ëèòåðàë
ïðîäúëæàâà íà ñëåäâàùèÿ ðåä. Ñëåäâà ïðèìåð çà íèçîâè ëèòåðàëíè
êîíñòàíòè:
"" (null string)
"a"
"nCCtoptionstfile:[cC]n"
"a
multi-line
string literal signal its
continuation with a
backslash"
Íèçîâèÿò ëèòåðàë å îò òèï ìàñèâ îò ñèìâîëè. Òîé ñå ñúñòîè îò
íèçîâ ëèòåðàë è îãðàíè÷àâàùèÿ ñèìâîë null, äîáàâåí îò êîìïèëàòîðà. Íàïðèìåð,
äîêàòî ‘a’ ïðåäñòàâÿ åäèíè÷íèÿ ñèìâîë à, òî “a” ñå çàïèñâà êàòî ñèìâîëà à,
ñëåäâàí îò ñèìâîëà null. Ñèìâîëúò null ñå èçïîëçóâà çà îòáåëÿçâàíå íà êðàÿ íà
íèçà.