P5 Flashcards
Za sta koristimo primitivne tipove
Da izgradimo kompleksnije tipove
Kojeg su tipa var cin i cout
Istream i iostream
Sta omogucava tip string
Rad sa varijabilnom duzinom teksta
Kako rjesavamo probleme pomocu objekata
Prvo potrebna klasa kako bi se mogli kreirati objekti zatim kreirani objekti kada se naprave komuniciraju i rijese probl
Analogija kompleksnih i primitivnih tipova
Klasa slicna tipu objekat slican vrijednosti
Koji je tip objekta i ko to odredjuje
Objekat je tipa klase, a klasa je korisnicki definiran tip
Za sta koristimo string
Kada nam treba komad memorije koji mizemo upisivati tekst prozivoljne duzine i da bismo taj tekst mogu procesirati i njime manipulisati
Opsti format za konstrukciju objekata tipa neke klase (ako su r value)
klasa {arg1, arg2, … , argn};
ili
klasa (arg1, arg2, … , argn);
Pri cemu r value znaci da ovaj objekt nije spremljen u memoriju i egzistira samo tokom izvrsavanja datig stejtmenta
klasa {arg1, arg2, … , argn};
Sta je klasa, arg
Ime klase od koje se pravi objekat a argumentima se inicijalizira objekat
Da li je konstrukcija objekta izraz
Jeste vraca vrijednost nekog tipa (tipa klase koja je odabrana)
Sta definira korisnik u klasi
Koji tip agrumenata se prosljedjuje i koliko argumenata se proslijedi
Kako se kreira objekat koji nije r value
Tako sto se objekat smjesti u varijablu koja se kreira pri konstrukciji objekta.
klasa ime_var{arg1, arg2, .. , arg n};
ili
klasa ime_var(arg1, arg2, .. , argn);
Sta se desava u pozadini
klasa ime_var{arg1, arg2, .. , arg n};
Dobije se komad memorije divoljan da se smjesti objekat tipa klase i inicijalizira pomocu argumenata
Sta je specificno pri konstrukciji objekta sa simbolom =?
klasa ime_var = arg1;
OGRANICEN DA PRIMA SAMO JEDAN ARGUMENT
Sintaksa default konstrukcije r value objekta tipa string
std::string{};
Sintaksa default konstrukcije objekta tipa string koji je smjesten u var
std::string s;
ne moraju zagrade ako ima var
Koji je tip var koja sluzi da se u njoj cuva tekst proizvoljne duzine i kako se importuje
String
using std::string;
U trenutni ns importuj string iz std i koristi kao da je definisan u istom ns
Default konstrukcija pravilo
Nema argumenata kojim inicijaliziramo objekat tipa string tada u tom objektu nema nikakav tekst - nije nula nije prazno vec nema teksta
Odnosno kreira se var u koju se stavlja objekat tipa string i stavi se objekat u memoriju ali se u ubjekat nista ne smjesta
Ko odredjuje ponasanje objekta nekog tipa
Programer koji definise klasu
Konstrukcija objekta tipa string kao r value i smjesten u var pomocu niza karaktera
std::string{“jshajahwj”};
Objekat koji cuva tekts i koji nestane po izvrsenju stejtmenta
std::string ime (“fnshsjsigw”);
Varijabla u kojoj je smjesten objekat tipa string inicijaliziran nizom karaktera
Zasto mozemo inicijalizirati string pomocu niza karaktera?
Zato jer je moguce implicitno konvertovati const char* u string
Sliva se uploadaju u memoriju i koriste za inicijalizaciju ibjekta tipa string te upload u var
Sintaksa kopi konstrukcije
std::string {std:: string (“hahahaj”)};
ili
std::string s(“hahhahaha”);
std string h(s);
Objasnjenje kopi konstrukcije
Pravimo jedan objekat tipa string pmocu drugog objekta tog istog tipa
Bejzikli kloniranje
Slovo se kopira jedno po jedno u drugu varijablu
Na mjestu nove varijable se pojavi ono sto je procitano iz memorije koju kotnrolise varijabla koju smo koristili za inicijalizaciju
Sta imamo u memoriji nakon kopi konstrukcije
Postoje 2 objekta tipa string u memoriji a u prvom ce biti tekst iz drugog
Konstrukcije pomocu tipa int i char
Ovaj konstruktor uzima jedan cijeli broj i jedan karakter u () ili {} i dobijemo objekat tipa string u kom se nalazi int puta karakter
Zasto se ne moze koristiti = za argumentovanje pri int char konstrukciji stringa
Jer = uzima samo jedan argument i u string bi se spremio samo broj
Sta je metod
Fja koja operira na stanju
Odnosno PONASANJE objekta
Gdje se definiraju metodi nad kolpleksnim tipovima
U klasama od kojih se prave objekti tog tipa
Lako se pozivaju i izvrsavaju metodi
Putem operatora .
Koji je binarni operator s cije lijeve strane je ibjekat nekog tipa odn klase a s desne strane ime metoda
Na cemu se pozivaju metodi i sta oni rade
Nad objektima i treba da promijene interni stanje objekta ili da na osnov stanja objekta proizvede neku vrijednost
Da li se metodi mogu pozivati iskljucivo nad objektima koji su spremlkeni u var
NE moze biti i r value
Forma poziva metida
objekat.ime_metoda(arg1, arg2,…,argn);
Sta se dobije nakon izvrsenja metoda (izraza)
Dobijemo nazad vriejdnost tipa koji je dat u definiciji metoda u klasi
Sta se sve definira kod modula u klasi
Kakvi objekti koja stanja koji modulu broj argumenata i tip arg
Koji metode imamo nad stringom
Size, operator+, at…
Metod .size()
Vraca nazad broj slova koji se nalaze u objektu tipa string
Operator+ konkatnejt
Spajanje stringiva metodama nadovezivanja
Cita sadrzaj objekta varijable i na njega nadiveze sadrzaj objekta druge var
Objasni operator + za string char
Ako su 2 stringa + je definisan
2 chara + je error
A za string i char moguce je pukom srecom ako se lijevo nalazi objekat tipa string a desno nesto sto se moze implicitno konvertovati u string kao sto je const char, da je drugi redoslijed rezultirao bi nedefinisanim ponasanjem
Kako se indeksiraju objekti klase string (kao C)
Pomcu unarnog operatora [] pri cemu indeks pocinje sa 0 i inedksi su cijeli brojevo.
Ovaj operstor ne provjerava validnost granica unutar stringa i ukoliko se indeksira van granica proizvodu nedefinirano ponasanje
Ukoliko se desi nedefinirano ponasanje sta ce bit
Svi stejtmenti nakon UB su takodje nedefinirani iako bi taj dio koda u suprotnoom imao smisla
Metod .at()
Sluzi za indeksiranje objekata tipa string ali to je sugurno indeksiranje jer Provjerava granice -> ima dodatni if check
Ako se indeksira izvan granica generisat ce se iznimka
Za sta se koristi indeksiranje putem [] i metoda .at() i koja je razlika
Razlika je u performansi -> [] je brzi ali nije sigurniji
A indeksiranje se koristi kako bi se mkdifikovalo stanje objekta tipa string -> ako je sa desne strane = tada za citanje a ako je sa lijeve tada za pisanje na poziciju indeksiranu tim cijelim brojem
Sta je kontejner u oop
Tip koji u sebi cuva proizvoljnu sekvencu elemenata bilo kojeg tipa
Kako mozemo koristiti vektor
Ukljucimo zaglavlje incc<vector></vector>
Mogu li u vektoru da budu elementi razlicitog tipa
NE, samo elementi istog tipa
Vektor je kontejner koji cuva elemente odgovarajuceg tipa
Kako definiramo vektor obzirom da je genericka klasa
vector<tip_elemenata> {};</tip_elemenata>
Mora se definirati <> ako ne definiramo to je error a u {} se prosljedjuju elementi
Koje operacije se mogu vrsitu nad vektorom / koji moduli
Indeksiranje [], .at() metod, .size() metod, .push_back(), .pop_back(), .back(), begin(), .end()
Ali operator+ NE POSTOJI, nije definisan za vektore
Sta je moguce koristenjem metoda push back
Prosirivanje vektora u bilo kom trenutku sa elementom koji se proslijedi kao qrgument metoda
Da li vektori moraju biti kontejneri primitivnih tipova
Ne, mogu biti i kontejneri objekata
Razlika stringa i vektora
String se ponasa slicno vektoru odn sluzi kao kontejner karaktera
Sta omogucaba indeksiranje kod vektora
Indeksiranjem se mogu citati elementi kao kod stringova i modificirati odredjeni elementi na pozicijama
Te isto kao kod stringa indeksiranje van granica je UB
Ako imamo vector<string>[0][0]</string>
Indeksiran je prvi string i prvi karakter prvog stringa
Ako imamo vector<double> v(8, 2.5) i vector<double> s{8, 2.5}
Razlika?</double></double>
Mala zadgrada 8 elemenata =2.5
Velika zagrada 2 elementa 8 i 2.5