C++ 中关于const修饰函数
以下,是我在参考了这位大佬的文章https://zhuanlan.zhihu.com/p/110159656及百科https://baike.baidu.com/item/CONST/2384845?fr=aladdin后完成练习得出的感想,如有谬误,请多指教
const成员函数
如出现类似以下情况
例1:
int main() { const Student stud(1001,78.5); stud.display(); }
我们知道,构造函数本身也是成员函数的一种,在此段代码中,main函数在调用类Student的构造函数创建对象stud时,参数的值被const修饰为常量并赋值给对象,stud便创建为一个常量对象。
const成员函数表示该成员函数只能读类数据成员,而不能修改类成员数据。定义const成员函数时,把const关键字放在函数的参数表和函数体之间。有人可能会问:为什么不将const放在函数声明前呢?因为这样做意味着函数的返回值是常量,意义完全不同。
下面是声明和定义const成员函数时的情况
例2:
class A {
int i; public: int f() const;
void display() const
{ cout<<num<<" "<<score<<endl; } };
关键字const必须用同样的方式重复出现在函数实现里,否则编译器会把它看成一个不同的函数。
这就是我们所说的const常量对象,只能调用const成员函数。若例1中的常量对象stud在调用成员函数display时,display并未在函数声明时被修饰为const成员函数,则无法通过编译,编译器会报错。
我们了解到,任何成员函数的参数都是含有this 指针的,好比py中的 self ,只不过c++中规定全部不写这个参数, 其实这个参数就是对象本身, 即谁调用成员函数, 这个 this 就是谁。
那么例1中stud是一个const对象,它调用了display方法,则函数签名应是display(stud){}
而stud是一个 const 对象, 若display并未被const修饰,我们默认的就是 this 指针而不是 const 类型,所以参数类型不匹配, 编译无法通过!
我们由此明白,const 修饰成员函数, 根本上是修饰了 this 指针。
在例2中,如果f( )试图用任何方式改变 i 或 调用另一个非const成员函数,编译器将给出错误信息。即任何不修改成员数据的函数都应该声明为const函数,这样有助于提高程序的可读性和可靠性
大一C++学习中,如有勘误,敬请指出,感激不尽!

浙公网安备 33010602011771号