首页 > 代码库 > C++类const成员函数
C++类const成员函数
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成员函数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。