2017-04-11 1 views
0

Je suis coincé lorsque j'essaie de comprendre le code suivant.C++ Besoin d'aide pour la déclaration de classe dans l'en-tête

class V8_EXPORT Utf8Value { 
    public: 
     explicit Utf8Value(Local<v8::Value> obj); 
     ~Utf8Value(); 
     char* operator*() { return str_; } 
     const char* operator*() const { return str_; } 
     int length() const { return length_; } 
    private: 
     char* str_; 
     int length_; 

     Utf8Value(const Utf8Value&); 
     void operator=(const Utf8Value&); 
    }; 
  1. ligne: "~ Utf8Value();" Quand j'ai vérifié le fichier cpp, il ne contient qu'une seule ligne:

    String::Utf8Value::~Utf8Value() { 
        i::DeleteArray(str_); 
    } 
    

Est-ce que cela signifie que la fonction est de supprimer le char* str_? Y a-t-il une raison pour laquelle vous avez obtenu un ~ avant le nom de la fonction? Puis-je le renommer en d'autres noms au lieu de ~Utf8Value?

  1. Ligne: const char* operator*() const { return str_; } Que faut-il faire? Pourquoi existe-t-il un * après le nom de la fonction? Ma compréhension de const est que le fucntion/variable ne changera jamais, mais que signifie le deuxième const après parenthèses?

  2. Ligne: Utf8Value(const Utf8Value&); Est-ce un autre constructeur comme la première ligne explicit Utf8Value(Local<v8::Value> obj);?

  3. Ligne: void operator=(const Utf8Value&); Je n'ai aucune idée de ce que la ligne essaie de faire.

Quelqu'un peut-il m'aider avec ceci? Toute aide serait très appréciée! Merci!

+1

Ce sont des questions basiques sur les classes. Passer à travers un manuel et travailler sur les problèmes qu'il contient vous sera plus utile à long terme que d'obtenir des réponses à ces questions spécifiques. –

Répondre

0

Il semble que vous ne connaissiez pas la syntaxe C++ bien avant d'essayer de lire un code source plus grand.

à votre question:

  1. Un début de fonction avec « ~ » dans la déclaration de classe (portée) est le détruire la fonction d'un objet de classe qui appelle automatiquement lorsque l'objet est mort ou supprimé. Dans ce cas, un objet de Utf8Value (appelons-le object à next) a été tenu un str_ pointant vers quelque chose qui doit libérer quand l'hôte est en train de détruire. Obtenez de donner, donner pour obtenir. Enfin, vous ne pouvez pas le renommer.

  2. Cette ligne déclare un comportement lorsque vous traitez cet objet comme une chaîne char *. Qu'est-ce que c'est que cet opérateur d'appel remplace ici en C++ et la plupart des opérateurs peuvent être conçus comme vous voulez, comme l'arithmétique, la comparaison, le décalage, etc. C'est une caractéristique très particulière de C++. Pour la fonction 'const', cela signifie que cette fonction ne changera rien dans cet objet.

  3. Oui. Mais comme il est déclaré dans la portée privée, il ne peut PAS être appelé hors de l'objet ou d'un autre constructeur. De manière générale, il est conçu pour interdire la construction d'un objet d'une manière que le concepteur ne veut pas.

  4. Cela fonctionne comme la question 3 en essayant d'arrêter la construction d'un objet à partir de l'affectation de valeur.

+0

merci pour l'explication détaillée !! –