zoukankan      html  css  js  c++  java
  • 类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成员函数。

  • 相关阅读:
    Fragment使用具体解释
    2014百度之星第一题Energy Conversion
    HDU 2602 Bone Collector 0/1背包
    Angular 2 + 折腾记 :(7) 初步了解表单:模板驱动及数据驱动及脱坑要点
    《开源框架那点事儿25》:对框架模板引擎实现方式的改造实录
    ROS机器人程序设计(原书第2版)补充资料 (柒) 第七章 3D建模与仿真 urdf Gazebo V-Rep Webots Morse
    sql改写or 改成union不等价数据变多
    在GDAL中添加GDALRasterizeGeometriesBuf函数
    多时相地图瓦片简单设想
    记录一次使用VS2015编译错误的原因查找(boost+gdal)
  • 原文地址:https://www.cnblogs.com/yagzh2000/p/2170989.html
Copyright © 2011-2022 走看看