【问题标题】:C++ Need Help for Class Declaration in HeaderC ++需要帮助以在标头中声明类
【发布时间】:2017-04-11 03:08:15
【问题描述】:

我在尝试理解以下代码时卡住了。

  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();” 当我检查 cpp 文件时,它只包含一行:

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

意思是说功能是删除char* str_吗?函数名前有~ 有什么原因吗?我可以将其重命名为其他名称而不是 ~Utf8Value

  1. 线路:const char* operator*() const { return str_; } 它有什么作用?为什么函数名后面有*? 我对const的理解是函数/变量永远不会改变,但是括号后面的第二个const是什么意思呢?

  2. 线路:Utf8Value(const Utf8Value&amp;); 是不是像第一行explicit Utf8Value(Local&lt;v8::Value&gt; obj);这样的另一个构造函数?

  3. 线路:void operator=(const Utf8Value&amp;); 我不知道这条线想做什么。

谁能帮我解决这个问题?任何帮助将非常感激! 谢谢!!

【问题讨论】:

  • 这些是关于课程的基本问题。从长远来看,阅读教科书并解决其中的问题对你来说比获得这些特定问题的答案更有用。

标签: c++ class header declaration


【解决方案1】:

在尝试阅读一些更大的项目源代码之前,您似乎不太了解 C++ 语法。

你的问题:

  1. 在类声明(作用域)中以“~”开头的函数是类对象的销毁函数,该函数在对象死亡或删除时自动调用。在这种情况下,Utf8Value 的一个对象(让我们在接下来将其称为对象)已经持有一个 str_ 指向在主机被破坏时需要释放的地方。得到给予,给予得到。最后,不能重命名。

  2. 当将此对象视为 char* 字符串时,此行声明了一种行为。它是做什么的,这在 C++ 中称为运算符覆盖,大多数运算符可以设计为您想要的,如算术、比较、移位等。这是 C++ 的一个非常特殊的特性。对于 'const' 函数,这意味着这个函数不会改变这个对象中的某些内容。

  3. 是的。但由于它是在私有范围内声明的,因此不能从对象或其他构造函数中调用它。一般来说,它旨在禁止以设计者不希望的方式构造对象。

  4. 在尝试停止通过赋值构造对象时,它的工作原理与问题 3 类似。

【讨论】:

    猜你喜欢
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    相关资源
    最近更新 更多