C/C++中的常成员函数

代码:

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 class A{
 6     public:
 7         void func1(){
 8             cout<<"func1"<<endl;
 9         }
10         void func1()const{
11             cout<<"const func1"<<endl;
12         }
13         void func2()const{
14             cout<<"const func2"<<endl;
15         }
16         void func3(){
17             cout<<"func3"<<endl;
18         }
19 };
20 
21 int main(){
22 
23     A a1;
24     a1.func1();
25     a1.func2();
26 
27     A const a2;
28     a2.func1();
29     //a2.func3();编译错误
30 
31     return 0;
32 }

 

输出:

func1
const func2
const func1

 

 分析:

1. 常对象只能调用常成员函数。
2. 普通对象可以调用全部成员函数。
3. 当对一个对象调用成员函数时,编译程序先将对象的地址赋给this指针,然后调用成员函数,每次成员函数存取数据成员时,由隐含使用this指针。

4. 当一个成员函数被调用时,自动向它传递一个隐含的参数,该参数是一个指向这个成员函数所在的对象的指针。
5. 在C++中,this指针被隐含地声明为: X *const this,这意味着不能给this 指针赋值;
   在X类的const成员函数中,this指针的类型为:const X* const, 这说明this指针所指向的这种对象是不可修改的(即不能对这种对象的数据成员进行赋值操作);
6. 由于this并不是一个常规变量,所以,不能取得this的地址。

更详细的解释:http://blog.csdn.net/zhuyingqingfen/article/details/31751111

需要注意的是,常成员函数不能修改对象的成员变量。

posted @ 2016-05-10 19:11  hu983  阅读(870)  评论(0编辑  收藏  举报