nop*_*nto 5 c++ const class function
我正在努力理解课堂上的getter和setter功能......
我的问题是:如果我设计一个只从其类中获取状态的函数("getter"函数),为什么将其标记为"const成员函数"?我的意思是,如果我的函数被设计为不改变其类的任何属性,为什么使用const成员函数?我不明白请:(
例如:
int GetValue() {return a_private_variable;}
Run Code Online (Sandbox Code Playgroud)
和
int GetValue() const {return a_private_variable;}
Run Code Online (Sandbox Code Playgroud)
真正的区别是什么?
Som*_*ude 18
当你声明一个成员函数时const,就像在
int GetValue() const;
Run Code Online (Sandbox Code Playgroud)
然后你告诉编译器它不会修改对象中的任何东西.
这也意味着你可以在常量对象上调用成员函数.如果您没有const修饰符,则无法在已定义为的对象上调用它const.您仍然可以const在非常量对象上调用成员函数.
另请注意,const修饰符是成员函数签名的一部分,这意味着您可以使用非const函数重载它.那是你可以拥有的
int GetValue() const;
int GetValue();
Run Code Online (Sandbox Code Playgroud)
在同一个班.
Noa*_*ron 13
const 在 C++ 中可以出现在三个不同的地方。
示例 1:
const Object 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以保证合约得到维护。我试图总结我在大学学到的主要思想,但网上有很多const关于 C++ 的资源。如果您想了解更多信息,请查看此链接。也有可能我记错了一些东西,因为我已经有一段时间没有进入 C/C++ 领域了。