Funkcja stała w klasie, jakie płyną korzyści z jej użycia?

0

Witam :)
Jakie płyną korzysci z użycia funkcji stałej , const , przy funkcji stałej (bez możliwości modyfikacji pola).
Dajmy na to taki kawałek kodu.

class X
{
       private:
             int i;
       public:
         int GetI() {return i}
};

W tym przypadku GetI zwraca zmienną i , oczywiście nie ma możliwości aby ją zmodyfikował , bo i przez co przekażemy dane.
Ale , jaki jest sens wpisywania za taką funkcją modyfikatora const uniemożliwiającego zmiane pola w klasie skoro klasa sama w sobie nie może tego zrobić.
Pytanie jest oczywiście stricte z ciekawości , bo gdzieś widziałem kawałek kodu właśnie z funkcja const , ale zastanawia mnie to PO CO :D
Moje domysły to: Optymalizacja kodu , ew. bezpieczeństwo i większa czytelność kodu , no wiecej pomysłów nie mam :D
Pozdrawiam.
KotPata :D

0

Stały obiekt (const) danej klasy może wywoływać jedynie metody (i tylko takie metody), których sygnatura zawiera const.
Warto dodać, że samo const przed niczym nie chroni, bo bardzo łatwo się takiego specyfikatora pozbyć, np. przez const_cast.

0
    #include <iostream>
    using namespace std;
     
    class Foo
    {
    private:
    int i;
    public:
    Foo(int i):i(i) {}
    int A() { return i; }
    int B()const { return i; }
    };
     
    int main()
    {
    Foo x(1);
    const Foo y(2);
     
    cout<<x.B()<<' '<<y.B()<<endl;
    cout<<x.A()<<endl;
    //cout<<y.A()<<endl; // UPS nie możesz !!
    cout<<const_cast<Foo&>(y).A()<<endl; // tylko w taki brzydki sposób możesz (dodano wg komentarzu od Satirev)
    return 0;
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1