代码:
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
分析:
-
常对象只能调用常成员函数。
2. 普通对象可以调用全部成员函数。
3. 当对一个对象调用成员函数时,编译程序先将对象的地址赋给this指针,然后调用成员函数,每次成员函数存取数据成员时,由隐含使用this指针。 -
当一个成员函数被调用时,自动向它传递一个隐含的参数,该参数是一个指向这个成员函数所在的对象的指针。
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
需要注意的是,常成员函数不能修改对象的成员变量。
原文链接: https://www.cnblogs.com/hu983/p/5479099.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/233183
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!