• 类2类的const属性


    大家记得这样的声明:

      const int rvalue=5;

    一、固定对象

    即rvalue是固定的,其值不容许改动。同理,当我们声明了一个类时,要产生一个固定的对象,即对象的数据成员是不容许再改动的。我们可以用这样的方式处理(以上节CBox类为例):

    const CBox box(10,20,5);

    这样我们就产生了一个以10X20X5尺寸大小的对像,这个对象不允许再被改动。被声明为const的对象它的指针this也是const的,所以指向的对像是不能改动的。

    二、类的const成员函数

     格式为在类的成员函数头后面加上const即可。

     此时把此函数指针也指定为const,这时不能在函数定义的内部给类的数据成员赋值。const成员函数不能调用同类的非const成员函数,因为这样可能会修改当前对象。

     当某个对象成为const之后,该对象调用的成员函数也只是const,否则程序不能编译。

    三、类const成员函数外部定义

     void getinfo() const ;

     以上为在类内部的声明,const一定放在函数头的后面。如果要把定义也放在类的外部,则外部的函数头和这个声明也是一样的,即一定要带上const.

       const函数只是对于类有意义,对于普通函数没有任何意义。

    总结:

      const类对象,只能访问不变更其内部数据成员的函数,且该函数一定为const.

          const函数只能访问const函数

    以下为源代码:

      

    #include <iostream>
    using namespace std;

    class CBox
    {
    private:
    double m_long;
    double m_width;
    double m_height;
    void printInfo() const;
    public:
    void getinfo() const ;
    void setmember(double,double,double) ;
    double readlongvalue()
    {
    return m_long;
    }
    CBox(
    double lv, double wv, double hv):m_long(lv),m_width(wv),m_height(hv)
    {
    printf(
    "Construct Created!\n");
    }

    CBox();
    };

    void CBox::printInfo() const
    {
    printf(
    "m_long=%f\n m_width=%f\n m_height=%f\n",m_long,m_width,m_height);
    }


    void CBox::getinfo() const
    {
    printInfo();
    printf(
    "%f",m_height);
    /*setmember(10,10,10);*/
    /*printf("%f",readlongvalue());*/
    }

    CBox::CBox()
    {
    m_long
    =m_width=m_height=0;
    }

    void CBox::setmember(double lv,double wv,double hv)
    {
    m_long
    =lv;
    m_width
    =wv;
    m_height
    =hv;
    }
    void main()
    {
    const CBox box;
    box.getinfo();
    /* box.readlongvalue();*/
    /* box.setmember(10,20,30);*/
    }

    注:凡是注销的部分都是不能正常运行的。

      setmember会改变对像的数据成员,故不能运行。

      readlongvalue不是const成员,所以不能补const 成员函数来访问。

      box为const成员对象,所以不能访问非const成员函数。

  • 相关阅读:
    几个C#编程的小技巧
    用asp.net实现将上传的图片变小存入数据库
    解决sql server安装问题
    Linux三则超酷技巧
    vc编程参考站点,简要的Windows API函数大全
    声明游标
    如何把string解析为int?[C#] How to Parse a string to an int? [C#]
    SQL Server2000数据库系统表的应用
    胶囊和凸多边形的动态碰撞检测
    纹理资源管理的困惑
  • 原文地址:https://www.cnblogs.com/yagzh2000/p/2170989.html
Copyright © 2020-2023  润新知