2022年C类的定义与使用 .pdf
C+ 中类及类的定义在面向对象的程序设计中,有经常接触类、对象等专业名词;到底什么是类、 什么是对象呢?在程序又是怎样运用呢?类是面向对象程序设计的核心, 它实际是一种新的数据类型,也是实现抽象类型的工具, 因为类是通过抽象数据类型的方法来实现的一种数据类型。类是对某一类对象的抽象; 而对象是某一种类的实例,因此,类和对象是密切相关的。没有脱离对象的类,也没有不依赖于类的对象。什么是类类是一种复杂的数据类型, 它是将不同类型的数据和与这些数据相关的操作封装在一起的集合体。 这有点像 C语言中的结构, 唯一不同的就是结构没有定义所说的“数据相关的操作”, “数据相关的操作” 就是我们平常经常看到的 “方法” ,因此,类具有更高的抽象性,类中的数据具有隐藏性,类还具有封装性。类的结构 (也即类的组成 )是用来确定一类对象的行为的,而这些行为是通过类的内部数据结构和相关的操作来确定的。这些行为是通过一种操作接口来描述的(也即平时我们所看到的类的成员函数), 使用者只关心的是接口的功能(也就是我们只关心类的各个成员函数的功能),对它是如何实现的并不感兴趣。而操作接口又被称为这类对象向其他对象所提供的服务。类的定义格式类的定义格式一般地分为说明部分和实现部分。说明部分是用来说明该类中的成员,包含数据成员的说明和成员函数的说明。成员函数是用来对数据成员进行操作的,又称为“方法” 。实现部分是用来对成员函数的定义。概括说来,说明部分将告诉使用者“干什么” ,而实现部分是告诉使用者“怎么干” 。类的一般定义格式如下: class public: private: ; 下面简单地对上面的格式进行说明:class是定义类的关键字, 是种标识符,通常用 T 字母开始的字符串作为类名。一对花括号内是类的说明部分(包括前面的类头 )说明该类的成员。类的成员包含数据成员和成员函数两部分。从访问权限上来分,类的成员又分为:公有的(public)、私有的 (private)和保护的(protected)三类。公有的成员用public 来说明,公有部分往往是一些操作(即成员函数),它是提供给用户的接口功能。这部分成员可以在程序中引用。私有的成员用 private 来说明,私有部分通常是一些数据成员,这些成员是用来描述该类中的对象的属性的, 用户是无法访问它们的, 只有成员函数或经特殊说明的函数才可以引用它们,它们是被用来隐藏的部分。保护类(protected)将在以后介绍。关键字 public,private 和 protected 被称为访问权限修饰符或访问控制修饰符。它们在类体内 (即一对花括号内 )出现的先后顺序无关,并且允许多次出现,用它们来说明类成员的访问权限。其中,是类定义中的实现部分, 这部分包含所有在类体内说明的函数的定义。如果一个成员函数的类体内定义了,实现部分将不出现。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 4 页 - - - - - - - - - 如果所有的成员函数都在类体内定义,则实现部分可以省略。下面给出一个日期类定义的例子: class TDate public: void SetDate(int y, int m, int d); int IsLeapYear(); void Print(); private: int year, month, day; ; /类的实现部分 void TDate:SetDate(int y, int m, int d) year = y; month = m; day = d; int TDate:IsLeapYear() return(year%4=0 & year%100!=0) (year%400=0); void TDate:Print(); coutyear.month.dayendl; 这里出现的作用域运算符:是用来标识某个成员函数是属于哪个类的。该类的定义还可以如下所示: class TDate public: void SetDate(int y, int m, int d) year=y; month=m; day=d; int IsLeapYear() return(year%4=0 & year%100!=0) (year%400=0); void Print() coutyear.month.day 在 c+ 中为取成员运算符对象指针 /结构指针 -成员变量 /成员函数该运算符的作用, 取得指针所指向的类对象或结构变量的成员变量的值,或者调用其成员函数。例如: int *p; struct student char name20; int num; stu; stu=xiaoming,90; p=&stu; coutstu.namestu.numendl; coutnamenumendl; 这两个 cout 的效果是一样的名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 4 页 - - - - - - - - -