13.1.1 类的声明
在C++(www.cppentry.com)中,新的数据类型可以用Class来构造。类的声明语法与C语言中的Struct声明类似,只是Class还包含函数声明。
【示例13-1】 定义point类。
- class point
- {
- int x,y;
- public:
- void setpoint(int,int);
- }
分析:该示例声明了一个名为point的类。它包含了数据为x、y,还包含了一个名为setpoint()的函数。函数被public关键字说明为公有的,数据没有被说明,但默认也为公有的。
下面再以一个更完整的示例进一步来说明类的声明方法。
【示例13-2】 声明一个简单的student学生类。
- class student
- {
- private:
- int id;
- char* name;
- float chinese,english,math;
- public:
- student();
- student(int,char *,float,float,float);
-
- ~student();
- void setid(int);
- void setname(char *);
- void setscore(float,float,float);
- float sum();
- float average();
- }
分析:在这个类中,共有4个数据,分别是id、name、chinese、english、math,用于记录学生的学号、姓名和三门课程的成绩。它们被关键字private说明为私有的,即这些数据只能被类的成员函数和友元函数(参见13.1.7节)访问。
类中声明了8个函数,用关键字public说明为公有的。第1个函数是构造函数,负责构造类对象,在定义对象时由系统自动调用。第2个函数也是构造函数,但是与第1个的形式不一样,它带了参数。这属于重载现象,本书后面的章节中有专门讲解。构造函数的名字必须和类的名字相同。
第3个函数是析构函数,标志是前面有一个'~'符。该函数在销毁对象时自动被调用,负责对象销毁后的善后工作。析构函数必须是类的名称前加'~'符。第4、5、6这3个函数负责私有属性的访问。因为属性是私有,所以只有通过student类提供的这3个函数才能从类的外部访问到它们。最后2个函数负责具体的计算工作,分别计算求总分和求平均分。
除了该示例中的限定符public和private外,还有一个限定符是protected。它们都用来支持信息的隐藏机制,将类的成员分成了3类:公有成员、私有成员和保护成员。
公有成员(包括类的属性和方法):提供了类的外部界面,它允许类的使用者来访问它。
私有成员(包括类的属性和方法):只能被该类的成员函数访问,也就是说只有类本身能够访问它,任何类以外的函数对私有成员的访问都是非法的。当私有成员处于类声明中的第一部分时,此关键字可以省略。
保护成员:对于派生类来说,保护成员就像是公有成员,可以任意访问。但对于程序的其他部分来说,就像是私有成员,不允许被访问。
假设程序中有一个函数,它直接访问并操作某类的数据成员,一旦该类的数据成员被修改或者被删除,那么这个函数很可能需要被重写。如果程序中存在大量这样的函数,就会增加软件的开发和维护成本。此时,可以通过访问限定符将类的数据成员定义为私有成员,然后在类中定义一个公有的成员函数,访问并操作类中的私有属性。这样程序中的函数无法直接访问私有的数据,只有通过公有成员函数才能访问并且操作它们。
例如,为了能够访问student类中的语文成绩,需要增加一个公有的成员方法getchinese()。如果类中的数据成员被修改,那么只需要修改相应的公有成员方法,而不必改动程序中的函数。
【示例13-3】 增加成员chinese的访问函数。
- class student
- {
- private:
- float chinese;
- public:
- float getchinese()
- {
- return chinese
- }
- }
分析:该类声明了一个私有数据,用来记录语文成绩。由于是私有的,所以不能从外部访问,必须通过公有函数getchinese()来访问。
【责任编辑:
云霞 TEL:(010)68476606】