当前位置: 首页 > 文档资料 > C++大学教程 >

6.6 类范围与访问类成员

优质
小牛编辑
142浏览
2023-12-01

类的数据成员(类定义中声明的变量)和成员函数(类定义中声明的函数)属于该类的类范围(class's scope)。非成员函数在文件范围(file scope)中定义。

在类范围中,类成员可由该类的所有成员函数直接访问,也可以用名称引用。在类范围外,类成员是通过一个对象的句柄引用,可以是对象名、对象引用或对象指针(第7章将介绍,每次引用对象中的数据成员和成员函数时,编译器插入一个隐式句柄)。

类的成员函数可以重载,但只能由这个类的其他成员函数重载。要重载成员函数,只要在类定义中提供该重载函数每个版本的原型,并对该重载函数每个版本提供不同的函数定义。

成员函数在类中有函数范围(function scope),成员函数内定义的变量只能在该函数内访问。如果成员函数定义与类范围内的变量同名的变量,则在函数范围内,函数范围内的变量掩盖类范围内的变量。这种隐藏变量可以通过在前面加上类名和作用域运算符(::)而访问。隐藏的全局变量可以用一元作用域运算符访问(见第3章)。
访问类成员的运算符与访问结构成员的运算符是相同的。圆点成员选择运算符(.)与对象名或对象引用组合,用于访问对象成员。箭头成员选择运算符(->)与对象指针组合,用于访问对象成员。

图 6.4 的程序用简单的 Count,类和 public 数据成员x(int 类型)以及 public 成员函数print演示如何用成员选择运算符访问类成员。程序实例化三个Count类型的变量--counter、counterRef(Count 对象的引用)和 counterPtr(Count 对象的指针)。变量 counterRef 定义为引用 Counter,变量 countcrPtr 定义为指向 counter。注意,这里将数据成员 x 设置为 public,只是为了演示 public 成员利用句柄(如名称、引用或指针)即可访问。前面曾介绍过,数据通常指定为 private,第9章 继承 中将介绍有时可以将数据指定为 protected。

1 // Fig. 6.4: fig06_04.cpp
2 // Demonstrating the class member access operators . and ->
3 //
4 // CAUTION: IN FUTURE EXAMPLES WE AVOID PUBLIC DATA!
5 #include <iostream.h>
6
7 // Simple class Count
8 class Count {
9 public:
10 int x;
11 void print() { cout << x << endl; }
12 };
13
14 int main()
15 {
16 Count counter, // create counter object
17 *counterPtr = &counter, // pointer to counter
18 &counterRef = counter; // reference to counter
19
20 cout << "Assign 7 to x and print using the object's name: ";
21 counter.x = 7; // assign 7 to data member x
22 counter.print(); // call member function print
23
24 cout << "Assign 8 to x and print using a reference: ";
25 counterRef.x = 8; // assign 8 to data member x
26 counterRef.print(); // call member ~unction print
27
28 cout << "Assign 10 to x and print using a pointer: ";
29 counterPtr->x = 10; // assign 10 to data member ~
30 counterPtr->print(); // call member function print
31 return 0;
32 }

输出结果:

Assign 7 to x and print using the object's name: 7
Assign 8 to x and print using a reference: 8
Assign 10 to x and pring using a pointer: 10

图 6.4 通过各种句柄访问对象的数据成员和成员函数