• 常对象和常函数的关系 const


    转载自:http://www.diybl.com/course/3_program/c++/cppsl/2008525/117871.html

    (1) 常对象
    用const修饰的对象叫对象常量,其格式如下:
    〈类名〉const 〈对象名〉 或者 const 〈类名〉〈对象名〉
    声明为常对象的同时必须被初始化,并从此不能改写对象的数据成员。


    例:分析下列错误的地方,说明理由;
    #include<iostream.h>
    class Point
    { int x, y;
    public:
    Point(int a, int b) { x=a; y=b;}
    Void MovePoint( int a, int b){ x+=a; y+=b;}
    Void print(){ cout<<"x="<<x<<"y="<<y<<endl;}
    };
    void main( )
    {
    const Point point1( 10,10);//常量对象
    point1.MovePoint(2,2);//常对象point1的数据不能被更改,所以错误
    point1.print( );//print函数的this指针不能指向常对象
    }
    错误原因在旁边已经注释。 
    常对象常被用在对象的引用上。所谓常引用是指说明引用时用const修饰。常引用所引用的对象不能被更新,一般用做形参。其格式:
    const 〈类型说明〉&〈引用名〉 
    例:根据例题5-11的类给出程序的执行结果:
    #include<math.h>
    int length(const Point &p1, const Point &p2)
    { int l;
    l=sqrt((p1.x -p2.x)* (p1.x -p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
    return l;
    }
    void main( )
    {
    Point a(1,1),b(4,5);
    Cout<<"两点的距离是:"<<length( a, b)<<endl;
    }
    本程序的输出:
    两点的距离是:5 
    (2)常成员函数
    用const关键词说明的函数叫常成员函数。其格式如下:
    〈类型〉〈函数名〉(〈参数表〉)const;
    常成员函数的作用和功能:
    常成员函数不能更新对象的数据,也不能调用非const修饰的成员函数。常对象只能调用类的常成员函数。 
    例:给出下列程序的执行结果:
    #include<iostream.h>
    class Point
    { int x, y;
    public:
    Point(int a, int b) { x=a; y=b;}
    Void MovePoint( int a, int b){ x+=a; y+=b;}
    Void print()const { cout<<"x="<<x<<"y="<<y<<endl;}
    };
    void main( )
    {
    Point point1(1,1);
    const Point point2( 2,2);//常量对象
    point1.print();//普通对象可以调用常成员函数
    point2.print( );//常对象调用常成员函数
    }
    本程序执行结果:
    x=1 y=1
    x=2 y=2 

    使用const关键字说明的成员函数称为常成员函数,常成员函数的说明格式如下: 
        <返回类型说明符> <成员函数名>(<参数表>) const; 
        在使用常成员函数时要注意: 
        (1) const是函数类型的一个组成部分,因此在函数实现部分也要带有const关键字。 
        (2) 常成员函数不更新对象的数据成员,也不能调用该类中没有用const修饰的成员函数。 
        (3) 常对象只能调用它的常成员函数,而不能调用其他成员函数。成员函数与对象之间的操作关系如表12-1所示。 



        (4) const关键字可以用于参与重载函数的区分。例如: 
        void Print(); 
        void Print() const; 
        这两个函数可以用于重载。重载的原则是:常对象调用常成员函数,一般对象调用一般成员函数。 
      (5)在const成员函数中:   
      可以修改被定义成mutable的成员变量 

  • 相关阅读:
    Ngui使用随心记
    Ngui分辨率适配
    最大堆(优先队列)
    循环队列 & 栈的共用空间
    C#顺序表 & 单向链表(无头)
    IntelliJ Idea 常用快捷键列表
    写增删改查遇到的小问题总结
    用JS解决html页面间获取context-path问题
    html 页面如何获得url中的参数
    @RequestBody和@RequestParam区别
  • 原文地址:https://www.cnblogs.com/honeybusybee/p/5257424.html
Copyright © 2020-2023  润新知