2013-05-07 7 views
-4

J'ai trouvé la classe Kwadrat. L'auteur a utilisé trois types d'opérateurs ::,. et ->. La flèche est celle qui ne fonctionne que Quelle est la différence entre ces trois?Différence entre "::" "." Et "->" en C++

#include <iostream> 

using namespace std; 

class Kwadrat{ 
public: 
int val1, val2, val3; 
    Kwadrat(int val1, int val2, int val3) 
    { 
     this->val1 = val1; 
     //this.val2 = val2; 
     //this::val3 = val3; 
    } 
}; 

int main() 
{ 
    Kwadrat* kwadrat = new Kwadrat(1,2,3); 
    cout<<kwadrat->val1<<endl; 
    cout<<kwadrat->val2<<endl; 
    cout<<kwadrat->val3<<endl; 
    return 0; 
} 
+4

Tout livre ou didacticiel C++ peut répondre à cette question. –

+1

L'OP doit essayer d'apprendre le C++ à la dure. Ne pas. –

+0

'::' est l'opérateur de résolution d'étendue. Si je dis 'a :: b' cela veut dire que je parle du' b' dedans de 'a' que' a' soit un espace de noms ou une classe, et que 'b' soit une fonction, une variable, une classe, un espace de noms , peu importe. –

Répondre

0

-> travaux sur les pointeurs, . sur les objets et :: sur namespaces. Plus précisément:

  1. Utilisation -> ou . lors de l'accès d'un membre de la classe/struct/union, dans le premier cas par l'intermédiaire d'un pointeur, dans ce dernier par l'intermédiaire d'une référence.
  2. Utilisez :: pour référencer la fonction dans un namespace ou un class (espaces de noms), par exemple, lors de la définition de méthodes déclarées avec la classe.
+0

:: fonctionne bien sur les objets aussi; par exemple. 'std :: vector :: iterator' ... –

+0

Une classe est aussi un espace de noms. Je n'ai pas écrit 'namespace' intentionnellement. –

0

x->y est équivalent à (*x).y. Autrement dit, -> déréférence la variable avant d'obtenir le champ alors que l'opérateur de point obtient juste le champ.

x::y recherche y dans l'espace de noms x.

+0

Votre réponse est incomplète puisque '::' (l'opérateur 'scope') accède également aux membres statiques d'une classe. –

6
  • :: nomme un de type dans un espace de noms, une variable dans un espace de noms, une variable statique dans une classe ou un type dans une classe.
  • . noms d'une instance de fonction variable ou membre
  • a->b est le sucre syntaxique pour (*a).b.
+0

D'une manière générale, 'a-> b' peut aussi * être * du sucre syntaxique pour un' operator-> 'surchargé de la classe dont' a' est une instance. –

+2

@Nik: Bien sûr; mais si l'OP est aux prises avec ça, je ne voulais pas lancer à quel point 'operator->' fonctionne :) –

+0

C'est un bon point ... –

0

Les cas d'utilisation sont:

  1. -> est utilisé lorsque vous avez un pointeur
  2. . est utilisé lorsque vous avez une instance d'objet
  3. :: est utilisé lorsque vous avez un membre statique ou un espace de nom
+0

Il n'y a pas de classe statique. –

+0

Je veux dire un membre statique désolé –

0

Le signe -> est l'équivalent de dire (* Kwadrat_pointer) .value. Vous l'utilisez lorsque vous avez un pointeur d'objet appelant des méthodes d'objet ou récupérant des membres d'objet.

Le. L'opérateur est utilisé pour accéder aux méthodes et aux membres de l'objet qui l'appelle (c'est-à-dire, l'objet sur le côté gauche du ".").

L'opérateur :: est appelé opérateur de portée. Il indique à votre programme où chercher, par exemple lors de la définition d'une méthode de classe en dehors de la déclaration de classe.