大家记得这样的声明:
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成员函数。