const成员函数

 

    effecticv C++第三条就说到,在设计类时要尽量使用const,当函数不会改变类的成员是,通常都会将该函数声明为const,但是const函数内部如何实现的呢?

    首先我们应该从C++类的成员函数实现说起。

1 class temp
2 {
3 public:
4     void fun1();
5     void fun2() const;
6 }

    在类temp中,函数fun1()是非const的,函数fun2()是const类型的。

    新建一个类的对象(非const) temp a;

    a.fun1()在调用的时候,为了保证每个成员函数都能调用到它的对象,编译器会将对象a的地址传递给函数的隐式形参this,也就是a.fun1(&a)。每个成员函数都会有个隐式的参数this指针。

    对象是非const类型的时候,我们即可以调用const类型的成员函数,可以调用非const类型的成员函数。

    但是当新建一个类的对象(const型)const temp b;

    a.fun1()在调动时,一个const temp*传递给隐式形参this,然后this的类型是常量指针,即temp* const,我们不能将一个指针常量赋值给常量指针,因此对于const类型的对象不能调用非const的成员变量。而const的型的成员变量,会在隐式形参this的前面加上const,也就是const temp* const this,它可以接受const temp*的参数。因此const类型的对象可以调用const类型的成员变量。

 

posted @ 2016-10-02 12:15  oscarwin  阅读(136)  评论(0编辑  收藏  举报