2013-08-08 2 views
0

J'apprends le C++ dans l'environnement Qt et je passais en revue l'un des exemples de code en ligne. Quelqu'un peut-il m'expliquer cette syntaxe?Explication de syntaxe de classe requise

const TicTacToe * GetTicTacToe() const { return m_tictactoe.get(); } 

Pourquoi est-il un const avant le support d'ouverture d'une fonction? Est-ce un pointeur ou une multiplication?

la classe complète est la suivante, mais la syntaxe des instructions mentionnées ci-dessus n'est pas clair pour moi

class QtTicTacToeWidget : public QWidget 
{ 
    Q_OBJECT 
    public: 
     explicit QtTicTacToeWidget(QWidget *parent = 0); 
     const TicTacToe * GetTicTacToe() const { return m_tictactoe.get(); } 
     void Restart(); 
+0

De quoi vous posez-vous des questions? –

Répondre

0

Le const entre avant le support d'ouverture signifie que la fonction est une fonction membre const. Il dit essentiellement qu'il garantit de ne pas modifier la classe et peut donc être appelé sur un objet déclaré comme const. Eh bien cela, et il permet également à la fonction de modifier les variables mutables dans une classe const.

+0

Merci beaucoup pour votre réponse .... Je n'étais pas sûr de variables mutables, mais alors je l'ai googlé et appris quelque chose de nouveau ... donc, autant que je comprends, dans une fonction constante, nous pouvons modifier les variables sélectionnées si nous les avait déclaré mutables – Inquisitive

+0

Oui, mais ne l'utilisez pas comme une excuse pour tout marquer soudainement comme mutable. C'est utile pour quand une classe est logiquement const, mais doit encore modifier certaines données pour la fonctionnalité, telle que le comptage de référence. –

1

La première constante indique que le pointeur de variable TicTacToe ne peut pas être modifié. La deuxième constante après la déclaration de la fonction indique que tout ce qui se passe à l'intérieur de cette fonction ne changera aucune variable membre à l'intérieur de la classe. Comme il ne modifie pas les données de la mémoire sur la classe, il peut être utilisé lorsque vous utilisez un objet constant de cette classe. Par exemple:

const QtTicTacToeWidget myConstObject; 
// Since myConstObject is a constant, I am not allowed to change anything inside 
// the class or call any functions that may change its data. A constant function 
// is a function that does not change its own data which means I can do this: 
myConstObject.GetTicTacToe(); 

// But I can not do the next statement because the function is not constant 
// and therefore may potentially change its own data: 
myConstObject.Restart(); 
+0

Merci beaucoup pour votre réponse détaillée ... Il a certainement tout éclairci concernant le 'const' utilisé là ... Pouvez-vous également expliquer l'utilisation de '*' asteric dans la même ligne en gras? Voici comment faire de la fonction complète un pointeur de type TicTacToe? – Inquisitive

+0

qui est juste la valeur de retour de la fonction, il vous renvoie un pointeur vers un objet TicTacToe. – Lochemage

Questions connexes