二级C++重点难点分析:类与对象
时间:2007-07-14 来源:大学生计算机等级考试 打印本文
1.1 类在C++语言中,类是一种用户自定义的复杂数据类型,它是将不同类型的数据和与这些数据相关的操作封装在一起的集合体,是真实世界的事物的抽象。类的结构是用来确定类对象的行为,而这些行为是通过类的内部数据结构和相关的操作来确定的。这些行为是通过一种操作接口来描述的(即平时我们所看到的类的成员函数),使用者关心的是接口的功能(也就是只关心类的各个成员函数的功能),对它是如何实现的并不感兴趣。而操作接口又被称为类对象向其他对象所提供的服务。
1.1.1 考点1:类的定义
类的定义格式一般分为说明部分和实现部分。说明部分是用来说明该类中的成员,其中包含数据成员的说明和成员函数的说明。成员函数是用来对数据成员进行操作的,又称为“方法”。实现部分是对成员函数的定义。概括说来,说明部分将告诉使用者“干什么”,而实现部分是告诉使用者“怎么干”。
类的一般定义格式如下:
// 类的说明部分。
class <类名>
{
public:
<公有成员函数或数据成员的说明>;
private:
<私有数据成员或成员函数的说明>;
protected:
<保护数据成员或成员函数的说明>;
};
// 类的实现部分。
<各个成员函数的实现>
其中,class是定义类的关键字,其后跟类名,类名必须是C++的一个有效标识符。一对花括号“{}”内是类的说明部分(包括前面的类头),说明该类的成员。<各个成员函数的实现> 是类定义中的实现部分,这部分包含所有在类体内说明的函数的实现。如果一个成员函数在类体内定义了(称之为内联函数),实现部分将不出现。如果所有的成员函数都在类体内定义,则实现部分可以省略。
定义类时需要注意以下几点。
① 类的定义必须以分号“;”结束,因为在类定义之后可以接一个对象定义列表。
② 在类中说明的任何成员不能使用extern、auto和register关键字进行修饰。
请看以下类的定义:
class YourClass
{
int id; // 正确。
} // 错误。
class MyClass
{
extern int id; // 错误。
} myObj; // 正确。
1.1.2 考点2:类成员的访问权限
本章节内容来自全国计算机等级考试用书《计算机等级考试考点分析、题解与模拟——二级C++语言》。从访问权限上来分,类的成员分为:公有的(public)、私有的(private)和保护的(protected)三类。公有的成员用public来说明,公有部分往往是一些操作(即成员函数),它提供了该类的接口功能,这部分成员可以在程序中直接访问。私有的成员用private来说明,私有部分通常是一些数据成员,这些成员是用来描述该类中的对象的属性,用户无法直接访问它们,只有本类的成员函数或经特殊说明的函数才可以访问它们。保护类型(protected)与私有类型相类似,其差别在于继承过程中对产生的新类的影响不同。
关键字public、private和protected统称为访问权限修饰符或访问控制修饰符。它们在类体内出现的先后顺序无关,并且允许多次出现。作为一种良好的编码风格,通常是把公有成员放在私有成员之前,以突出该类所提供的服务。此外,如果一个类成员没有访问权限修饰符修饰,该成员默认为私有成员。
例1.1.1 有如下类声明:
class Foo { int bar; };
则Foo类的成员bar是( )。
A.公有数据成员 B.公有成员函数
C.私有数据成员 D.私有成员函数
答案:C
1.1.3 考点3:类与结构
在C++语言中,结构(struct)也能像类(class)一样有数据成员和成员函数。C++语言的结构和类的区别在于:默认情况下,类的成员是私有的(private),而结构的成员是公有的(public)。
1.1.4 考点4:数据成员的定义
定义类的数据成员时,应注意以下几点。
① 在类体内不能对数据初始化操作,数据初始化由构造函数完成。
② 自身类的对象不能作为这个类的数据成员,而自身类的指针或引用则是可以的。
③ 当另一个类的对象作为这个类的数据成员时,如果另一个类的定义在后,则需要提前声明。
请看以下MyClass类数据成员的定义:
class HisClass;
class MyClass
{
private:
int data1; // 正确。
int data2 = 0; // 错误。
MyClass obj1; // 错误。
MyClass& obj2; // 正确。
MyClass* p; // 正确。
HisClass obj3; // 正确。
HerClass obj4; // 错误。
};
1.1.5 考点5:成员函数的定义
类中的成员函数可以有两种定义。
① 将成员函数的实现直接写在类中(称之为内联函数)。
② 在类的定义体中只写出函数的原型说明,而成员函数实现写在类的定义之外,其定义的一般格式为:
<返回值类型> <类名>::<成员函数名>(参数说明)
{
函数体;
}
此处的“::”符号称为作用域运算符,不同的类的成员函数可以具有相同的名字,因此需要用作用域运算符“::”来指明哪个成员函数(数据成员)属于哪个类。成员函数既可以是有参函数,也可以是无参函数。
在类的成员函数中可以直接访问类的数据成员。但是,如果在成员函数中定义了同名的局部变量时,则必须用作用域运算符“::”来指定,以免混乱。
在类定义体中实现的函数都是内联函数。在定义体外实现的函数可以通过在函数说明和定义时分别加上inline关键字来表示该函数是内联的,否则均不属于内联函数。
小技巧:成员函数的实现可以写在类体内,也可以写在类体外。

上一篇:二级C++重点难点分析:函数
下一篇:二级C++重点难点分析:类的继承和派生
相关阅读:
·二级C++重点难点分析:数组、指针与引用 (2007-07-14)·二级C++重点难点分析:函数 (2007-07-14)


