zoukankan      html  css  js  c++  java
  • 面向对象 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关键字修改了传入的对象指针;

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

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

    如有不当,欢迎指正 :)
  • 相关阅读:
    最先与最后(鲁迅)
    GPS固定数据输出语句($GPGGA)
    网络流量测量软件的设计与实现
    塑料模型毕业设计论文
    周末去牛街!
    周口店猿人遗址!
    总有一些东西让我们泪流满面
    不行了,回去休息
    过完节回到北京了
    算法竞赛专题解析(0)写作计划
  • 原文地址:https://www.cnblogs.com/lif323/p/6786351.html
Copyright © 2011-2022 走看看