Wiki Markup |
---|
h2. Muodostimet (Constructor) |
...
Aina, kun luodaan uusi olio suoritetaan automaattisesti muodostin-funktio. Lisäksi kutsutaan mahdollisen vanhemman muodostinta, sekä kaikkien olioiden muodostimia, mistä luokka koostuu. Muodostimen nimi on sama kuin luokan nimi. |
...
Esimerkki 1: Muodostin. |
...
{code} class CElain { public: CElain(); // Muodostin |
...
}; |
...
{code} Yllä olevassa esimerkissä on esitelty parametriton muodostin (ilman toteutusta). |
...
Muodostimessa voidaan antaa oliolle alkuarvoja, varata muistia jne. Jos muodostimelle halutaan antaa parametreja, laitetaan ne sulkuihin, kuten mihin tahansa funktioon. Muodostin ei palauta mitään, joten nimen eteen ei saa laittaa mitään tyyppiä, ei edes void-määrittelyä. |
...
Esimerkki 2: Luokkaan CElain on lisätty muodostin, joka antaa luokan oliolle heti nimen ja massan. |
...
class CElain { private: char m_Nimi\[100\]; float m_Massa; |
...
public: CElain(char Nimi\[\], float Massa); // Muodostin |
...
bool AsetaNimi(char Nimi\[\]); bool KysyNimi(char Nimi\[\]); |
...
bool AsetaMassa(float Massa); |
...
bool KysyMassa(); |
...
}; |
...
Muodostimelle täytyy tehdä vielä toteutus, joka voi olla esim. seuraavanlainen: |
...
CElain::CElain(char Nimi\[\], float Massa) { strcpy(m_Nimi, Nimi); m_Massa = Massa; } Luokalla on aina oletusmuodostin, esim CElain::CElain(), mutta jos ohjelmoija tekee yhdenkin oman muodostimen ei oletusmuodostinta voida enää käyttää. Yllä olevassa esimerkissä tulisi kaikki CElain-luokan oliot muodostaa antamalla niille nimi ja massa. Esimerkiksi: |
...
CElain kissa("misu", 5.2); |
...
Mutta koska oletusmuodostinta ei voida enää käyttää, seuraava ei ole validia koodia: |
...
CElain kissa; |
...
Huom\! Jos parametritonta muodostinta halutaan käyttää, tulee myös se lisätä luokkaan: |
...
class CElain { ... public: CElain(); CElain(char Nimi\[\], float Massa); ... \\ h3. |