首页 理论教育常成员的使用-来自C++程序设计基础教程

常成员的使用-来自C++程序设计基础教程

【摘要】:如果将一个对象说明为常对象,则通过该常对象只能调用它的常成员函数,而不能调用其他成员函数。只能通过构造函数的参数初始化表对常数据成员进行初始化。这样,在执行构造函数时自动将“常数据成员1”赋值为“参数1”的值,“常数据成员2”赋值为“参数2”的值,…

C++中常成员包括常成员函数和常数据成员。

1.常成员函数

使用const关键词声明的函数为常成员函数,常成员函数声明格式如下:

类型函数名(参数表)const;

使用常对象成员时需要注意以下几点:

(1)const是函数类型的一个组成部分,因此在实现部分也要带const关键词。

(2)常成员函数不更新对象的数据成员,也不能调用该类中没有用const修饰的成员函数。

(3)如果将一个对象说明为常对象,则通过该常对象只能调用它的常成员函数,而不能调用其他成员函数。

(4)const关键词可以参与区分重载函数。例如,如果在类中有说明:

void print();

void print()const;

则这是对print的有效重载。

【例3.6】分析以下程序的执行结果。(www.chuimin.cn)

解:上述程序中,MyClass5类中说明了两个同名函数print,其中一个是常函数。在主函数中说明了两个对象a和b,其中对象b是常对象。通过对象a调用的是没有用const修饰的函数,而通过对象b调用的是用const修饰的常函数。程序的执行结果如下:

1∶n=10

2∶n=20

2.常数据成员

就像一般数据一样,类的成员数据也可以是常量和常引用,使用const说明的数据成员为常数据成员。常数据成员的值是不能改变的。只能通过构造函数的参数初始化表对常数据成员进行初始化。如果在一个类中说明了n个常数据成员,那么构造函数就只能通过初始化列表对该数据成员进行初始化,其一般格式如下:

构造函数(参数表):常数据成员1(参数1),常数据成员2(参数2),…,常数据成员n(参数n)

其中,冒号后面是一个数据成员初始化列表,它包含一个初始化项,当有多个初始化项时,要用逗号分隔开。“参数1”~“参数n”均为“参数表”中的某个参数。这样,在执行构造函数时自动将“常数据成员1”赋值为“参数1”的值,“常数据成员2”赋值为“参数2”的值,…,“常数据成员n”赋值为“参数n”的值。

【例3.7】分析以下程序的执行结果。

解:上述程序中,在MyClass6(int i,int j):n(i),m(j){}中,n(i),m(j)是初始化列表,给常数据成员n赋值为i,常数据成员m赋值为j。程序的执行结果如下:

n=10,m=20

需要注意的是在类体中声明了某一个数据成员为常数据成员后,该类所有对象中的该数据成员的值都是不能改变的,但不同对象中该变量成员的值可以是不同的。