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?