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

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

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

    如有不当,欢迎指正 :)
  • 相关阅读:
    android实现 服务器功能
    jQuery部分源码帮助理解
    jquery 2.0.3代码结构
    Mac下配置JAVA_HOME
    用户环境变量
    你的apk有多不安全
    JadClipse eclipse反编译插件
    vim 使用笔记
    Makefile简易模板
    Linux watch 监控系统状态
  • 原文地址:https://www.cnblogs.com/lif323/p/6786351.html
Copyright © 2011-2022 走看看