一、const对象
1.同定义一般的const变量一样,也可以利用const关键字来定义对象。例如:
const fraction dt1(1, 4);
它表示dt1对象被初始化以后将不能再改变了。
2.将对象定义为const以后,如果不对类的成员函数进行特殊处理,则不能访问const对象中的所有成员函数。例如:
void main( )
{
const fraction x(1, 4);
x.disp( ); //编译出错
}
当将x定义为const对象以后,x.disp( );语句将在编译时出错,原因是const对象是不能被修改的,而C++语言不能判断哪个函数将对数据成员进行修改。因此,一旦将某个对象定义为const以后,则此对象中的所有成员函数都被禁止使用。
3.为了能够使用const对象中不改变数据成员值的成员函数,只要在定义和说明成员函数时,在成员函数名的后面加上const关键字即可。
#include <iostream>
#include <string>
using namespace std;
class cConst
{
int va;
int vb;
public:
cConst( ) {va=0;vb=0;}
cConst(int a, int b) {va=a;vb=b;}
void set_va(int dt) {va=dt;}
void set_vb(int dt) {vb=dt;}
int get_va( ) const {return va;}//const对象要调用的函数
int get_vb( ) const {return vb;}//const对象要调用的函数
void disp( ) const;
};
void cConst::disp( ) const
{
cout << "va=" << va << '\n';
cout << "vb=" << vb << '\n';
}
int main( int argc, char* argv[])
{
const cConst dt1(10, 20);//定义const对象
dt1.disp( );
cout << dt1.get_va( );//cont对象调用加const的函数
cout << endl;
cConst dt2(100, 200);//定义非const对象
dt2.disp( );
cout << dt2.get_va( );//非const对象调用加const的函数
}
运行结果:
需要注意的是,在函数上附加的const关键字,并不表示将什么变成const型,而是表示const对象也可以使用这些函数,而对于非const对象来讲,加上const和没加上const都是一样的。
4.对于改变数据成员的函数来讲,即使加上const,也不能利用const对象来使用。
二、对象中的const成员
在类中定义的常量的值不能直接在后面利用等号给出,必须在构造函数中进行设置。
例如:
#include <iostream.h>
class cConstant
{
public:
const int iConst;
const double fConst;
int vInt;
public:
cConstant(int a,double b): iConst(a), fConst(b)
{
vInt=200;
}
/*或cConstant(int a,double b): iConst(a), fConst(b),vInt(200)
{
}
但cConstant(int a,double b) 错!!!!!
{
iConst=a; fConst=b;//不能这样初始化!!, 只能写在冒号后面
vInt=200;
}
*/
};
void main( )
{
cConstant cVar(1000, 8.88);
cout << “iConst=” << cVar.iConst << ‘\n’;
cout << “fConst=” << cVar.fConst << ‘\n’;
cout << “vInt=” << cVar.vInt << ‘\n’;
}
将常量的值作为构造函数的参数来进行设置,这样就可以为每个对象设置不同的常量值。