C++ leidžia sukurti objektą, kurio reikšmė yra pastovi, konstanta, t.y. kuri nustatoma objekto inicializacijos metu ir negali būti keičiama programos vykdymo metu. Pvz.,
class Pvz { public: int x; void Funkcija(); Pvz(); } const Pvz obj; // Dabar negali pakeisti objekto 'obj' reikšmės, pvz., obj.x = 37; // Neleistina // Negalima net kviesti šio objekto funkcijos, pvz., obj.Funkcija(); // NeleistinaDraudimas kviesti pastovaus objekto funkcijas susijęs su atskiro kompiliavimo galimybe. Jei "Pvz::Funkcija" yra kitame atskirai kompiliuojamame modulyje, nėra būdų sužinoti, ar ji keičia objekto, su kuriuo dirba, reikšmes. Tačiau leidžiama aprašyti ir "pastovias" funkcijas, pvz.,
void Funkcija () const;Tokia funkcija nekeičia objekto, kurį naudoja, reikšmių. Ir jei "this" nuododos klasei T tipas yra
T *const this;tai funkcijai, aprašytai su "const", jau
const T *const this;t.y neleidžiama keisti nei pačios nuorodos, nei objekto, į kurį ji rodo. O visai neseniai buvo įtraukta nauja galimybė, leidžianti nurodyti, kad kai kuriuos klasės elementus galima modifikuoti net tada, kai visas objektas yra pastovus, "konstanta". Pvz.,
class Kinta { public: mutable int x; Kinta(); } const Kinta obj2; // Ir tada galima obj2.x = 37; // Leistina!Panaudojimo pavyzdys:
class rectangle { int xvk, yvk; // (X,Y) viršutinis kairysis kampas int xad, yad; // (X,Y) apatinis dešinysis kampas mutable int P; // Plotas public: int Plotas() const { P = abs( (xad-xvk) * (yad-yvk) ); return P; } class Rectangle (int xv, int yv, int xa, int ya): xvk(xv), yvk(yv), xad(xa), yad(ya) { } }; // end class Rectangle const Rectangle Stat(20, 10, 180, 120); void Spausdink () { printf ("Plotas=%d\n", Stat.Plotas()); }
Skaitykite:
Programavimo kalbų istorija