2016-12-29 2 views
-1

J'ai suivi le tutoriel youtube et je peux créer une classe de base mais le tutoriel n'explique pas comment fonctionne le Class :: Class, je recherche google mais je sais seulement qu'il est appelé opérateur unaire et ce qu'il fait mais je ne sais pas ce qu'il fait avec classe, s'il vous plaît aidez-moi à expliquer à ce sujet et merci beaucoup.C++ que signifie l'opérateur unaire utilisé en classe? (Classe :: Classe)

#include <iostream> 
#include <string> 

//Class 
class Mother { 

    public: 
     void msg(); 

}; 

void Mother::msg(){ //This is where i don't undrstand 
    std::cout << "Go home early sweetie" << std::endl; 
} 

class Daughter: public Mother { 

    public: 
     void getMsg(); 

}; 

void Daughter::getMsg(){ //Same as this 
    std::cout << "Mom said "; 
    msg(); 
} 


//Main 
int main() { 

    Daughter lucy; 
    lucy.getMsg(); 

    return 0; 
} 
+0

Je ne vois pas d'opérateur unaire dans votre code, mais comme vous posez des questions sur le nom de classe devant la fonction dans 'Mother :: msg' et' Daughter :: getMsg': notez que la fonction est définie en dehors de la déclaration de classe. Vous devez donc donner le nom de la classe si vous définissez une fonction membre, sinon la fonction serait globale. Est-ce cela que vous demandez? Pourquoi la 'mère ::' est là? Ou demandez-vous des constructeurs? –

+0

Oui @ Karsten, je pose des questions sur le nom de la classe devant la fonction – ShadowLegend

+0

Aussi peut-on me dire ce que cela signifie? 'Class :: Class: var {...}' cela signifie-t-il que la variable est définie dans la classe right? même concept que ce que vous avez dit? – ShadowLegend

Répondre

0

Dans votre classe, vous déclarez une fonction membre msg(), mais vous ne définit pas là:

class Mother { 
public: 
    void msg(); 
}; 

Habituellement, cette déclaration va dans un fichier .h, et maintenant vous voulez Mettez la définition de la fonction dans un fichier .cpp. Mais vous ne pouvez pas écrire

void msg() 
{ 
    // .. 
} 

dans votre fichier .cpp, car cela définirait une fonction globale, et non une fonction membre. En outre, le compilateur ne peut pas savoir que vous essayez vraiment de définir la fonction membre, car plusieurs classes peuvent être déclarées à ce stade. Alors vous avez besoin d'un moyen de dire au compilateur que la fonction réside dans la Mother classe:

void Mother::msg() 
{ 
    //.. 
} 

La même syntaxe est utilisée pour les espaces de noms. Prenez la classe string de l'espace de noms std:

std::string myString; 

EDIT: Une fonction spéciale est le constructeur qui a le même nom que la classe. La définition ressemblerait à ceci:

Mother::Mother() 
{ 
    // .. 
} 

Dans ce constructeur, vous pouvez initialiser les variables membres et généralement mettre en place l'instance de classe. Toutes les variables membres sont créées à ce moment-là. Maintenant, que faire si vous avez une variable membre d'un type où vous voulez passer un argument à son constructeur? Disons que vous avez un membre var avec un constructeur qui prend un int:

Mother::Mother() : 
    var(1) 
{ 
    // .. 
} 

Ainsi, le constructeur de var est appelé avant que le corps du constructeur de Mother, et vous pouvez passer des arguments à lui.

0

Class::Class() n'est pas un opérateur unaire - c'est le default constructor de la classe Class. En d'autres termes, il est le code qui est exécuté lorsque vous avez un énoncé tel que:

Class my_instance; 

ou

Class another_instance(); 

le code dans un constructeur par défaut initialise généralement des champs de données ou alloue les ressources du système. La contrepartie du constructeur par défaut (ou de tout constructeur) est le Destructor, noté Class::~Class() - qui libère généralement des ressources. Bien sûr, les constructeurs et les destructeurs peuvent être amenés à faire toutes sortes de choses - ils ont des corps comme n'importe quelle autre fonction. Je ne suis pas tout à fait sûr que cela vous aide avec l'exemple de code que vous avez donné (avec la méthode msg()) - mais c'est ce que vous avez commencé votre question, donc j'espère que cela aide.