码迷,mamicode.com
首页 > 编程语言 > 详细

C++类const成员函数

时间:2017-04-29 22:14:56      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:err   编译错误   实参   his   end   常指针   ror   car   ons   

c++类中可以用const关键字来声明不修改对象的成员函数,它使用时需要注意:

1、常量对象只能调用const成员函数

2、非常量对象可以调用const成员函数

以下列代码为例,来解释:

 1 class Person{
 2     public:
 3         void print(){
 4             cout<<"I am a common function!"<<endl;
 5         }
 6         void show()const{
 7             cout<<"I am a const function!"<<endl;
 8         } 
 9 };
10 int main(){
11     const Person a;
12     a.print();
13 }

 

程序编译结果为:

[Error] passing ‘const Person‘ as ‘this‘ argument of ‘void Person::print()‘ discards qualifiers [-fpermissive]

可以理解为在对象调用成员函数时,会传入this指针:

1、常对象调用非常成员函数的错误原因:

  print函数原型为

  print(Person *const a,int i);(伪代码)

  成员函数的调用 a.print()可以等价为:

  print(&a,1);(伪代码)

  即this作为隐式参数传入,但a指针的类型为 const Person *const;

  在此处可以用函数参数传递的知识来解释,即实参:指向常对象的常指针,形参:指向普通对象的常指针,实参形参不匹配(从编译错误也能看到这一点)。

2、常对象能够调用常成员函数的原因:

  show的函数原型可以视为,

  show(const Person*const a,int i);(伪代码)

  即const关键字修改了传入的对象指针;

  此时,形参实参是匹配的。

总之,这里可以用参数传递的知识来判断。

 

C++类const成员函数

标签:err   编译错误   实参   his   end   常指针   ror   car   ons   

原文地址:http://www.cnblogs.com/lif323/p/6786351.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!