const 在类成员函数中的使用说明

在类中声明成员函数的时候, 当不允许成员函数修改到我们的对象的成员变量的时候, 常常会在函数的名的尾部加上const 关键字修饰。 这样, 如果我们无意中在函数内部修改到了数据成员, 或者调用了其他的非const 函数的时候, 编译器会报错。例如:

#include <iostream>
using namespace std;
class temp
{
public:
temp(int age);
int getAge() const;
void setNum(int num);
private:
int age;
};

temp::temp(int age)
{
this->age = age;
}

int temp::getAge() const
{
age+=10; // #Error...error C2166: l-value specifies const object #
return age;
}

int main()
{
temp a(22);
cout << "age= " << a.getAge() << endl; return 0;
}


一般情况下, 当成员函数的返回值数给类对象的时候, 一般将该函数的返回类型用const 修饰(const 在函数名字之前), 以表示返回值是一个const 的对象, 或者是某个对象的引用是const。多用于运算符的重载。通常,不建议用const修饰函数的返回值类型为某个对象或对某个对象引用的情况。 原因如下:  
  如果返回值是某个对象为const或某个对象的引用为const   ,则返回值具有const属性,则返回实例只能访问类a中的公有(public)数据成员和const成员函数,并且不允许对其进行赋值操作,这在一般情况下很少用到。  例如, 有一个class A, 成员函数声明为:const A& A::F(const &A ) const; 第一个const  修饰Reference &的返回值。 也就是说返回值为const referece的object。 这是为了避免出现f(a)=b;的情况, 比如:

A a, b;

下面是错误的:

a.F(a)=b;//F函数返回a的引用,那这个就等价于a=b;既然如此,那不如直接写a=b;

由于参数的传递方式是pass  by referecnce, 所以第二个const 是修饰参数的, 避免在函数内部修改了参数。

最后一个const 是修饰调用这个函数的object。 也就是说不允许object 调用这个函数修改自己的数据成员。 NOTE: 为啥要放在最后面呢? 原因是const已经吧前面两个位置占住了。由于 因为成员函数的参数表里无法出现调用函数的对像本身,所以就只能加到函数后面了,用来修饰*this的,const对象也只能调用后缀是const的方法.。



 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值