Juha
Satu
Taru
Kati

Perheen tarina
Lasten albumi
Sivuston historia

Etusivu

Valid HTML 4.01!
Valid CSS!

C++ ohjelmointi

Tässä oppaassa on tiivisti kerrottu C++:sta. Esimerkit on eritelty eri fontilla varsinaisesta tekstistä.

Tietojen pohjana on Borlandin C++ 5.01
  1. tietotyypit esim. int, char, const
  2. Unkarilainen notaatio
  3. näytölle tulostaminen ja näppäimistöltä lukeminen esittelee käskyt: cin, cout
  4. hyppy, toisto- ja vertailauseet
  5. aliohjelmat
  6. globaalit ja paikalliset muuttujat + lisäksi paikalliset staattiset muuttujat ja extern määrittely
  7. tyyppimuunokset aritmetiikassa kertoo kuinka kokonaisluvusta tehdään desimaaliluku
  8. arvonmuunto-operaatiot esim. a++, a+=b
  9. osoittimet ja viittaukset
  10. bittioperaatiot
  11. tiedostojen käsittely
  12. dynaaminen muistinhallinta
  13. esikääntäjän käskyt
  14. olio-ohjelmointi
    • luokan määrittely class:lla
    • muodostimet ja hajoittimet
    • periytyminen
    • ystävä-luokat
Paluu etusivulleni...




































tietotyypit

kokonaisluku
tyypin nimi lukualue bittien määrä
n short -32 768...32 767 16 bit
un unsigned short 0...65 535 16 bit
i int -2 147 483 648...2 147 483 647 32 bit
ui unsigned int 0...4 294 967 295 32 bit
l long -2 147 483 648...2 147 483 647 32 bit
ul unsigned long 0...4 294 967 295 32 bit
reaaliluku
f float 3.4*10-38...3.4*1038 32 bit
d double 1.7*10-308...1.7*10308 64 bit
ld long double 3.4*10-4932...3.4*104932 80 bit
merkki
c char -128...127 8 bit
uc unsigned char 0...255 8 bit

merkkijono

  • char [] char acMerkkijono[ 81 ];

    vakio
  • enum paiva { MA = 1, TI, KE, TO, PE, LA, SU } paiva;
  • const int a = 50
  • #define max 30

omat tietotyypit

  • struct nimi{ kenttä1; kenttä2; kenttä3; /*jne*/ }; struct PVM { int paiva; int kuuk; int vuosi; };
  • union nimi{ kenttä1; kenttä2; kenttä3; /*jne*/ };

taulukko

  • tietotyyppi nimi [ alkioiden lkm ]; tietotyyppi nimi [ alkioiden lkm ][ alkioiden lkm ]; esim. float fVektori[ 10 ]; int aiKaksi_Uloit_Taul [ 2 ][ 10 ]; PVM xPaivat [ 100 ];

näennäistyyppi void

tarkoittaa tyhjää arvojoukkoa -> ei sisällä arvoa
esim. void main ( void ){}

tilantarkistus sizeof:lla

sizeof ( tietotyyppi ) tai sizeof taulukko tai mjono

Paluu C++ ohjelmointi...

Unkarilainen notaatio

  • Unkarilaisella notaatiolla tarkoitetaan tapaa nimetä muuttujat siten, että nimestä suoraan näkee muuttujan tyypin.
    Esim. chKirjain tarkoittaa char tyyppistä muuttujaa.
    tietotyyppi etuliite
    char ch
    unsinged char uch
    char ac (tai sz)
    short n
    unsigned short un
    int i
    unsigned int ui
    long l
    unsigned long ul
    double d (tai dbl)
    float f
    BOOL b
    BYTE by
    WORD w
    DWORD dw
    pointeri p
    kahva h
    tietuemuuttuja x
    funktio f
    taulukko a
Paluu C++ ohjelmointi...

näytölle tulostaminen ja näppäimistöltä lukeminen

  • tulostaminen
  • cout << "moi"; cout << moi; vrt. ero!!!

    lukeminen
  • cin >> acMoi; HUOM! Lopettaa lukemisen 1. välilyöntiin
  • getline( acMoi, 10 ); getline( acMoi, 10, a ); getline( acMjono, maxpituus, cLop_Merk );
Paluu C++ ohjelmointi...

hyppy, toisto- ja vertailauseet

  • vertailuoperaattorit
  • == eli yhtäsuuruus HUOM! 2 =-merkkiä
  • != eli erisuuruus
  • > eli suurempi kuin
  • >= eli suurempi tai yhtäsuuri kuin
  • < eli pienempi kuin
  • <= eli pienempi tai yhtäsuuri kuin

    loogiset operaatiot
  • && eli ja
  • || eli tai
  • ! eli ei (invertteri)

    vertailulauseet
  • if ( lauseke ) lause1; else lause2;
  • switch ( lauseke ) {
    case vakio: lauseet;break;
    • vakio: lauseet; break;
    default : lauseet; break;}

    toistolauseet
  • while ( lauseke ) lause; tai while ( lauseke ) { lause1; lause2; lause3; /*jne*/ }
  • do lause while( lauseke ); tai do { lause1; lause2; lause3; /*jne*/ } while (lauseke);
  • for ( aloituslause; lauseke; lauseke tosi niin-lause ) lause;
    tai for ( aloituslause; lauseke; lauseke tosi niin-lause ) { lause1; lause2; lause3; /*jne*/ }

    hyppylauseet
  • break; keskeyttää switch tai toistolauseen
  • continue; siirtyy toistolauseessa uudelleen alkuun tutkimaan lauseketta
Paluu C++ ohjelmointi...

aliohjelmat

  • esittely eli prototyyppi
  • tietotyyppi nimi ( parametrit ); esim. int ali ( char );

    kutsu
  • nimi ( parametrit ); esim. ali ( 'a' );

    määrittely
  • tietotyyppi nimi ( parametrit ){} esim. ali ( char cMerkki ){ /*mitä aliohjelma tekee*/ return 0; }

    parametrin oletusarvot
  • esittely: void ali ( int, int = 1 ); //HUOM! Oletusarvot pitää olla viimeisenä kutsu: ali ( iLuku ); //luku määritelty aiemmin määrittely: void ali ( int iLuku1, int iLuku2 ){ /*mitä aliohjelma tekee*/ }

    parametrina osoitin
  • esittely: float ali ( char* ); kutsu: ali ( &cJokin_Merkki ); //c määritelty aiemmin määrittely: float ali ( char* pcMerkki ){/*mitä aliohjelma tekee*/return 0;}

    parametrina viittaus
  • esittely: long ali ( int& ); kutsu: ali ( iLuku ); //i määritelty aiemmin määrittely: long ali ( int& iKokonaisluku ){ /*mitä aliohjelma tekee*/ return 0; }

    parametrina taulukko (=todellisuudessa osoitin)
  • esittely: void ali ( int[ ] ); kutsu: ali ( aiTaulukko ); //taulukko määritelty aiemmin määrittely: void ali ( int aiTaul[ ] ){/*mitä aliohjelma tekee*/}

    parametrina osoitin taulukkoon
  • esittely: void ali ( int* ); kutsu: ali ( paiVektori ); //vektori määritelty ja laitettu osoittaan taulukon alkuun aiemmin määrittely: void ali ( int* paiVec ){ /*mitä aliohjelma tekee*/ }
Paluu C++ ohjelmointi...

globaalit ja paikalliset muuttujat

  • Jos muuttuja määritellään ennen pääohjelmaa ja aliohjelmien määrittelyä on muuttuja globaali eli sitä voi käyttää sekä pää- että aliohjelmat.
  • Jos muuttuja määritellään pääohjelmassa tai aliohjelmassa on muuttuja paikallinen eli sitä voi käyttää vain ko. ohjelma.
    float fGlobaali_muuttuja1;
    void ali1 ( void );
    int iAli2 ( int );
    int iGlobaali_muuttuja2 = 5;
    void main( void )
    { int iPaikallinen_muuttuja_paaohjelmassa;
    ali2 ( iPaikallinen_muuttuja_paaohjelmassa ); }
    int ali2 ( int vakio )
    { double dPaikallinen_muuttuja_ali2_ohjelmassa; }
    HUOM! Kun ei käytetä viittausta/osoitinta -> Paikallinen_muuttuja_paaohjelmassa on ali2 ohjelmassa vakio, jonka arvoa ei voi muuttaa
  • Lisäämällä aliohjelmeljassa muuttujan määrittelyn eteen sanan static saadaan muuttujan säilyttämään arvonsa seuraavaan kertaan, vaikka aliohjelman suoritus loppuisi.
  • Lisäämällä aliohjelmeljassa muuttujan määrittelyn eteen sanan extern voidaan muuttuja tallentaa eri tiedostoon. Tässä tapauksessa tarvitsee linkittää tiedostot yhteen esim. tekemällä projekti.
Paluu C++ ohjelmointi...

tyyppimuunokset aritmetiikassa

  • double dOsam = double dLuku1 = 5 / int iLuku2 = 2 dOsam = double( int dLuku1 = 5 / int iLuku2 = 2 )
  • muutoin aritmetiikassa voidaan käyttää normaaleja operaatioita +,-,* ja /
Paluu C++ ohjelmointi...

arvonmuunto-operaatiot

  • += a += b; a = a + b;
    -= a -= b; a = a - b;
    *= a *= b; a = a * b;
    /= a /= b; a = a / b;
    %= a %= b; a = a % b;
    ++ a++; a = a + 1;
    ++a; a = a + 1;
    -- a--; a = a - 1;
    --a; a = a - 1;

    HUOM!
    käsky iA:n sisältö
    int iA = 5; 5
    iA--; 5
      4
    --iA; 3
Paluu C++ ohjelmointi...

osoittimet ja viittaukset

  • osoitin
  • tyyppi *piOsoitin = NULL; tyyppi *piOsoitin = &muuttuja;
    esim. int iLuku = 5; int *piOs = &iLuku;


    osoitin omaan tietotyyppiin
  • nimi->kenttä tai (*nimi).kenttä

    osoitin taulukkoon
    esim. *pfOsoitin = afTaulukon_nimi

    viittaus
  • tyyppi &nimi = muuttuja, vakio tai oma tietotyyppi
Paluu C++ ohjelmointi...

bittioperaatiot

  • symboli merkitys
    & ja
    ^ xor
    | tai
    ~ komplementti
    << pyöritys vasemmalle
    >> pyöritys oikealle
    Symbolin perään voidaan lisätä yhtäsuuruusmerkki, joka sijoittaa tuloksen kyseiseen muuttujaan. Esim. i <<= 2;
Paluu C++ ohjelmointi...

tiedostojen käsittely

  • tekstitiedosto binääritiedosto
    avaus ofstream levy_muuttuja ( "xyz.dat", ios::ate|ios::app|ios::binary );
    ifstream levy_muuttuja ( "xyz.dat" );
    luku levy_muuttuja >> muuttuja; levy_muuttuja.read( (char *) &mihin_luetaan, merkkin lkm );
    kirjoitus levy_muuttuja << muuttuja; levy_muuttuja.write( (char *) &mihin_luetaan, merkkin lkm );
    sulkeminen levy_muuttuja.close();

    avausbitti merkitys
    ios::in tiedostosta lukeminen (oletus ifstream:lla)
    ios::out tiedostoon kirjoittaminen (oletus ofstream:lla)
    ios::ate tiedoston-osoitin tiedoston loppuun
    ios::app uudet tiedot kirjoitetaan vanhojen perään
    ios::trunc luo uuden / tyhjentää tiedoston (oletus ios::out)
    ios::nocreate ei luo uutta tiedostoa
    ios::noreplace ei korvaa vanhaa tiedostoa
    ios::binary binääritiedosto


  • avauksen testaus
    if (!levy_muuttuja)
    {
    cout << "Tiedostoavaus ei onnistu, koska tiedosto xyz.dat puutuu.\nPaina jotain nappainta ja enter... ";
    getch(); return;
    }
  • tiedoston lopun etsiminen
    while ( levy_muuttuja.peek() != EOF ) { /*mitä tehdään, kun tiedosto ei ole lopussa*/ }
  • tietojen ohittaminen
    levy_muuttuja.ignore( lkm, lopetusmerkki );
    tiedosto-osoitinta kasvatetaan lkm:n verran, paitsi jos lopetusmerkki esintyy tiedostossa - tiedosto-osoitin osoittaa levyllä lopetusmerkistä seuraavaan merkkiin
Paluu C++ ohjelmointi...

dynaaminen muistinhallinta

  • varaus: muuttuja = new tyyppi;
  • vapautus: delete muuttuja;
Paluu C++ ohjelmointi...

esikääntäjän käskyt

  • #include "oma.h" h-tiedostoa etsitään työhakemistosta
    #include <iostream.h> h-tiedostoa etsitään polun varrelta
  • #define määrittele vakio (#define NIMI) tai vakiolle arvo (#define MAX = 10)

    ehdollinen kääntäminen:
  • #ifdef VAKIO jos VAKIO on määritelty - ohjelmaan käännetään kaikki ennen käskyä #endif
  • #ifndef VAKIO57 jos VAKIO57 ei ole määritelty - ohjelmaan käännetään kaikki ennen käskyä #endif
  • #endif
Paluu C++ ohjelmointi...
Paluu etusivulleni...