类成员函数后带const

                                                                                      —— www.libcl.cn

这篇文章主要记录我对"类成员函数后带const"的理解。

例子:
  1. class constTemp
  2. {
  3.     int a;
  4. public:
  5.     constTemp(int nA = 0) { a = nA ;}
  6.     void seta(int nA);
  7.     void printa()const;
  8. };
为什么在成员函数printa()后面加多一个const?
百度一下,看了别人的解释说: “这是把整个函数修饰为const,即‘函数体内不能对成员数据做任何改动‘;且如果声明这个类的一个const实例,这时则只能调用这个类中有const修饰的函数。”

我的理解是:成员函数void printa()const;不能对函数体内成员变量int a作任何修改。

贴上我以下的测试代码:
  1. #include <iostream>
  2.   
  3. using namespace std;
  4. class constTemp
  5. {
  6.     int a;
  7. public:
  8.     constTemp(int nA = 0) { a = nA ;}
  9.     void seta(int nA);
  10.     void printa()const;
  11. };
  12. void constTemp::seta(int nA)
  13. {
  14.     a = nA;
  15. }
  16. void constTemp::printa() const
  17. {
  18.     cout << "a'value is:" << a << endl;
  19. }
  20. int main()
  21. {
  22.     //此时声明的是一个const的对象,注意声明const对象必须确保该class有构造函数
  23.     const constTemp cTTest;
  24.     //printa()函数没修改任何成员变量所以还可以继续使用。
  25.     cTTest.printa();
  26.     //此时就不能再调用成员函数去修改成员变量,这是非法的。
  27.     //cTTest.seta(5);
  28.     cTTest.printa();
  29.     return 0;
  30. }
  31.  
该例子主要呈现的结果是:“且如果声明这个类的一个const实例,这时则只能调用这个类中有const修饰的函数。”

类成员函数后面加const具有多方面的作用: - **限制函数对成员变量的修改**:非静态成员函数后面加const,表示成员函数隐含传入的this指针为const指针,该函数能改变的成员变量(唯一例外是对于mutable修饰的成员)。这保证了的数据成员被修改,从而提高程序的安全性和可靠性。例如,在以下代码中,`out2`函数后加了const能修改的成员变量,若在`out3`函数中尝试修改成员变量`num`,会导致编译出错,删掉const才可正常编译。 ```cpp #include <iostream> using namespace std; class aa{ int num; public: aa(){ int b = 10; num = b; }; void out1(){ cout<<num<<endl; } void out2() const{ cout<<num<<endl; } void out3() const { num+=10; //出错,const函数能修改其数据成员,删掉const可正常编译 cout<<num<<endl; } }; int main() { aa a1; a1.out1(); a1.out2(); // a1.out3(); const aa a2; // a2.out1(); // 错误,const的成员 能访问非const函数 a2.out2(); // a2.out3(); return 0; } ``` - **函数调用的灵活性**:加了const的成员函数可以被非const对象和const对象调用,但const的成员函数只能被非const对象调用。一般对于需修改操作的成员函数尽量声明为const成员函数,以防止产生const对象无法调用该成员函数的问题,同时保持逻辑的清晰 [^2]。 - **提高代码的可读性和可靠性**:函数后面加const相当于表明这个函数一个只读函数能修改中的成员。这样别人看到代码就知道该函数会改变类成员,提高了代码的可读性;同时,若尝试在该函数中改变类成员的值会报错,提高了代码的可靠性 [^4]。 - **明确函数用途**:常量成员函数通常用于访问的数据成员,而是修改它们。可以使用常量成员函数来实现的数据成员的读取操作,而使用非常量成员函数来实现的数据成员的写入操作 [^3]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值