2016-10-19 119 views
4

我试图理解类的getter和setter功能...为什么使用const成员函数?

我的问题是: 如果我设计了一个功能,仅仅只是从它的类(一个“吸”功能)获得的状态,为何将其标记作为“const成员函数”? 我的意思是,如果我的函数被设计为不改变其类的任何属性,为什么要使用const成员函数呢? 我不明白,请:(

例如:

int GetValue() {return a_private_variable;} 

int GetValue() const {return a_private_variable;} 

是什么真正的区别

回答

8

当你声明一个成员函数作为const,像

int GetValue() const; 

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

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

另请注意,const修饰符是成员函数签名的一部分,这意味着您可以使用非const函数对其进行重载。那就是你可以有

int GetValue() const; 
int GetValue(); 

在同一类。

0

一类的常量实例只能调用const函数

让一个const的ac实例lass对于使你的程序更加稳定很有用,因为那样你不能无意中修改这个实例。

在你的情况下,函数完成同样的事情,但它不一定是这样。

+0

成员函数可以在非固定的物体被调用。 –

+0

谢谢,我有这个错误的方式。你的回答比我的好得多。 –

2

const可以显示在C++的三个不同的地方。

实施例1:

const Object obj1;

  • OBJ1是const对象。这意味着你不能在这个对象上改变任何东西。该目的只能调用const成员函数像

INT的GetValue()const的{返回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++领域。声明为`const`

相关问题