2011-03-18 12 views

Odpowiedz

6

Słowo kluczowe const oznacza, że ​​metoda nie zmieni obiektu. Od operator== jest dla porównania, nic nie musi być zmienione. Dlatego jest to const. Należy go pominąć w przypadku metod takich jak operator=, które zmieniają obiekt.

Umożliwia kompilatorowi dwukrotne sprawdzenie pracy, aby upewnić się, że nie robisz nic, czego nie powinieneś robić. Aby uzyskać więcej informacji, sprawdź numer http://www.parashift.com/c++-faq-lite/const-correctness.html.

+0

jeszcze jedno głupie pytanie, "const" w "()" jest już gwarancją, że obiekt nie zostanie zmieniony. Czy ostatni "const" jest duplikowany? – user658266

+2

@ user658266 - 'const' na końcu ma inne znaczenie niż' const' w '()'. "const" na końcu oznacza, że ​​obiekt, na który wywoływana jest metoda, nie jest modyfikowany. Natomiast 'const' w'() 'oznacza, że ​​odebrany argument nie jest modyfikowany. – Mahesh

+1

@ user658266: "const" w "()" gwarantuje, że argument przekazany jako parametr (w tym przypadku rhs) do przeciążonego operatora "=" nie zostanie zmodyfikowany."Const" na końcu funkcji wskazuje, że funkcja nie zmienia żadnych elementów obiektu, na którym jest wywoływana. –

0

"const" na końcu każdej deklaracji C++ mówi kompilatorowi, że nie zmieni rzeczy, do której należy.

+0

specyfikator w tym przypadku? – user658266

0

Oznacza to, że sama metoda jest stała, co oznacza, że ​​kompilator pozwoli ci na użycie metody, gdy będziesz mieć odniesienie const do odpowiedniego obiektu. Jeśli masz odniesienie do const, możesz w inny sposób wywoływać tylko metody, które również są zadeklarowane jako const.

0

"const" na końcu deklaracji metody oznacza, że ​​metoda jest bezpieczna do wywoływania stałego obiektu.

2

Wykonywanie metody const pozwoli, aby obiekt klasy Contant zadzwonił do tej klasy. ponieważ ta metoda nie może zmienić żadnego z elementów obiektu (błąd kompilatora).

Warto wspomnieć, że const jest częścią sygnatury metody, więc w tej samej klasie możesz mieć dwie metody tego samego prototypu, ale jedna jest const, a druga nie. W takim przypadku, jeśli wywołasz metodę przeciążoną z obiektu zmiennego, wywoływana jest metoda inna niż const, a jeśli wywołasz ją z obiektu stałego, wywoływana jest metoda const.

Jednakże, jeśli masz tylko metodę const (nie ma ona stałego przeciążenia), to wywoływana jest zarówno z obiektu zmiennego, jak i stałego.

np

#include <iostream> 

using std::cout; 

class Foo 
{ 
public: 
    bool Happy; 
    Foo(): Happy(false) 
    { 
     // nothing 
    } 
    void Method() const 
    { 
     // nothing 
    } 
    void Method() 
    { 
     Happy = true; 
    } 
}; 

int main() 
{ 
    Foo A; 
    const Foo B; 
    A.Method(); 
    cout << A.Happy << '\n'; 
    B.Method(); 
    cout << B.Happy << '\n'; 
    return 0; 
} 

wyświetli:

1 
0 
Press any key to continue . . . 
Powiązane problemy