(K) Staattinen tyypitys

Tavoite: Tutkin staattisen tyypityksen toimintaa suorittamalla C++-ohjelmakoodia.

Ohjeita: Tee tätä tehtävää varten uusi projekti Qt Creatorissa.

Pythonilla ohjelmoidessa pääohjelma on tapana nimetä mainiksi, mutta aivan yhtä hyvin sen voi nimetä millä tahansa muulla nimellä. C++:ssa taas pääohjelman nimen on oltava main, koska kääntäjä aloittaa ohjelman suorittamisen aina main-nimisestä funktiosta.

Tämän vuoksi PyCharmissa on helppoa toteuttaa useita tehtäviä samaan projektiin omiin tiedostoihinsa. Qt Creatorissa puolestaan projekti tarkoittaa aina yhtä kokonaisuutta, jossa kaikki kooditiedostot projektin alla liittyvät samaan ohjelmointiprojektiin.

Löydät vastaukset seuraaviin kysymyksiin muokkaamalla ohjelmaa ja kokeilemalla, mitä vaikutuksia muutoksilla on.

* Aktiivisen projektin vaihtaminen:

Nyt, kun sinulla on Qt Creatorissa avoinna kaksi projektia yhtä aikaa, on toinen projekteista aktiivisena (projektin nimi on lihavoitu Projects-ikkunassa). Kun klikkaat käännös- tai suorituspainikkeita, toimenpide kohdistuu aktiiviseen projektiin. Miten saat aktiivisena olevan projektin vaihdettua?

* Tyyppimuunnos 1:

Kirjoita ohjelmaan rivit:

bool b = 1 + 2;
cout << b << endl;

joista jälkimmäinen on vain avuksi asian tarkemmassa tutkimisessa. Mitä tapahtuu, kun yrität kääntää ja suorittaa ohjelman?

* Tyyppimuunnos 2:

Kirjoita ohjelmaan rivit:

if ( 1 + 2 ) {
    cout << "Hip" << endl;
}

Mitä tapahtuu, kun yrität kääntää ja suorittaa ohjelman?

* Tyyppimuunnos 3:

Kirjoita ohjelmaan rivi:

string s = 3;

Mitä tapahtuu, kun yrität kääntää ja suorittaa ohjelman?

* Tyyppimuunnos 4:

Kirjoita ohjelmaan rivit:

int i = -1;
unsigned int ui = 1;
cout << ui << endl;

if ( ui == i ) {
    cout << "Hei" << endl;
}

Mitä tapahtuu, kun yrität kääntää ja suorittaa ohjelman?

* Tyyppimuunnos 5:

Kirjoita ohjelmaan rivit:

int i;

if ( i = 0 ) {
    cout << "Hurraa" << endl;
}

Huomaa, että if-rakenteen ehdossa ei ole vertailuoperaattoria == vaan sijoitusoperaattori =. Ollaan siis tekemässä tyhmyyksiä.

Lisäksi pitää tietää, että C++:n sijoitus todellakin on operaattori, kuten edellisessä lauseessa sanottiin. Tämä tarkoittaa, että sijoituksia on mahdollista ketjuttaa esim. seuraavasti:

i = j = k = 0;

Edellisellä rivillä suoritetaan ensin sijoitus k = 0, jonka tuloksena on 0. Seuraavaksi sijoituksen k = 0 lopputulos sijoitetaan muuttujaan j, ja niin edelleen. Mitä tapahtuu, kun yrität kääntää ja suorittaa ohjelman?

* Staattinen tyypitys:

Mitä staattinen tyypitys siis käytännössä tarkoittaa?