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(); // Neleistina
Draudimas 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());
}