【问题标题】:Why use a const member function?为什么要使用 const 成员函数?
【发布时间】:2017-03-01 11:30:41
【问题描述】:

我正在尝试理解类 getter 和 setter 函数...

我的问题是: 如果我设计一个仅从其类中获取状态的函数(“getter”函数),为什么将其标记为“const 成员函数”? 我的意思是,如果我的函数旨在不更改其类的任何属性,为什么还要使用 const 成员函数? 我不明白请:(

例如:

int GetValue() {return a_private_variable;}

int GetValue() const {return a_private_variable;}

真正的区别是什么?

【问题讨论】:

    标签: c++ function class constants


    【解决方案1】:

    const 在 C++ 中可以出现在三个不同的地方。

    示例 1:

    const Object obj1;

    • obj1 是一个const 对象。这意味着您无法更改此对象上的任何内容。这个对象只能调用const成员函数,比如

    int GetValue() const {return a_private_variable;}

    示例 2:

    int myMethod() const {//do something}

    • 这是一个const 方法。如果在类中声明,它将是一个const 成员函数。这些是const 变量可以调用的方法类型。

    示例 3:

    int myMethod(const Object &x) {//do something with x}

    • 这是一个采用const 参数的方法。这意味着myMethod 内部的逻辑不允许更改与x 相关的任何内容。另请注意,参数是通过引用而不是通过复制传递的。我喜欢将此视为一种只读类型的方法。

    当您开发将被他人使用的软件时;最好不要让他们破坏他们不知道不应该破坏的东西。在这种情况下,您可以将变量、方法和参数限制为const,以保证合同得到遵守。我试着总结一下我在大学学到的主要思想,但是网上有很多 C++ 中的 const 周围的资源。如果您想了解更多信息,请查看此link。我也有可能记错了,因为我已经有一段时间没有接触 C/C++ 领域了。

    【讨论】:

    • 你的回答很详细,谢谢^_^
    【解决方案2】:

    类的 const 实例只能调用 const 函数。

    拥有一个类的 const 实例对于使您的程序更稳定很有用,因为这样您就不能意外地修改该实例。

    在您的情况下,函数的作用完全相同,但不必如此。

    【讨论】:

    • 声明为const的成员函数可以在非常量对象上调用。
    • 谢谢,我弄错了。你的回答比我的好很多。
    【解决方案3】:

    当你声明一个成员函数为const时,就像在

    int GetValue() const;
    

    然后你告诉编译器它不会修改对象中的任何内容。

    这也意味着你可以在常量对象上调用成员函数。如果您没有const 修饰符,则不能在已定义为const 的对象上调用它。您仍然可以在非常量对象上调用 const 成员函数。

    还要注意const 修饰符是成员函数签名的一部分,这意味着您可以使用非常量函数重载它。那就是你可以拥有

    int GetValue() const;
    int GetValue();
    

    在同一个班级。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-11
      • 2010-09-11
      • 1970-01-01
      • 2015-06-03
      相关资源
      最近更新 更多