《C++学习第7章类和对象03zhang1.已阅》由会员分享,可在线阅读,更多相关《C++学习第7章类和对象03zhang1.已阅(152页珍藏版)》请在金锄头文库上搜索。
1、高级语言程序设计C+,南开大学信息技术科学学院,第7章 类和对象,Database & Information System Lab,2,第7章 类和对象,Database & Information System Lab,3,面向对象的程序设计思想,结构化程序设计思想 以函数为核心 程序主体为函数定义的集合 以功能为研究对象 面向对象程序设计思想 以类为核心 程序主体为类定义的集合 以整体为研究对象,Database & Information System Lab,4,面向对象的程序设计思想,什么是类 类是对现实世界中客观事物的抽象,通常将众多的具有相同属性的事物归纳、划分成为某个类。面向
2、对象方法中的类,是对具有相同属性和行为的同一类对象的抽象描述,其内部包括属性(本类的数据成员)和行为(本类的成员函数)两个主要部分,即是说,类以数据为中心,把相关的一批函数组成为一体,Database & Information System Lab,5,面向对象的程序设计思想,什么是对象 类的实例 如果将类看做数据类型,那么该类的对象就是相应类型的变量 如果将类看做某类事物的概括,那么该类的对象是类的实例,Database & Information System Lab,6,面向对象的程序设计思想,面向对象的特点 封装性 将同类事物的共同属性封装为一类 继承性 从其它事物中继承某些属性 多
3、态性 函数、运算符重载 虚函数,Database & Information System Lab,7,面向对象的程序设计思想,类的主要组成 类的成员变量 类的成员函数 类的确定 抽象事物的共同特征 将事物的共同特征最为类的成员(以变量形式描述) 将对事物共同特征的处理设计为成员函数,Database & Information System Lab,8,面向对象的程序设计思想,Database & Information System Lab,9,面向对象程序设计过程 【例7.1】抽象公共属性 花色 点数,面向对象的程序设计思想,面向对象程序设计过程 【例7.1】Poker类成员变量的设计
4、class Poker int number;/点数 int suits;/花色 ;,Database & Information System Lab,10,面向对象的程序设计思想,面向对象程序设计过程 【例7.1】Poker类成员函数的设计 ? 考虑一张扑克牌可能进行的操作,对花色或者点数的操作 可以设计其它的类,使用Poker类的对象 拖拉机 拱猪 梭哈 ,Database & Information System Lab,11,面向对象的程序设计思想,面向对象程序设计过程 描述客观事物必须用不同的数据类型来描述不同的方面。 【例7.2】描述商品 商品名称(用字符串描述),该商品数量(用
5、整型数描述),该商品单价(用浮点数描述),该商品总价(用浮点数描述)。 使用属于三种不同数据类型的四个数据成员(data member)来描述一种商品 商品类的函数成员需根据具体的需求进行设计,如商品出库、入库等等,Database & Information System Lab,12,面向对象的程序设计思想,面向对象程序设计过程 【例7.2】商品类的设计 class Product char * name; int count; float price; float total_price; public: /成员函数若干 ,Database & Information System La
6、b,13,面向对象的程序设计思想,面向对象程序的结构 类定义文件(以h为扩展名) 类的成员函数定义文件(以cpp为扩展名) 主函数文件(以cpp为扩展名),Database & Information System Lab,14,第7章 类和对象,Database & Information System Lab,15,类的定义和对象的说明,类的定义(理解为定义一种新的数据类型) class private: ; public: ; ; ;/注意类定义后面带分号,Database & Information System Lab,16,类的定义和对象的说明,类的定义 类名 标识符,表示类的名称
7、,理解为新的数据类型名,可以像int等数据类型一样说明变量(即类对象) 成员 按功能划分 成员变量 成员函数 按访问权限划分 公有成员(由public标识) 私有成员(由private标识,为默认权限) 保护成员(由protected标识),Database & Information System Lab,17,类的定义和对象的说明,类的定义 成员变量 类的数据成员 代表该类对象含有的数据(描述属性) 成员函数 即函数成员,对该类对象所含数据进行操作的方法 既可放于类定义的花括号之中,也可按类外定义方式放于之外(但要求类体内必须有其函数原型,且类定义外函数说明的前面必须用“:”来限定) 凡在
8、类体中定义的函数成员均隐含为内联函数,Database & Information System Lab,18,类的定义和对象的说明,类的定义 私有成员 以关键字private说明 成员不能从外部进行访问 所谓类的外部是指类的定义之外以及类的成员函数定义之外 公有成员 以关键字public说明 成员能从外部进行访问,Database & Information System Lab,19,类的定义和对象的说明,类的定义 友元 以关键字friend说明 不是本类的成员,被说明为本类友元的那些函数享有本类成员函数的“权利”,即可以访问本类的私有成员 保护成员 以关键字protected说明 类继承
9、涉及到的概念 派生类对基类成员的访问权限,Database & Information System Lab,20,类的定义和对象的说明,类的定义 类定义的代码组织 private、public以及friend“说明段”的顺序可以任意;每一类型的“说明段”均可以出现多次,或者一次也不出现。 若紧随左花括号后的第一个“说明段”为private的话,则该private关键字可以省略,Database & Information System Lab,21,类的定义和对象的说明,类的定义 每种说明符(private、public、protected,亦称访问限定符)可在类体中使用多次。 访问限定符的
10、作用域是从该说明符出现开始到下一个说明符之前或类体结束之前结束。 如果在类体起始点无访问说明符,系统默认定义为私有(private)。 访问限定符private(私有的)和protected(保护的)体现了类具有封装性(Encapsulation),Database & Information System Lab,22,类的定义和对象的说明,类的定义 【例7.3】设计一个类,描述梭哈游戏(ShowHand) 5张扑克牌 判断各种牌型 同花顺 顺 同花 full house ,Database & Information System Lab,23,类的定义和对象的说明,类的定义 【例7.3】
11、 ShowHand类成员函数的设计 straight flush 同花顺 straight 顺子 four of a kind 四张相同的牌 full house 三张相同和二张相同的牌 three of a kind 三张相同的牌 two pairs 双对子 换牌,Database & Information System Lab,24,类的定义和对象的说明,类的定义 【例7.3】 ShowHand类的定义 class ShowHand Poker pokers5;/成员变量即数据成员 public: bool Straight_Flush(); bool Four_of_a_Kind();
12、 bool Full_House(); bool Straight(); bool Flush(); bool Three_of_a_Kind(); bool Two_Pairs(); /根据实际需要,设计其它成员 ,Database & Information System Lab,25,类的定义和对象的说明,类的定义 【例7.3】ShowHand类的成员函数之一:Flush bool ShowHand:Flush() int i=1; while(i5) if(strcmp(pokersi-1.suit,pokersi.suit) return false; i+; return true
13、; ,Database & Information System Lab,26,类的定义和对象的说明,类的定义 成员函数定义 类内定义 直接在类的定义内,将成员函数以“函数定义”的方式进行说明 函数定义后,可以在“”后加分号,也可以不加分号 类外定义 在类的定义内,将成员函数以“函数原型”的方式进行说明 在类的定义外,用“限定运算符:”对成员函数进行定义,Database & Information System Lab,27,类的定义和对象的说明,类的定义 成员函数定义 在类的定义外,定义成员函数的格式 :() 【例7.3】判断“顺牌”的函数Straight在类定义外的定义为: bool S
14、howHand:Straight() /函数体 ,Database & Information System Lab,28,类的定义和对象的说明,类的定义 类把数据(事物的属性)和函数(事物的行为操作)封装为一个整体。 成员函数可以直接使用类定义中的任何成员,可以处理数据成员,也可调用函数成员。 类是一种数据类型,定义类时系统不为类分配存储空间,所以不能对类的数据成员初始化。类中的任何数据成员也不能使用关键字extern、auto或register限定其存储类型。,Database & Information System Lab,29,类的定义和对象的说明,类的对象 类可以看做用户自定义的数
15、据类型 类的对象即为该类型的变量,当然,还可以说明该类型的 数组 指针 引用 对象是类的实例(instance)。定义一种数据类型只是告诉编译系统该数据类型的构造,并没有分配内存。类只是一个样板,以此样板可以在内存中开辟出同样结构的实例对象。,Database & Information System Lab,30,类的定义和对象的说明,类的对象 【例7.3】ShowHand类的成员pokersi为一个Poker类的对象 每个Poker类对象表示一张扑克牌 花色不同 点数不同 不能认为Poker类是一张扑克牌 每个ShowHand类的对象表示一副牌 每副牌由5张牌组成,Database & I
16、nformation System Lab,31,类的定义和对象的说明,对象的说明 普通对象(变量) ,.; 对象数组(数组) 数组大小; 对象指针(指针) *; 对象引用(引用) ,Database & Information System Lab,32,类的定义和对象的说明,对象的说明 【例如】各种类对象的说明示例 一张扑克牌 Poker poker; 一副扑克牌 Poker pokers54; 指向一张扑克牌的指针 Poker *ptr_poker; 一张扑克牌的引用 Poker ,Database & Information System Lab,33,类的定义和对象的说明,对象的说明 除上述提到的对象数组、指向对象的指针等概念及用法外,对象还可进行如下一些操作与使用: 同类型的对象间可以相互赋值。 对象可作为函数参数(如,对象作形参,对象指针作函数参数等)。 函数的返回值可以是对象(或指向对象的指针)。 可以在一个类中说明具有类类型的成员,可以是该类