Kuka voi käyttää metodia/attribuuttia
|
Oletuksena
|
|||||
| Suojaus
|
kaikki
|
aliluokat
|
friend-
funktiot
|
luokan
metodit
|
struct union |
class
|
| private
|
x
|
x
|
x
| |||
| protected
|
x
|
x
|
x
|
|||
| public
|
x
|
x
|
x
|
x
|
x
|
class cAika {
int h,m;
void lisaa(int lisa_min) {...}
void tulosta() const {...}
};
lakkaisi ohjelmamme toimimasta, koska esimerkiksi pääohjelman kutsu
a1.lisaa(55)tulisi laittomaksi kaikkien luokan jäsenten ollessa yksityisiä (private). Ongelmaa voisi yrittää korjata esittelemällä metodit julkisiksi:
class cAika {
int h,m;
public:
void lisaa(int lisa_min) {...}
void tulosta() const {...}
};
Nyt kääntäjä valittaisi esimerkiksi:
Error: aikacla.cpp(21,13):Objects of type 'cAika' cannot be initialized with { }
rivistä
cAika a1={12,15},...
Nyt vasta alkaakin olio- ohjelmoinnin hienoudet! Aloittelijasta saattaa tuntua
että mitä turhaa tehdään asioista monimutkaisempaa kun se
onkaan! Nimittäin aikaolio.cpp saattoi tuntua kohtuullisen
ymmärrettävältä. Mutta todellakin jos olisi ilman muuta
sallittua sijoittaa oliolle mitä tahansa arvoja, niin mitä
mieltä oltaisiin seuraavasta:
cAika a1={42,175};
Väärinkäytetyt ja virheelliset arvot muuttujilla on ollut
ohjelmoinnin kiusa alusta alkaen. Nyt meillä on mahdollisuus
päästä niistä eroon kapseloinnin
(jotkut sanovat kotelointi,
encapsulation)
ansiosta. Eli kaikki arvojen muutokset (eli olio tapauksessa olion tilojen
muutokset) voidaan suorittaa kontrolloidusta, vain olion itse siihen
suostuessa. Mutta miten sitten alustuksen tapauksessa?