C++类const成员函数

时间:2022-06-20 19:12:48

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关键字修改了传入的对象指针;

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

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