Professional Documents
Culture Documents
UvoduC++
http://www.riteh.hr/zav_katd_sluz/zr/nastava/asp
Prolapredavanja
ADT:lista,stog,red
Sadrajpredavanja
UvoduC++
NekepromjeneuodnosunaC
C++standardinputandoutputprimjeri
Objektnoorijentiranoprogramiranje(OOP)
UvoduC++
C++
UvoduC++
Preporuenaliteratura:
1)BjarneStroustrup:TheC++ProgrammingLanguage (ThirdEditionandSpecialEdition) TojereferentnaknjigaodautoraC++.
2)BruceEckel:ThinkinginC++ (knjigajedostupnabesplatnonawebu,googlearound...)
NekepromjeneuodnosunaC
KomentariuC++
Moesekoristitidosadanjioblikkomentara
Poredtogamoesekoristiti//oblik
Deklariranjevarijabli
UC++varijablenemorajubitideklariranenapoetku bloka,prijekoda
moemomijeatideklaracijeikod
primjeri... Varijablebrojaiunutarpetlji
varijablanepostojiizvanpetlje!
Inicijalizacijaelemenatapolja
Promjenesapokazivaima
void*
primjeri:
int N; int *P = &N; void *Q = P; // nije dozvoljeno u C++ void *R = (void *) P; // ok
Promjenesapokazivaima
NULL
int *P = 0; // isto kao *P=NULL; if (!P) ... else ... // P je 0 (NULL) // P nije 0 (nije NULL)
bool
dodajusekonstantetrue(1)ifalse(0).
Realizirajuseimplicitnekonverzijeizostalihtipova podataka(int,char,...)usituacijamakadajetomogue:
vrijednostirazliiteod0sekonvertirajuutrue 0sekonvertirajuufalse
Referencakaoparametarfunkcije
C++uvodimogunostslanjaparametarafunkcijisa referencom
Parametarpostajedrugoimeistevarijable
void utrostruci(int& num) { // num postaje sinonim num = 3*num; // za varijablu u pozivu } int x = 5; utrostruci(x); // num postaje drugo ime za x
Referencanapokaziva
Referencanastrukturu
Mozemoistotakoimatireferencenastrukture Primjer:
struct TIME { int hours, minutes, seconds; }; void springForward(TIME& thetime) { thetime.hours += 1; } TIME currtime = {0, 0, 0}; springForward(currtime);
Predodreene(default)vrijednostiparametara
UC++semogudefiniratipredodreenevrijednosti parametrimafunkcija
pripozivufunkcijemoguseizostavitivrijednostizaneke parametrezakojesudefiniranedefaultvrijednosti namjestotihvrijednostikoristitieseonepredodreeneiz definicije moguejedaklepozvatifunkcijusapromjenjljivimbrojem argumenata PredodreenaVrijednostmoebitiiizraz(nesamokonstanta) moguimativieparametarasapredodreenomvrijednosti,ali morajubitizadnjiparametriufunkciji bitanjeredoslijed(moguizostavitiodnekogparametrado kraja,neusredini)
Format:TypeImeParametra=PredodreenaVrijednost
Pravila:
Predodreene(default)vrijednostiparametara
primjer
void fun(int a, float b = 2.0, int c = 3) { cout << a << << b << << c << endl; }
"Helloworld"uC
"Helloworld"uC++
#include <iostream> using namespace std; int main() { cout << "Hello, world!" << endl; return 0; }
C++standardinputandoutputprimjeri
#include<iostream> using namespace std; int main() { char Yes = y'; cout << Yes; return 0; }
C++standardinputandoutputprimjeri
#include<iostream> using namespace std; int main() { cout <<"Ovaj "<<"ispis "<<"je samo<< proba; return 0; }
C++standardinputandoutputprimjeri
#include<iostream> using namespace std; int main() { cout <<"Ovaj "<<"ispis "<<"je samo<< proba.; cout <<"Idemo u novi red.\n"; cout <<"Idemo u novi red." << endl; return 0; }
C++standardinputandoutputprimjeri
#include<iostream> using namespace std; int main() { int moj_int; cout << "Ubaci cijeli broj: "; cin >> moj_int; cout << "Ubacio si broj: " << moj_int << "\n"; }
C++standardinputandoutputprimjeri
#include<iostream> #include<string> using namespace std; int main() { string ime; cout << "Kako se zoves? "; cin >> ime; cout << "Bok " << ime << "\n"; return 0; }
Objektnoorijentiranoprogramiranje(OOP)
Uvodnenapomene
Razvojsoftvera
Kakostrukturiratisoftver?
ZatoOOP?
Razvojsoftvera
Uvodnenapomene
Razvojsoftvera a
source:FrancoGasperoni,http://www.adacore.com/http://libre.adacore.com/
Primjer
Razvojsoftvera a
source:FrancoGasperoni,http://www.adacore.com/http://libre.adacore.com/
Strukturasoftvera
Zatostrukturiratisoftver
Softversestrukturiraiorganiziradabi:
Karakteristikeidealnesoftverskearhitekture
omoguavadijeljenjezadaa recikliranjekomponenti
Zatostrukturiratisoftver
Zastvaranjenovogsoftveraidentificirajuse:
Strukturepodataka Operacije okooperacija>strukturiranoprogramiranje(SP) okostrukturapodataka>objektnoorijentiranoprogramiranje (OOP) razlikapostajevanaprilikomizmjeneinadogradnjesoftvera tosedogadakadatrebadodatinoveoperacijei/ilistrukture podatakauSPiliOOPprogram? zapromjeneuoperacijamaboljiizborjeSP zapromjeneustrukturamapodatakaboljiizborjeOOP
Softversemoestrukturirati:
SPvsOOP
Primjernaploi
SPvsOOP
Strukturiranoprogramiranje
Objektnoorijentiranoprogramiranje
Razlikeukodu
slijed'procedura'
intmain() { intx,y,z; inta,b,c; a=f1(x); b=f2(y); c=f3(z); } intf1() { } intf2() { }
slijed'objekata'
intmain() { Aa; Bb; Cc; a.f1(); b.f2(); c.f3(); } ClassA { Intx; Intf1(); } ClassB { Inty; Intf2() } ClassC { Intz; Intf3(); }
intf3() { }
Proceduralprogramming
while(programming==art){ incr(pleasure); decr(bugs); incr(portability); incr(maintainability); incr(quality); incr(salary); }//livehappilyeverafter
source:http://www.compapp.dcu.ie/~renaat/
OOP
Osnovnipojmovi
Terminologija
objekt
metode
poruke(messages)
klasa
instanca
uahurivanje(encapsulation)
Primjer
Pozivfunkcije:
f(stupnjeva, skala);
Ispis:
Objektnoorijentiranorjeenje
Jednostavna'klasa':
classTemperatura{ public: doublestupnjeva; charskala; };
Koritenjenoveklase
KlasaTemperaturasemoekoristitiistokaoistructuCu:
doublecelsius(Temperaturatemp){ doublecel; if(temp.skala==F)cel=(temp.stupnjeva32.0)/1.8; elsecel=temp.stupnjeva; returncel; } doublefahrenheit(Temperaturatemp){ doublefa; if(temp.skala==C)fa=temp.stupnjeva*1.8+32.0; elsefa=temp.stupnjeva; returnfa; }
Boljerjeenje
Problem:
Rjeenjejespojitilanskevarijableifunkcijezajedno:
class Temperatura { public: void ispisi(); // member functions double celsius(); double fahrenheit(); double stupnjeva; char skala; // member variables
};
Pristuplanovimaklase
Definicijalanskihfunkcija
Zadefiniranjelanskefunkcijeklase(classmemberfunction) koristiseoperator'::'
double Temperatura::celsius() { double cel; If (skala==F) cel= (skala-32.0)/1.8; else cel=stupnjeva; return cel; }
Temperatura::celsiusjepunoimefunkcije
Modifikatorividljivosti
onjemunekidrugiput
'privatne'lanoveklasemogukoristitisamofunkcijekojesu lanoviklase.Drugdjenisuvidljive!
Novorjeenje
class Temperatura { public: void ispisi(); // member functions double celsius(); double fahrenheit(); private: double stupnjeva; char skala; };
// member variables
Modifikatorividljivosti
varijablastupnjevajeprivatnajersenalaziu'private'sekciji moejojsepristupatisamoulanskimfunkcijama:
doubleTemperatura::celsius(){ doublecel; if(skala==F)cel=(stupnjeva32.0)/1.8;//ok elsecel=stupnjeva; //ok returncel; }
nijemogue:
Temperatura t1; double a; a=t1.stupnjeva; // nije dozvoljeno
Indirektanpristupprivatnimpodacima
Mogusedefiniratijavnelanskefuncijezapristupprivatnim podacima:
class Temperatura { public: char getSkala(); void set(double noviStupnjeva, char noviSkala); void print(); double celsius(); double fahrenheit(); private: double stupnjeva;
// member functions
double getStupnjeva();
// member variables
char skala; };
lanskefunkcije
double Temperatura::getStupnjeva() { return stupnjeva; }
Vidjelismodosada
klasajeskuplanskihfunkcijailanskihvarijabla objektjeinstancaklase nastructsemoegledatikaonaklasukojasadrisamo varijableitojavne javnimlanovimasemoepristupatiizvanasoperatorom'.' privatnilanovisevidesamoulanskimfunkcijama operator'::'sezoveScoperesolutionoperator