Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
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.

{code}
class CElain
{
private:
    char    char m_Nimi\[100\];
    float    float m_Massa;

public:
        CElain(char Nimi\[\], float float Massa);   // Muodostin

    bool    bool AsetaNimi(char Nimi\[\]);
    bool    bool KysyNimi(char Nimi\[\]);

       bool AsetaMassa(float Massa);
    bool KysyMassa    bool KysyMassa();
};
{code}
Muodostimelle täytyy tehdä vielä toteutus, joka voi olla esim.  seuraavanlainen:

CElain::CElain(char Nimi\[\], float Massa)
{
    strcpy     strcpy(m_Nimi, Nimi);
    m     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.