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

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

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

    如有不当,欢迎指正 :)
  • 相关阅读:
    五子棋
    团队项目:五子棋
    101空降师506团2营E连全体成员
    团队作业七
    作业六
    团队作业(五)——旅游行业的手机App
    团队任务四(无图)
    团队作业三(补二)
    菜的抠脚团队正式成立
    团队作业七
  • 原文地址:https://www.cnblogs.com/lif323/p/6786351.html
Copyright © 2020-2023  润新知