2010-02-16 4 views

Répondre

10

Une méthode const recevra simplement un pointeur constthis.

Dans ce cas, le pointeur this sera du type const ThisClass* const au lieu du type habituel ThisClass* const.

Cela signifie que les variables membres ne peuvent pas être modifiées à partir d'une méthode const. Même des méthodes non-const peuvent être appelées à partir d'un tel procédé. Cependant, une variable membre peut être déclarée mutable, auquel cas cette restriction ne s'appliquera pas.

Par conséquent, lorsque vous avez un objet const, les seules méthodes que le compilateur vous permettra d'appeler sont celles marquées en sécurité par le mot-clé const.

+4

+1 pour indiquer que 'this' est' const'. – Blindy

+1

sauf si les membres sont marqués mutables – pm100

+0

@ pm100: Merci. Ajout d'une note sur les membres mutables. –

4

La terminaison const signifie que la fonction print ne devrait pas être en mesure de changer l'état d'un des membres de la classe elle est déclarée (et ne peut donc pas appeler toutes les fonctions membres de cette catégorie qui ne sont pas également déclaré const).

Dans l'exemple ci-dessous, la fonction print dans la classe Foo ne peut pas modifier les variables membres de Foo (à moins qu'ils soient déclarés mutable), et ne peut pas appeler toutes les fonctions non-const dans Foo.

class Foo { 
public: 
    Foo(string value) { m_value = value; } 
protected: 
    ostream & print(ostream & os) const { 
     m_value = string("foobar"); // won't compile 
     os << m_value; 
     return os; 
    } 
private: 
    string m_value; 
}; 
3

Le const sur la déclaration de méthode indique au compilateur que la fonction est sûr de faire appel à un objet const du type la fonction est membre. Il signale également au compilateur que la fonction n'est pas censée modifier l'état de l'objet et qu'il ne pourra pas modifier les variables membres qui ne sont pas marquées mutable.

Si vous omettez le const, ce code ne fonctionnera pas:

const Foo bar; 
bar.print(std::cout); // Will fail to compile unless 'print' is marked const 
1

Vous déclarez une méthode virtuelle protégée nommée print qui prend comme paramètre une référence à un ostream et renvoie une référence à un ostream. Le mot clé const signifie que la méthode ne pourra pas modifier l'état de l'objet, le pointeur this sera const.

Une méthode virtuelle est une méthode dont le comportement peut être outrepassé dans une classe héritière, fondamentalement le mot-clé virtuel donne à C++ sa capacité à supporter le polymorphisme.

Et enfin, si vous ne savez pas ce qui est une référence go there

de C# Comming Je suppose que vous savez ce que signifie protégé :)

Questions connexes