我正在尝试理解课堂上的getter和setter函数......
我的问题是: 如果我设计一个只从其类中获取状态的函数(“getter”函数),为什么将其标记为“const成员函数”? 我的意思是,如果我的函数被设计为不改变其类的任何属性,为什么使用const成员函数? 我不明白:(
例如:
req.body.comments
和
int GetValue() {return a_private_variable;}
真正的区别是什么?
答案 0 :(得分:17)
当您将成员函数声明为const
时,就像在
int GetValue() const;
然后你告诉编译器它不会修改对象中的任何内容。
这也意味着你可以在常量对象上调用成员函数。如果您没有const
修饰符,则无法在已定义为const
的对象上调用它。您仍然可以在非常量对象上调用const
成员函数。
另请注意,const
修饰符是成员函数签名的一部分,这意味着您可以使用非const函数重载它。那就是你可以拥有
int GetValue() const;
int GetValue();
在同一个班级。
答案 1 :(得分:3)
const
可以在C ++中的三个不同位置出现。
示例1:
const Object obj1;
const
个对象。这意味着您无法更改此对象的任何内容。此对象只能调用{/ 1}}成员函数,如int GetValue()const {return a_private_variable;}
示例2:
const
int myMethod() const {//do something}
方法。如果在类中声明它,它将是const
成员函数。这些是const
变量可以调用的方法类型。示例3:
const
int myMethod(const Object &x) {//do something with x}
参数的方法。这意味着const
内的逻辑不允许更改与myMethod
有关的任何内容。另请注意,参数是通过引用而不是通过副本传递的。我想将此视为一种只读类型的方法。当您开发将由他人使用的软件时;不要让他们打破他们不知道他们不应该打破的事情是个好主意。在这种情况下,您可以将变量,方法和参数约束为x
,以保证合同得到维护。我试着总结一下我在大学里学到的主要想法,但是在C ++中const
周围有很多资源。如果您想了解更多信息,请查看此link。我也有可能错误地记住了一些事情,因为我有一段时间没有进入C / C ++领域。
答案 2 :(得分:0)
类的const实例只能调用const函数。
拥有一个类的const实例对于使程序更稳定非常有用,因为那时你无法意外修改实例。
在你的情况下,功能完全相同,但它不一定是这样。