在C++中,一个独立“类”的声明格式一般如下:
class <类名> // 声明部分
{
private:
[<私有型数据和函数>]
public:
[<公有型数据和函数>]
protected:
[<保护型数据和函数>]
};
<各个成员函数的实现> // 实现部分
其中,class是类声明的关键字,class的后面是要声明的类名。类中的数据和函数都是类的成员,分别称为数据成员和成员函数。数据成员用来描述类状态等的属性,由于数据成员常用变量来定义,所以有时又将这样的数据成员称为成员变量。成员函数是用来对数据成员进行操作的,又称为方法。
注意:类体中最后一个花括号后面的分号“;”不能省略。
类中关键字public、private和protected声明了类中的成员与类外之间的关系,称为访问权限。对于public成员来说,它们是公有的,可以在类外访问。对于private成员来说,它们是私有的,不能在类外访问,数据成员只能由类中的函数所使用,成员函数只允许在类中调用。而对于protected成员来说,它们是受保护的,具有半公开性质,可在类中或其子类中访问。
成员函数既可以在类中进行定义,也可先在类中声明函数原型,然后在类外定义,这种定义又称为成员函数的实现。需要说明的是,成员函数在类外实现时,必须用作用域运算符“::”来告知编译系统该函数所属的类。即:
<函数类型> <类名>::<函数名>( <形式参数表> )
例如,下面的类的定义示例代码:
class CStuscore
{
public:
float Average(void); // 求平均成绩:在类中声明
char * getName() // 获取姓名:直接在类中完成
{
return strName;
}
char * getNo() // 获取学号:直接在类中完成
{
return strStuNO;
}
private:
char strName[12]; // 姓名
char strStuNO[9]; // 学号
private:
float fScore[3]; // 三门课程成绩
};
float CStuscore::Average(void) // 在类体外部定义
{
return (float)((fScore[0] + fScore[1] + fScore[2])/3.0);
}
本例中用关键词class声明了名为CStuscore的类。在类的声明中,描述学生的姓名、学号与三门课程成绩的数据strName、strStuNo、fScore用private定义为私有数据成员。这表明数据成员strName、strStuNo、fScore只能在类中使用,而不能在类外使用。 对学生成绩信息进行处理的函数Average、getName和getNo用关键词public声明成公有成员函数,这样就可在外部程序中通过getName和getNo函数分别来获取学生姓名和学号数据,通过Average函数获取学生的平均成绩。可见,类中的私有数据成员只能通过公有接口函数(像getName和getNo函数)来访问,从而保证数据的安全性。
类CStuscore中,成员函数getName和getNo的声明和定义是在类体中同时进行的,而函数Average是在类体中声明,在类体外实现的,注意函数Average实现中函数名前面一定要用域作用符“::”指明该函数所属的类。
习惯上,往往将类的声明和实现分开来编写代码,并将类的声明保存在.h文件中,而将类的实现保存在同名的.cpp文件中,这也是Visual C++的一种规范。