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++学习中,如有勘误,敬请指出,感激不尽!

posted @ 2022-04-26 17:47  Dantezhenniubi  阅读(135)  评论(0)    收藏  举报
/*鼠标戏龙*/ div#top_nav { display:none } div#bannerbar {display: none;}