类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成员函数。

posted on 2011-09-08 10:02  天上星  阅读(547)  评论(0编辑  收藏  举报

导航