C++-kielen uusia ominaisuuksia Olio-ohjelmointi Syntaksikokoelma 31.10.2008 Bool-tietotyyppi: Totuusarvo true (1), jos ehto on tosi ja false (0) jos ehto epätosi. Dynaaminen muistinvaraus: Yhden muuttuja tilan varaus: tyyppi *muuttuja = new tyyppi; Taulukon tilanvaraus: tyyppi tyyppi *taulukko = NULL; taulukko = new tyyppi[lkm]; Yhden muuttujan tilanvapautus delete muuttuja; muuttuja = NULL; Taulukon tilanvapautus delete [] taulukko; taulukko=null; Muuttujaparametrillinen funktiokutsu (myös C-kielessä): Esittely: tietotyyppi nimi(tietotyyppi *muuttuja, tietotyyppi *tietue, tietotyyppi *taulukko, tietotyyppi *tietuetaulukko ); Määrittely eli runko-osa: tietotyyppi nimi(tietotyyppi *muuttuja, tietotyyppi *tietue, tietotyyppi *taulukko, tietotyyppi *tietuetaulukko ) paikallisten muuttujien määrittelyt; lauseita; return muuttuja; Kutsuminen: paluuarvo=nimi(&muuttuja, &tietue, taulukko,tietuetaulukko...); Viittausparametrillinen funktiokutsu: Esittely: tietotyyppi nimi(tietotyyppi &muuttuja) Määrittely eli runko-osa tietotyyppi nimi(tietotyyppi &muuttuja) paikallisten muuttujien määrittelyt; lauseita; return muuttuja; Kutsuminen: paluuarvo=nimi(muuttuja);
C++ standardikirjaston funktioita <iostream> cout << vakiomerkkijono << muuttuja << endl; cin >> muuttuja; cin.get(merkki); cin.getline(merkkijono,_merkkijonon_koko); <string> Muuttujan määrittely: string s1,s2; Sijoitus: s1=s2; Vertailu: if (s1 == s2) //lauseet ; Merkkijonon n:nnen alkion indeksointi: s[n]= c ; c=s[n]; Merkkijonon pituus: pituus=s.length(); Onko tyhjä (totuusarvo)? if(s.empty()) lauseet; Yhdistäminen: string s3=s1+s2; Korvaus: s.replace(4,3, x ); Korvaa merkkijonosta s 3 merkkiä lähtien indeksistä 4, arvolla x. Poisto: s.erase(4,5); Poistaa 5 merkkiä alkaen indeksistä 4. Osoitin alkuun: s.begin(); Osoitin loppuun: s.end(); <vector> ja <list> Määrittely: vector <tyyppi> muuttuja; list <tyyppi> muuttuja; Iteraattori: vector <tyyppi>::iterator pos; list <tyyppi>::iterator pos; Osoitin alkuun: muuttuja.begin(); Osoitin loppuun: muuttuja.end();
Alkioiden lukumäärä: muuttuja.size(); Lisäys loppuun (lista ja vektori): muuttuja.push_back(alkio); Poisto lopusta (lista ja vektori): muuttuja.pop_back(); Lisäys alkuun (lista): muuttuja.push_front(alkio); Poisto alusta (lista): muuttuja.pop_front(); Poisto väliltä (lista): muuttuja.erase(iterator pos); (poisto kohdasta pos listan loppuun) muuttuja.erase(iterator first, iterator last); (poisto väliltä first last) Koko listan tai vektorin tyhjennys: muuttuja.clear(); Ehdollinen poisto listalta: muuttuja.remove(arvo); muuttuja.remove_if(funktio); (funktio kirjoitettava erikseen) <algorithm> Lajittelu: void sort ( iterator first, iterator last ); Haku: iterator find(iterator first, iterator last, haettava_arvo); Find palauttaa osoittimen (iteraattorin) vektorin tai listan kohtaan, josta haettu arvo löytyi. Lukumäärän laskenta: int count (iterator first, iterator last, const T& value ); Kääntö: void reverse(iterator first,iterator last); Alkiot satunnaiseen järjestykseen: srand(unsigned(time(null))); void random_shuffle ( iterator first,iterator last ); Kahden alkion sisällön vaihto: void swap ( T& a, T& b ); Taulukon läpikäynti alkioittain: for_each(iterator first, iterator last, funktio); HUOM: Funktio on kirjoitettava erikseen. Korvaus: replace(iterator first,iterator last,vanha_arvo,uusi_arvo); Korvaa kaikki vektorin alkiot, jotka sisältävät arvon vanha_arvo arvolla uusi_arvo. <cstdlib> ja <ctime> Satunnaislukujen arpominen: srand(unsigned(time(null))); //Generaattorin alustus, tehdään kerran int arvo=rand()%10+1; Arpoo satunnaisluvun väliltä 1 10.
Luokkatyyppi (Class) Määritelmä: class luokan_nimi //yksityiset jäsenet protected: //aliluokalle periytyvät jäsenet //Muodostimet luokan_nimi(); //Parametrillinen muodostin luokan_nimi(parametrilista); //Kopiointimuodostin luokan_nimi(luokan_nimi &); //Hajotin ~luokan_nimi(); //Palvelut tietotyyppi palvelun_nimi(parametrilista); ; Metodit: tietotyyppi luokan_nimi::palvelun_nimi(parametrilista) //Tee mahdollisesti jotain, return paluuarvo; Olion luonti pääohjelmassa: luokan_nimi olion_nimi; Palvelun kutsuminen: paluuarvo = olion_nimi.palvelun_nimi(parametrilista); Mallit (Templates) Aliohjelmamalli: template <typename identifier> function_declaration; Esimerkki: template <typename T> T suurempi(t &x,t &y) return (x>y? x : y); cout << Suurempi << suurempi( a, b ); Luokkamalli: template <class identifier> function_declaration;
Esimerkki: template <class T> class pari T a,b; pari(t x,t y)a=x;b=y; ; pari <int> x(2,3); Operaattorien ylikuormaus (Operator overloading) Palvelu: tyyppi operator operaattorimerkki (parametrilista); Metodi: tyyppi tyyppi::operator operaattorimerkki(parametrilista) //Teejotain Esimerkki: bool operator ==(const suorakulmio &); bool suorakulmio::operator ==(const suorakulmio &s) return ((this -> x == s.x && this -> y == s.y)? true : false); Public-periytyminen class yliluokka //Kantaluokan yksityiset tietojäsenet protected: //Johdetulle luokalle periytyvät tietojäsenet //Julkiset aliohjelmajäsenet ; class aliluokka : public yliluokka //Johdetun luokan yksityiset tietojäsenet protected: //Aliluokalle periytyvät tietojäsenet //Julkiset aliohjelmajäsenet ;