1.2 类和对象
类和对象是C++(www.cppentry.com)语言中面向对象程序设计的最基本的概念。C语言和其他传统的过程化语言没有类与对象的概念,用这些语言编写的程序通常采用函数或过程来描述对数据结构类型的操作,但又将函数与数据分离,所写的程序完全依赖于数据的结构和形式。而C++(www.cppentry.com)语言通过类将数据结构和与之相关的操作封装在一起,形成一个整体,具有良好的外部接口,可以防止对数据结构内部未经授权的访问,从而提高了程序模块之间的独立性。
1.2.1 类的定义
类的定义一般分为声明部分和实现部分。声明部分用来声明该类中的成员,包含数据成员的声明和成员函数的声明。成员函数用来对数据成员进行操作,又称为"方法"。实现部分用来对成员函数做定义。概括地说,声明部分将告诉使用者"干什么",而实现部分将告诉使用者"怎么干"。
C++(www.cppentry.com)类的一般定义格式如下:
- class 类名
- {
- public:
- 公有成员函数或数据成员的说明;
- private:
- 私有成员函数或数据成员的说明;
- };
-
-
- 各个成员函数的实现
-
其中,class是定义类的关键字,class的后面是用户定义的类名,通常用大写字母C开始的标识符作为类名,C用来表示类(Class),与对象、函数及其他数据类型相区别。类中的数据和函数是类的成员,分别称为数据成员和函数成员。
由于数据成员是用变量来描述的,因此数据成员又可称为"成员变量"。
类中关键字public和private声明了类中的成员与程序其他部分的关系。public类成员是公有的,能被外面的程序访问;而private类成员是私有的,只能由类中的函数所使用,不能被外面的程序访问。
"各个成员函数的实现"是类定义中的实现部分,这部分包含所有在类体中声明的函数的定义(即对成员函数的实现)。如果一个成员函数是在类体中定义,则实现部分中将不出现。如果所有的成员函数都在类体中定义,则实现部分可以省略。需要说明的是,当类的成员函数的函数体在类的外部定义时,必须由作用域运算符"::"来通知编译系统该函数所属的类。
例如,下面定义的CStuScore类包含了SetScore和GetAverage成员函数,分别用来输入成绩和返回计算后的平均成绩:
- class CStuScore
- {
- public:
- char strName[12];
- char strStuNO[9];
- void SetScore(float s0, float s1, float s2)
- {
- fScore[0]=s0; fScore[1]=s1; fScore[2]=s2;
- }
- float GetAverage();
- private:
- float fScore[3];
- };
-
- float CStuScore::GetAverage()
- {
- return (float)((fScore[0]+fScore[1]+fScore[2])/3.0);
- }
在CStuScore类中,成员函数SetScore是在类体中定义的,而成员函数GetAverage是在类的外部定义的,应注意两者的区别。
定义类时还应注意以下几个方面:
在public或private后面定义的所有成员都是公有或私有的,直到下一个public或private出现为止。若成员前面没有类似public或private这样的修饰符,则所定义的成员是private(私有)的,这是类的默认设置。
关键字public和private可以在类中出现多次,且前后的顺序没有要求。但最好先声明公有成员,后声明私有成员,因为public成员是用户最关心的。
除了public和private外,关键字protected(保护)也可修饰成员的类型,它与private基本相似,但在类的继承时有所不同。
数据成员的类型可以是任意的,包含整型、浮点型、字符型、数组、指针等,也可以是另一个类的对象,但不允许对所定义的成员变量进行初始化。
尽量将类单独存放在一个文件中,或将类的声明放在.h 文件中,而将成员函数的实现放在与.h文件同名的.cpp文件中。以后将会看到,在Visual C++(www.cppentry.com) 6.0为用户创建的应用程序框架中,都是将各个类组织成.h头文件和同名的.cpp实现文件。
【责任编辑:
云霞 TEL:(010)68476606】