【C++面向对象】C++中成员函数的const属性

      下面主要对C++中关于成员函数的const属性进行讨论:
(1)形参为const

      这种情况和普通函数的形参为const的形式类似,形如:

 void print(const int& val);
      此时,在print函数的内部,不能修改val引用所指的值,当修改时编译器会报错误:

[Hyman@Hyman-PC const]$ g++ const.cpp 
const.cpp: In member function ‘void Myobj::print(const int&)’:
const.cpp:14: 错误:increment只读引用‘val’
(2)返回值为const的形式,形如下面代码中的:

const int& print(const int& val);
#include<iostream>
using namespace std;
class Myobj
{
    int m_i;
    int m_j;
    public:
    Myobj(int i,int j):m_i(i),m_j(j)
    {

    }
    const int& print(const int& val)
    {
        int k=400;
        int &rk=k;
        cout<<"val="<<val<<endl;
        return rk;
    }
};
int main()
{
    Myobj mb(100,200);
    int i=300;
    const int& ri = mb.print(i);
    cout<<"ri="<<ri<<endl;
    return 0;
}

       这里有的童鞋可能会产生疑问,print中为什么会返回了局部变量的引用类型,不是说函数中不能返回局部变量的引用或者指针吗?请参照 【C++引用】const 引用的几点用法一文,
其实const int&可以延长局部变量地址的生存时间。在这种情况下我们只能用const int&接收print的返回值。

(3)this指针为const的形式,形如:
int& print()const;
        这种情况下是将print形参中包含的this指针声明为const的形式,this指针是const的,表示this指向的对象无法进行修改,也就是说改对象包含的字段无法进行修改,若修改
就会编译不通过:
[Hyman@Hyman-PC const]$ g++ const.cpp 
const.cpp: In member function ‘void Myobj::print() const’:
const.cpp:14: 错误:increment of data-member ‘Myobj::m_i’ in read-only structure

        需要注意的是,这种this指针为const的形式的成员函数将和this指针不是const形式的成员函数构成重载,也就是说下面两种形式的成员函数是重载关系,是可以在同一个类中共存的:
int& print()const;
int& print();

       另外,如果实在需要在this指针为const的成员函数中修改成员变量,可以将需要修改的变量用mutable修饰,也就是:

 mutable int m_i;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值