Język C C++.pdf

(228 KB) Pobierz
24888382 UNPDF
J˛ezykC/C++
MarcinSzpyrka
KatedraAutomatyki
AkademiaGórniczo-HutniczawKrakowie
c MarcinSzpyrka,2005/06
Cz˛e´s´c1
Literatura
1.BrianW.Kernighan,DennisM.Ritchie:„J˛ezykANSIC”,WydawnictwaNaukowo–Tech-
niczne,Warszawa,2003.
2.BjarneStroustrup:„J˛ezykC++”,WydawnictwoNaukowo–Techniczne,Warszawa,2002.
3.BruceEckel:„ThinkinginC++”,2nded.,2000,(ksi˛a˙zkajestdost˛epnawsieciwww).
4.JerzyGr˛ebosz:„SymfoniaC++”,OficynaKallimach,Kraków,2000.
5.JerzyGr˛ebosz:„PasjaC++”,OficynaKallimach,Kraków,2000.
J˛ezykC
J˛ezykCzostałnapisanyprzezD.Ritchie’go.Pierwszyokresrozwojuj˛ezykatolata1969-1973.
Pocz˛atkowoj˛ezyktenbyłprzeznaczonydotworzeniaoprogramowaniasystemowego(przyjegopo-
mocyzostałnapisanysystemoperacyjnyUNIX).Wmiar˛eupływuczasustałsi˛ej˛ezykiemogólnego
przeznaczenia.
J˛ezykCjestuwa ˙ zanyzaj˛ezykumo ˙ zliwiaj˛acyszybkiepisanieefektywnychprogramów.Ł˛aczy
onwsobiezaletyj˛ezykówprogramowaniastrukturalnegowysokiegopoziomuzzaletaminiskiego
poziomuj˛ezykówasemblerowych.
Cechyj˛ezyka
•pełnyzakresinstrukcjisteruj˛acychwykonaniemprogramu,zawieraj˛acyinstrukcjep˛etli,warun-
kowegowykonaniaiwyboru;
•du ˙ zyzestawoperatorów,zktórychcz˛e´s´codpowiadawprostinstrukcjommaszynowymcodaje
mo ˙ zliwo´s´cwykorzystaniaprocesorakomputerowegotakefektywnie,jakwj˛ezykuasemblero-
wym;
•bogatyzestawprostychpredefiniowanychtypówdanychimo˙zliwo´s´ctworzeniazło˙zonych
strukturdanych;
•wska´znikinadaneifunkcje,wrazzarytmetyk˛aumo ˙ zliwiaj˛ac˛amanipulowaniewska´znikami
(adresamipami˛eci);
•preprocesorprzetwarzaj˛acytekstprogramu,umo˙zliwiaj˛acym.in.kompilacj˛ewarunkow˛a.
2
J˛ezykC/C++,cMarcinSzpyrka2005/06
J˛ezykC++
Autorempierwszejwersjij˛ezykajestBjarneStroustrup.StandardISOratyfikowanow1998roku.
Zwyj˛atkiemkilkudrobnychszczegółów,C++jestnadzbioremC.Ameryka´nskiInstytutStandardów
ANSIstoinastra˙zyjednolitegostandarduj˛ezyka,którynazywasi˛estandardemANSICiANSIC++.
Kluczowympoj˛eciemwC++jestklasa.Jestonatypemdefiniowanymprzezu ˙ zytkownika.Klasy
zapewniaj˛aukrywaniedanych,gwarantuj˛ainicjalizacj˛edanych,niejawn˛akonwersj˛etypówdlatypów
definiowanychprzezu ˙ zytkownika,dynamiczn˛atypizacj˛e,zarz˛adzaniepami˛eci˛akontrolowaneprzez
u˙zytkownikaimechanizmydoprzeci˛a˙zaniaoperatorów.
Cechyj˛ezyka
C++jestj˛ezykiemprogramowaniaogólnegoprzeznaczeniaukierunkowanymnaprogramowanie
systemowe,który
•jestulepszonymj˛ezykiemC,
•wspieraabstrakcj˛edanych(klasy),
•wspieraprogramowanieobiektowe,
•wspieraprogramowanieuogólnione(szablony).
Zasadyorganizacjikodu-programowaniestrukturalne
Wtrywialnymprzypadkuprogramzj˛ezykuC(C++)mo ˙ zeskłada´csi˛etylkozjednegoplikui
jednejfunkcji.
Funkcjajestwydzielon˛acz˛e´sci˛aprogramu,realizuj˛ac˛apewnezadanie.Kompletnyprogrammusi
zawiera´cfunkcj˛eonazwiemainodktórejrozpoczynasi˛ewykonanieprogramu.
Doprogramumo ˙ znadoł˛acza´cplikizawieraj˛acenagłówki(opis)funkcjizdefiniowanychwinnych
plikachlubfunkcjisystemowych(dyrektywainclude).
#include <iostream>
int main()
{
std::cout<<"C++\n";
}
Preprocesor
Pierwszymetapemkompilacjijesturuchomieniedlaka ˙ zdegoplikukompilowanegokodu´zródło-
wegopreprocesora.Jegopodstawowymzadaniemjestprzygotowaniekodudokompilacji,poprzez
wykonaniezawartychwkodziedyrektywpreprocesora.
Dyrektywypreprocesorarozpoczynaj˛asi˛eznakiem#is˛aumieszczanewosobnychliniach.Poza
dyrektyw˛awdanejliniimo˙zewyst˛api´cjedyniekomentarz.
Dyrektywa#includepowodujewstawieniewmiejscujejwyst˛apieniatre´scipodanegopliku.Dy-
rektywawyst˛apujewdwóchpostaciach,pierwsz˛awykorzystujesi˛edowł˛aczaniaplikównagłówko-
wychbibliotek,drug˛a,doplików,któresamipiszemy
J˛ezykC/C++,cMarcinSzpyrka2005/06
3
#include <nazwa_pliku>
#include "nazwa_pliku"
Preprocesor–ł˛aczenieplików
Wewł˛aczanymplikumog˛aznajdowa´csi˛ekolejnedyrektywy#include,wł˛aczaj˛acekolejnepliki.
Danyplikmo ˙ zeby´cwł˛aczonydoplikutylkoraz.Abyzapobiecewentualnemuwielokrotnemuwł˛a-
czeniudanegopliku,mo ˙ znawykorzysta´cdyrektywykompilacjiwarunkowej.
#ifndef PLIK_X
#define PLIK_X
//trescpliku
#endif
Je´sliplikzostaniewł˛aczonydokompilacjicho´craz,zdefiniowanazostanienazwaPLIK_X.Przy
kolejnejpróbiewł˛aczeniategoplikunazwaPLIK_Xb˛edzieju ˙ zzdefiniowanainamocykompilacji
warunkowejnicztegoplikuporazdrugikompilowanenieb˛edzie.
Kompilacjaikonsolidacja
Zprzygotowanegoprzezpreprocesorkodu´zródłowegogenerowanyjestkodwassemblerze,b˛e-
d˛acysymboliczn˛areprezentacj˛akodubinarnego.Procestenjestwykonywanyprzezgeneratorkodu.
Kodwassemblerzejestnast˛epnietłumaczonyprzeztranslator,nazywanyrównie ˙ zassemblerem,
nakodmaszynowy(binarny)uruchamialnyprzezprocesor.
Wszystkiemodułyprogramuwpostacikodumaszynowegos˛anast˛epnieł˛aczoneprzezlinkerz
dostarcznymizkompilatoremisystememoperacyjnymbibliotekamiimodułami,wcelustworzenia
programuuruchamialnego.Procestennazywamykonsolidacj˛a.
Tworzenieplikuwykonywalnego
preprocesor−!generatorkodu−!asembler−!linker
Plikinagłówkowe
Wrazzrozwojemj˛ezykaC++uległzmianiestyldoł˛aczaniaplikównagłówkowychdoprogramu.
Nowewersjekompilatorówdopuszczaj˛acoprawdadwiewersje,alewprzypadkukorzystaniaze
starszejwersjikompilatoryzgłaszaj˛auwagi.
#include <iostream.h>//starawersja
#include <iostream> //nowawersja
Biblioteki,którezostały„wspadku”zj˛ezykaCs˛aci˛agledost˛epnezrozszerzeniem„.h”.Nowy
styl(C++)doł˛aczaniatychbibliotekodrzucarozszerzenieijednocze´sniedodanazostajelitera„c”na
pocz˛atkunazwybiblioteki.
#include <stdlib.h>//starawersja
#include <cstdlib>//nowawersja
Przestrzenienazw
Ka˙zdyzbiórdefinicjiwbibliotecejestumieszczonywtzw.przestrzeninazw.Dzi˛ekitemu
wró ˙ znychprzestrzeniachnazwmog˛aistnie´cidentycznenazwybezwywołaniakolizji.Odwołanie
4
J˛ezykC/C++,cMarcinSzpyrka2005/06
si˛edokonkretnegoelementu(obiektu,funkcji)przestrzeninazwkoniecznejestpodaniejegonazwy
poprzedzonejnazw˛aprzestrzeniioperatoremzakresu,np.: std::cout .
Abyunikn˛a´ckonieczno´scikorzystaniazpełnychnazwmo ˙ znadoł˛aczy´cjejnazw˛ekorzystaj˛ac
zinstrukcjiusing(niejesttozalecaneprzywi˛ekszychprogramach).StandardowebibliotekiC++
umieszczones˛awprzestrzeninazwstd.
#include <iostream>
usingnamespace std;
Zasadypisaniakodu´zródłowego
•Nagłówekfunkcjizawiera(odlewej):typzwracanegowyniku,nazw˛efunkcjiilist˛eargumen-
tówumieszczon˛awnawiasachokr˛agłych(argumentyoddzielasi˛eprzecinkiem).
•Instrukcjeskładaj˛acesi˛enakodfunkcjiumieszczasi˛ewnawiasachklamrowych’{’,’}’.Para
nawiasówklamrowychmo ˙ zesłu ˙ zy ´ cdogrupowaniainstrukcji.Ci˛aginstrukcjiumieszczony
wewn˛atrznawiasówklamrowychokre´slanyjestmianeminstrukcjizło˙zonej.
•Ka ˙ zdainstrukcjawj˛ezykuC(C++)musiby´czako´nczona´srednikiem’;’. ´ Srednikanieumiesz-
czasi˛epozamykaj˛acymnawiasieklamrowym(s˛awyj˛atki).To´srednik,aniekonieclinii,
decydujeotymgdzieko´nczysi˛einstrukcja.Sam´sredniktraktowanyjestjakoinstrukcjapu-
sta.
•Niemo ˙ znadzieli´c(przenosi´cdonowejlinii)nazwzmiennych,funkcjiisłówkluczonych.
Zmienne1
Zmienn˛awj˛ezykuprogramowanianazywamywielko´s´c,któramo˙zeprzechowywa´cwarto´s´cnale-
˙ z˛ac˛adopewnegozbiorunazywanegotypemzmiennej.Zmiennajestjednoznacznieidentyfikowana
przezswoj˛anazw˛e(identyfikator).Ka˙zdazmienna,którajestu˙zywanawprogramiemusizosta´c
wcze´sniejzadeklarowana,tzn.nale ˙ zyokre´sli´cjejnazw˛eitypwarto´sci.
Identyfikatorem(nazw˛a)nazywamyci˛agliter,cyfriznakówpodkre´slenia,rozpoczynaj˛acysi˛e
odliterylubznakupodkre´slenia.Nazwaminiemog˛aby´csłowakluczowe,tj.słowazastrze ˙ zone
u˙zywanewkonstrukcjachj˛ezyka,np.:for,while,itd.
Przykładydeklaracji
int i;
int a,b;
float x,y;
Zmienne2
Warto´s´czmiennejjesttym,coprzechowujemywobszarzepami˛eciokre´slanymprzeznazw˛e.W
momenciedeklaracjiwarto´s´czmiennejlokalnejjestnieokre´slona,zmienneglobalnes˛ainicjalizowane
nazero.
Typzmiennejokre´slajak˛awarto´s´cmo˙znawpisa´cdoobszaruwskazywanegoprzeznazw˛e.W
zale ˙ zno´sciodtypuzmiennej,innyjestrozmiarpami˛ecipotrzebnydojejzapami˛etania.Kompilator
J˛ezykC/C++,cMarcinSzpyrka2005/06
5
napodstawietypuokre´slajak˛ailo´s´cpami˛ecinale ˙ zyprzydzieli´czmiennejijakieoperacjes˛ananiej
dopuszczalne.
Donadawaniawarto´scizmiennejsłu ˙ zyinstrukcjaprzypisania(=).Winstrukcjiprzypisaniapo
lewejstronieznaku=znajdujesi˛eidentyfikatorzmiennej,za´spoprawejstroniewarto´s´clubwyra˙zenie
daj˛acewwynikuwarto´s´codpowiedniegotypu(zgodnegozzadeklarowanymtypemzmiennej).
Prostetypydanych
•Typlogiczny-typboolobejmujedwiewarto´scitrueifalse.
•Typyznakowe-typcharsłu˙zydoprzechowywaniaznakówwkodzieASCIIlubinnymsto-
sowanymnadanejmaszynie,jestonnaogółjednobajtowy.Doprzechowywaniaznakówz
wi˛ekszegozbioru(np.Unikod)słu˙zytypwchar_t.Jegorozmiarzale˙zyodimplementacji.
•Typycałkowite-typcałkowitywyst˛epujewtrzechpostaciachint,signedintiunsignedint
orazwtrzechrozmiarach:shortint(short),intilongint(long).
•Typyzmiennoprzecinkowe-typfloat(pojedynczaprecyzja),double(podwójnaprecyzja),
longdouble.Dokładneznaczenietychterminówzale˙zyodimplementacji.
•Typvoid-typpustyvoidoznaczabrakwarto ´ sci. ˙ Zadnazmiennaniemo ˙ zeby ´ ctypuvoid.
Je ˙ zeliwynikfunkcjijesttypuvoid,tooznaczato, ˙ zefunkcjanicniezwraca.
Stałenumerycznecałkowite
Liczbacałkowitaskładasi˛ezdowolnejliczbycyfr.Napocz˛atkumo ˙ zeznajdowa´csi˛eznak’−’
lub’+’.
Je´slistałacałkowitamie´scisi˛ewzakresieintjesttraktowanajakoint,je´sliniemie´scisi˛ewza-
kresieint(lubnako´ncuznajdujesi˛elitera’l’),amie´scisi˛ewzakresielongjesttraktowanajakolong.
Winnymprzypadkujesttraktowanajakodouble.
Stałebezznakudefiniujesi˛edopisuj˛acnako´nculiter˛e’u’: 12lu,123u .
Stałaósemkowazaczynasi˛eodznaku’0’:012,0777
Stałaszesnastkowazaczynasi˛eodznaków’0x’: 0xffff,0x12fe .Cyfry11-15s˛azast˛epo-
waneliterami’a’-’f’.
Stałenumerycznezmiennoprzecinkowe
Stałazmiennoprzecinkowaskładasi˛ezopcjonalnejcz˛e´scicałkowitej,znaku’.’,cz˛e´sciułamko-
wejorazopcjonalnejdefinicjiwykładnika.
Cz˛e´s´cułamkowajeststał˛acałkowit˛aniezawieraj˛acaznaków’+’ani’−’.
Cz˛e´s´cokre´slaj˛acawykładnikjestpoprzedzonaznakiem’e’,poktórymwyst˛epujeliczbacałko-
wita.
1.23,.23,0.23,1.,1.0,1.2e10,.23e 15
Zgłoś jeśli naruszono regulamin