...
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 Block |
---|
} 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 Block |
---|
} 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(); }; {code} |
Muodostimelle
...
täytyy
...
tehdä
...
vielä
...
toteutus,
...
joka
...
voi
...
olla
...
esim.
...
seuraavanlainen:
Code Block |
---|
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:
...
Wiki Markup |
---|
class CElain {
...
public:
CElain();
CElain(char Nimi\[\], float Massa);
...
\\ |
...