11
votes

Différence entre this-> champ et classe :: champ?

Je me demande quelque chose en C ++.

admettre le code suivant: xxx

à l'intérieur de ma classe, y a-t-il une différence entre this-> bar et foo :: bar ? Y a-t-il des cas où l'on est invalide?


1 commentaires

Bien sûr, si bar est une fonction virtuelle au lieu d'un membre de données, il y a une différence entre les deux. Notez également que vous pouvez les combiner comme this-> foo :: bar .


4 Réponses :


0
votes

Pour ce que j'ai appris avec C / C ++, utiliser le -> sur quelque chose est principalement destiné à un objet de pointeur, et utilisant :: est utilisé pour les classes qui font partie d'un espace de noms ou d'une super classe qui est le général classe de tout ce que vous incluez


1 commentaires

Eh bien, pour le :: C'est comme utiliser STD :: Cout << ""; Utilisation :: signifie que vous utilisez la mise en œuvre directe de l'espace de noms STD au lieu de dire à l'aide de Namespace Std; dans votre dossier. Le -> est comme si vous êtes "pointant" un pointeur sur un autre objet. C'est comme ça que je les ai vus utilisés.



12
votes

CLASSE INTÉRIEUR FOO (SPÉCIFICIQUEMENT) Il n'y a pas de différence entre les deux étant donné que bar n'est pas statique .

FOO :: BAR est appelé le nom total qualifié de la barre , et ce formulaire est utile dans des scénarios où il peut y avoir plusieurs types dans la hiérarchie définissant un membre du même nom. Par exemple, vous auriez besoin écrire foo :: bar ici: xxx


0 commentaires

4
votes

Ils font la même chose membres.

Cependant, vous pourrez utiliser ceci -> pour distinguer les membres du même nom dans la hiérarchie de la classe. Vous devrez utiliser la version classname :: pour le faire.



0
votes

Il vous permet également de faire référence à une variable d'une autre classe (classe de base dans la plupart des cas) avec le même nom. Pour moi, il est évident de cet exemple, espérons que cela vous aidera.

struct {
    Base::bar = 1;
    Derived::bar = 2; // The same as using bar
}


0 commentaires