C语言类的定义
1、类的定义
1.1、类的定义
类(class)是用户自定义的数据类型。如果程序中要使用类类型(class type)对象,就必须根据实际需要定义,或者使用已设计好的类。
C++定义一个类,其方法于定义一个结构体类型是相似的,一般形式为:
一个类的定义有以下三个特点:
1)每个类可以没有成员,也可以有多个成员;
2)类成员可以是数据,也可以是函数;
3)所有成员都必须在类的内部声明,一旦类定义完成后,就没有任何其他方式可以增加成员了。
1.2、类数据成员定义
类定义是必须给出数据成员(data member)的数据类型声明,其一般形式为:
此外每个类还可以包含成员函数,在该类的定义中能够访问该类自身的所有成员。
面向对象的程序设计一般将数据隐蔽起来,外部不能直接访问,而把成员函数作为外界的接口,通过成员函数访问数据。即数据成员是属性,成员函数是方法,通过方法存取属性。
1.3、类成员函数定义
如果类中有成员函数,则声明成员函数是必需的,定义成员函数是可选的,因此,类的成员函数有两种形式:
1)在类中(声明中)定义成员函数,形式如下:
2)在类外定义成员函数,形式如下:
例:成员函数的定义
1.4、类的作用域
类的作用域和其他变量一样,分为全局和局部。
类定义一般放在程序的文件开头,或者放到头文件中被程序文件包含,此时类的作用域时全局的。在全局作用域内,该定义处处可见,因此同作用域内的所有函数都可以使用它。
类定义也可以放在函数内部或者局部作用域中,此时类的定义是局部的。如果函数内部有同名的类定义,则全局声明在该函数内部是无效的,有效的是局部定义的类。
C++规定,在局部作用域中声明的类,成员函数必须是函数定义的形式,而不是原型声明的形式,即定义局部类就要在局部作用域内定义类的所有内容。但是一般类是为整个程序服务的,因此很少有将类放到局部作用域中去。
1.5、类的存储空间分配
类定义向编译器定义了一种新的数据类型,该数据类型有不同类型的数据成员和成员函数。尽管数据成员类似变量的定义,但由于类声明时并不会产生该成员的实体,即系统不会为实体数据成员为空的类分配空间。系统只会对具有实体对象的类分配空间。
2、类的成员的访问控制
对类成员的访问,来自两个访问源:类成员和类用户。
类成员指类本身的成员;类用户指类外部的使用者,包括全局函数,另一个类的成员函数等。
无论数据成员还是函数成员,类的每个成员都有访问控制属性,有以下三种访问标号说明:public(公有的)、private(私有的)、protected(保护的)
一、共有成员public:
公有成员用public标号声明,类成员和类用户都可以访问公有成员,但是来自类外部的类用户必须通过公有成员来访问。显然,public实现了类的外部接口。
二、私有成员private:
私有成员用private标号声明,只有类成员可以访问私有成员,类用户不允许访问私有成员。显然,private实现了私有成员的隐蔽。
三、保护成员protected:
保护成员用protected标号声明,在不考虑继承的情况下,protected的性质和private性质一样,但是保护成员可以被派生类成员访问,而私有成员不能被派生类成员访问。
成员访问控制时C++的类和结构体的又一个重要特性,加上访问标识符,类定义的一般形式为:
如果没有声明访问控制属性,类所有成员默认为private,即私有的。(结构体默认为public)
例如: