2017-04-11 24 views
0

次のコードを理解しようとすると動かなくなります。C++でヘッダ宣言のクラス宣言が必要

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. ライン: "〜Utf8Value();"

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

それは機能がchar* str_を削除することであることを意味しない:私はcppのファイルをチェックすると 、それだけで1行が含まれて?関数名の前に~がある理由はありますか? ~Utf8Valueの代わりに他の名前に名前を変更できますか?

  1. 行:const char* operator*() const { return str_; } どうしますか?関数名の後に*があるのはなぜですか? constの私の理解では、関数/変数は決して変更されませんが、角括弧の後ろにある2番目のconstは何を意味しますか?

  2. 行:Utf8Value(const Utf8Value&); 最初の行のような別のコンストラクタですか?explicit Utf8Value(Local<v8::Value> obj);

  3. 行:void operator=(const Utf8Value&); この行が何をしようとしているのかわかりません。

誰でもこの手伝いできますか?どんな助けでも大歓迎です! ありがとうございます!

+1

これらはクラスに関する基本的な質問です。教科書を通し、その中の問題に取り組むことは、これらの特定の質問に答えを出すよりも、長期的にはあなたにとってより有用になります。 –

答えて

0

もっと大きなプロジェクトソースコードを読む前に、C++の構文がよくわからないようです。あなたの質問に

:と

  1. 関数start「〜」クラス宣言(スコープ)内のオブジェクトが死ぬか、削除されたときに自動的に呼び出すクラスオブジェクトの破棄関数です。この場合、Utf8Valueのオブジェクトは、ホストが破壊されたときに解放する必要がある場所を指しています。与えるために得る、得るために与える。最後に、名前を変更することはできません。

  2. この行は、このオブジェクトをchar *文字列として扱うときの動作を宣言します。これは何をC++でオペレータオーバーライドを呼び出すのですか?ほとんどの演算子は、算術演算、比較演算、シフト演算など、あなたが望むものとして設計できます。これはC++の非常に特殊な特性です。 'const'関数の場合、この関数はこのオブジェクト内の何かを変更しないことを意味します。

  3. はい。しかし、それはプライベートスコープで宣言されているため、オブジェクトまたは別のコンストラクタから呼び出すことはできません。一般に、デザイナーが望まない方法でオブジェクトを構築することを禁止するように設計されています。

  4. 値の割り当てからオブジェクトを構築するのをやめようとしているときに質問3のように機能します。

+0

詳細な説明をありがとうございます! –