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>

       

  • 相关阅读:
    java 在线网络考试系统源码 springboot mybaits vue.js 前后分离跨域
    springboot 整合flowable 项目源码 mybiats vue.js 前后分离 跨域
    flowable Springboot vue.js 前后分离 跨域 有代码生成器 工作流
    Flowable 工作流 Springboot vue.js 前后分离 跨域 有代码生成器
    java 企业 网站源码 后台 springmvc SSM 前台 静态化 代码生成器
    java 进销存 商户管理 系统 管理 库存管理 销售报表springmvc SSM项目
    基于FPGA的电子计算器设计(中)
    基于FPGA的电子计算器设计(上)
    FPGA零基础学习:SPI 协议驱动设计
    Signal tap 逻辑分析仪使用教程
  • 原文地址:https://www.cnblogs.com/mylinux/p/3055372.html
Copyright © 2011-2022 走看看