类和对象 类是具有相同属性、相同方法的对象集合,类是一种既包含数据又包含函数的抽象数据类型。 对象是类进行实体化后的产物,是一个实体。 C++ 先声明一个类类型,然后再用它去定义若干个同类型的对象。对象就是类类型的一个变量。可以这样说,类是对象模板,是用来定义对象的一种抽象类型。类是抽象的,不占用内存,而对象是具体的,占用存储空间。 01、声明类类型 类是用户自己指定的类型。如程序中要用到类类型,必须根据需要进行声明,或使用别人已设计好的类。C++ 标准本身并不提供现成的类名称、结构、内容。 C++ 声明一个类的类型和声明一个结构体类型是相似的。以下代码为声明一个结构体类型方法: struct Student // 声明一个名为 Student 的结构体 以下代码为声明一个类: class Student // 以 class 开头 事实上,也可以用 struct 关键字声明一个类。这样的类,所有成员默认权限都是 public (除非特别写上权限);而用 class 声明的类,所有成员的默认权限都是 private。 可以看到声明类的方法,是由声明结构体类型的方法发展而来,类就是对象类型。实际上,类是一种广义的数据类型。类这种数据类型中的数据既包含数据,也包含操作数据的函数。 不能把类中的全部成员与外界隔离,一般是把数据隐蔽起来,而把成员函数作为对外界的接口。可以将上面类的声明改为 class Student // 以 class 开头 如在类定义中既不指定 private,也不指定 public,则系统就默认为是私有的。归纳以上对类类型的声明,可得到其一般形式如下: class private 和 public 称为成员访问限定符 (member access specifier)。除 private 和 public 外,还有一种成员访问限定符 protected (受保护的);用 protected 声明的成员称为受保护成员,其不能被类外访问 (这点与私有成员类似),但可被派生类成员函数访问。 在声明类类型时,声明为 private 的成员和声明为 public 的成员的次序任意,既可以先出现 private 部分,也可以先出现 public 部分。 在一个类中,关键字 private 和 public 可以分别出现多次。每个部分的有效范围,是到出现另一个访问限定符或类体结束时 (最后一个右花括号) 为止。为使程序清晰,应养成这样的习惯: 使每一个成员访问类定义体中的限定符只出现一次。 C++ 程序多数先写 public 部分,把 private 部分放在类体的后部。这样可以使用户将注意力集中在能被外界调用的成员上,使阅读者的思路更清晰一些。 在 C++ 程序中,经常可以看到类。为方便起见,常用 C++ 编译系统往往会向用户提供类库 (但不属于 C++ 语言组成部分),内装常用基本类,供用户使用。不少用户也把自己或本单位经常用到的类放在一个专门类库中,需要用到时可直接调用,这样就减少了程序设计的工作量。 02、定义对象 上述程序段中,最后一行用已声明的 Student 类来定义对象,这种方法很容易理解。经过定义后,stud1 和 stud2 就成为了具有 Student 类特征的对象。stud1 和 stud2 这 2 个对象分别包括 Student 类中定义的数据和函数。 定义对象也可使用以下几种方法: 先声明类类型,然后再定义对象 前面用的就是这种方法,如 Student stud1,stud2; // Student 是已经声明的类类型;C++ 声明类类型后,定义对象有两种形式。 1)class 类名 对象名 如: class Student stud1,stud2; 把 class 和 Student 结合起来作为一个类名,用来定义对象。 2)类名 对象名 如: Student stud1,stud2; 直接用类名定义对象。 这两种方法是等效的。第 1 种方法是从 C语言继承下来的,第 2 种方法是 C++ 的特色,显然第 2 种方法更为简捷方便。 在声明类类型的同时定义对象 class Student // 声明类类型 在定义 Student 类的同时,定义 stud1 和 stud2 两个 Student 类对象。 不出现类名,直接定义对象 class // 无类名 在 C++ 中直接定义对象是合法的、允许的,但却很少用,也不提倡用。在实际程序开发中,一般采用以上 3 种方法中的第 1 种方法。在小型程序中或所声明的类只用于本程序时,也可采用第 2 种方法。在定义一个对象时,编译系统会为这个对象分配存储空间,以存放对象中的成员。 类和结构体 C++ 增加了 class 类型后,仍保留了结构体类型 (struct ),且把它的功能也扩展了;C++ 允许用 struct 定义一个类型。可将前面用关键字 class 声明的类类型,改为用关键字 struct: struct Student // 用关键字 struct 来声明一个类类型 为使结构体类型也具有封装特征,C++ 不是简单地继承 C 语言结构体,而是使其具有类的特点,以便于面向对象程序设计。用 struct 声明的结构体类型实际上也就是类。用 struct 声明的类,如果对其成员不作 private 或 public 的声明,系统将默认为 public。 如果想分别指定私有成员和公用成员,则应使用 private 或 public 作显式声明。 而用 class 定义的类,如果不作 private 或 public 声明,系统将其成员默认为 private,在需要时也可以用显式声明改变。如希望成员是公用的,使用 struct 比较方便,如希望部分成员是私有的,宜用 class。 建议尽量使用 class 来建立类,写出完全体现 C++ 风格的程序。 关键字 关键字 keyword 是 C++ 语言保留的标识符,每个关键字都有特殊含义。经过预处理后,关键字从预处理记号 (preprocessing-token) 中区出来,剩下的标识符作为记号 (token),用于声明对象、函数、类型、命名空间等。不能声明与关键字同名的标识符。 各个版本的 ISO C++ 都规定以下划线接大写字母起始的标识符保留给实现。编译器可用这些保留标识符作为扩展关键字,这不保证可移植性。ISO C++ 98 关键字共63 个,此处严格按标准原文排版:
常见错误
|