You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 6 Next »

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. Parametriton muodostin.

class CElain
{
public:
    CElain();   // Parametriton muodostin
};

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); // Parametrillinen 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) // Parametrillinen muodostin
{
     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;

Jos parametritonta muodostinta halutaan käyttää, tulee myös se lisätä luokkaan:

class CElain {
...
public:
    CElain();                         // Parametriton muodostin
    CElain(char Nimi[], float Massa); // Parametrillinen muodostin
...
  • No labels
You must log in to comment.