2010-08-17 14 views
5

Doublons possibles:
C++ weird constructor syntax
Variables After the Colon in a Constructor
What does a colon (:) following a C++ constructor name do?Que signifie le colon dans un constructeur?

Pour la fonction C++ ci-dessous:

cross(vector<int> &L_, vector<bool> &backref_, vector< vector<int> > &res_) : 

    L(L_), c(L.size(), 0), res(res_), backref(backref_) { 

    run(0); 

} 

Qu'est-ce que les deux points (":") dire la les relations soient entre sa partie gauche et la partie droite? Et éventuellement, que peut-on dire de ce morceau de code?

+0

Voter pour fermer comme un doublon mais le titre de la question initiale laisse beaucoup à désirer. Devrait-il être modifié peut-être? – Troubadour

+0

hehe, bons inspecteurs – luna

+3

Je ne vois pas de problème majeur avec le titre de la question 'syntaxe bizarre'. Le vrai problème avec les deux questions est qu'une fois que vous savez rechercher la "liste d'initialisation", votre problème a déjà été résolu. Je pense que garder 'constructeur' dans le titre est utile, cependant. Un ':' est presque inaccessible dans tous les cas; peut-être l'épeler «côlon» aiderait, je ne sais pas. –

Répondre

4

Ceci est un moyen d'initialiser les champs membres de la classe avant que le c'tor de la classe ne soit réellement appelé.

Supposons que vous ayez:

class A { 

    private: 
     B b; 
    public: 
     A() { 
      //Using b here means that B has to have default c'tor 
      //and default c'tor of B being called 
     } 
} 

Alors maintenant, en écrivant:

class A { 

    private: 
     B b; 
    public: 
     A(B _b): b(_b) { 
      // Now copy c'tor of B is called, hence you initialize you 
      // private field by copy of parameter _b 
     } 
} 
+0

merci, qu'est-ce qu'un "c'tor" s'il vous plait? – luna

+0

c'tor == constructeur – John

+0

@John: Ok, voyez, ça a fait gagner du temps – luna

4

C'est une liste d'initialisation de membre.

Vous définissez chacune des variables membres sur les valeurs entre parenthèses dans la partie après les deux-points.

+0

De rien! – John

3

Comme beaucoup de choses en C++, : est utilisé pour beaucoup de choses, mais dans votre cas, il est le début d'une liste d'initialisation.

D'autres utilisations sont par exemple après public/privé/protégé, après une étiquette de cas, dans le cadre d'un opérateur ternaire, et probablement d'autres.

+0

Note: le sujet a été modifié après ma réponse pour être plus précis. –