zoukankan      html  css  js  c++  java
  • 常对象与常成员函数

    常对象与常成员函数 

       

     C/C++

    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修饰对象:

    常对象实例化后将不能被改变,而且常对象也不能调用其它成员函数,那么它有什么用呢?办法是,C++编译器故意设计成,常对象只能调用常成员函数,这是它唯一的对外接口。

    #include<iostream.h>

    class A

    {public:

    A(int p,int q){x=p,y=q;}

    ~A(){}

    void display();

    void display() const;//函数重载const

    private:

    int x,y;

    };

    void A::display()

    {cout<<x<<":"<<y<<endl;}

    void A::display() const

    {cout<<x<<":"<<y<<endl;}

    void main()

    {A l(2,3);

    l.display();

    const A f(8,9);//如果将一个对象说明为一个常对象,则通过该对象只能调用他的常成原函数,而不能调用他的其他的成员函数。

    f.display();

    }

    //const是函数类型的一部分,因此再函数的定义部分也要带const

    //常成员函数不能更新对象的数据成员,也不能调用该类中没有用const修饰的成员函数。

    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) 常对象只能调用它的常成员函数,而不能调用其他成员函数。成员函数与对象之间的操作关系如表所示。

    成员函数与对象之间的操作关系

      

    常成员函数

    一般成员函数

    常对象

    可以

    不可以

    一般对象

    可以

    可以

       

       

    (4) const关键字可以用于参与重载函数的区分。例如:

        void Print();

        void Print() const

     这两个函数可以用于重载。重载的原则是:常对象调用常成员函数,一般对象调用一般成员函数。

    5)在const成员函数中:  

      可以修改被定义成mutable的成员变量

       

    源文档 <http://blog.chinaunix.net/uid-21411227-id-1826906.html>

       

  • 相关阅读:
    【原创】elasticsearch入门
    【原创】nginx入门
    【原创】SpringMVC同一RequestMapping返回不同的类型
    [原创]在Centos7.2上源码安装PHP、Nginx、Zentao禅道
    CentOS环境下tomcat启动超级慢的解决方案
    [原创]Nginx反向代理及负载均衡
    常见证书格式和转换
    MySQL基本命令
    研究重力加速度随地球纬度递增的原因
    倒霉的一天
  • 原文地址:https://www.cnblogs.com/mylinux/p/3055372.html
Copyright © 2011-2022 走看看