类的常成员与类的静态成员相似。类的常成员包括常数据成员和常成员函数。
常数据成员
在类的成员定义中,使用修饰符const说明的数据成员称为常数据成员。常数据成员必须初始化,并且它的数值不能被更新。常数据成员是通过构造函数的成员初始化列表进行初始化的。
还是举例说明常数据成员:
<span style="font-size:18px;">#include <iostream.h> class A { public: A(int i);//定义的构造函数 void Print();//函数体在类外的一般成员函数 const int &r;//整型常数据成员的引用 private: const int a;//一般的常数据成员 static const int b;//静态的常数据成员 }; const int A::b=15;//给静态的常数据成员赋值 A::A(int i):a(i),r(a)//通过构造函数的初始化列表进行初始化 { } void A::Print()//一般成员函数的函数体 { cout<<a<<","<<b<<","<<r<<endl; } void main() { A a1(50),a2(30);//定义有参数的两个对象 a1.Print();//通过对象来引用成员函数 a2.Print(); }</span>
分析:(1)该程序中定义了三个常数据成员,分别为const int &r; const int a; static const int b;
(2)一般的常数据成员的初始化需要构造函数初始化列表进行初始化。
(3)通过使用构造函数对两个对象进行初始化,把i赋值给a,再把a赋值给r。在这个过程中,一旦赋值就不再更新,b的数值也是被赋值后一直保持不变。因此结果为:50,15,50和30,15,30.
常成员函数
在类的成员函数中,使用const修饰符说明的成员函数称为常成员函数。在程序中,只有常成员函数才被常对象引用。常成员函数的定义格式为:<类型说明符> <函数名> ( <参数表>) const 其中,在该函数的实现部分也要加const。
举例来说明常成员函数:
<span style="font-size:18px;">#include <iostream.h> class B { public: B(int i,int j)//定义的带两个参数的构造函数 { b1=i;b2=j;} void Print();//函数体在类外的一般成员函数 void Print() const;//函数体在类外的常成员函数 private: int b1,b2; }; void B::Print()//一般成员函数的函数体 { cout<<b1<<";"<<b2<<endl; } void B::Print() const//常成员函数的函数体 { cout<<b1<<":"<<b2<<endl; } void main() { B bb1(12,5);//定义的一般对象 bb1.Print();//通过对象来引用成员函数 const B bb2(10,9);//定义的类的常对象,只能引用常成员函数 bb2.Print(); }</span>
分析(1)程序中出现了两个重载函数,void Print()和void Print() const。一个是一般的成员函数,后者是常成员函数。
(2)通过调用构造函数进行对象的初始化,结果为12;5和10:9
时间: 2024-10-06 00:53:24