const对象和对象中的const成员

mac2025-04-25  7

一、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’; }

将常量的值作为构造函数的参数来进行设置,这样就可以为每个对象设置不同的常量值。

最新回复(0)