Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Autor: pekfos
Programowanie obiektowe, C++

Metody stałe

[lekcja] 6. Metody stałe.

Metody stałe

Zwykłe niestatyczne metody, jako potencjalnie modyfikujące zmienne składowe, nie mogą być wywoływane dla obiektów stałych:
C/C++
class Klasa
{
    int x;
   
public:
    Klasa( int y )
        : x( y )
    { }
   
    int m()
    {
        return x;
    }
};

int main()
{
    const Klasa k( 64 );
    k.m();
}
In function ‘int main()’:
error: passing ‘const Klasa’ as ‘this’ argument of ‘int Klasa::m()’ discards qualifiers [-fpermissive]
Metoda m() nie modyfikuje składowej x, ale i tak kompilator nie pozwala jej wywołać. Trzeba jawnie poinformować kompilator o tym, że ta metoda nie modyfikuje składowych. Służy do tego słowo kluczowe const umieszczone po liście argumentów:
C/C++
class Klasa
{
    int x;
   
public:
    Klasa( int y )
        : x( y )
    { }
   
    int m1() const
    {
        //++x; // Błąd: próba modyfikacji składowej w stałej metodzie
        return x;
    }
   
    int m2() const; // jeśli tu jest const..
};

int Klasa::m2() const // ..to tu też musi być const
{
    return x + 1;
}

int main()
{
    const Klasa k( 64 );
    k.m1();
}
Poprzedni dokument Następny dokument
Wskaźnik this Przyjaźń