CPP实训4qR.docx

上传人:小飞机 文档编号:3154881 上传时间:2023-03-11 格式:DOCX 页数:14 大小:41.60KB
返回 下载 相关 举报
CPP实训4qR.docx_第1页
第1页 / 共14页
CPP实训4qR.docx_第2页
第2页 / 共14页
CPP实训4qR.docx_第3页
第3页 / 共14页
CPP实训4qR.docx_第4页
第4页 / 共14页
CPP实训4qR.docx_第5页
第5页 / 共14页
亲,该文档总共14页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《CPP实训4qR.docx》由会员分享,可在线阅读,更多相关《CPP实训4qR.docx(14页珍藏版)》请在三一办公上搜索。

1、CPP实训4qR第4章 面向对象基本概念与类实训 类(class)是用户定义的一种新的数据类型,本章将通过做习题和上机实验,学会怎样定义简单的类。 4.1 典型习题解答 解释类和对象有什么区别? 对象是描述客观事物的一个实体,它是构成信息系统的一个基本单位。对象由对象名、一组属性和一组操作构成,属性由数据表示,操作由函数实现。类实质上是定义了一种对象类型,它描述了属于该类型的所有对象的属性和操作。对象是类的实例。 写出类定义的语法结构。 class private: protected: public: ; 类的定义包括了4部分: 关键字class和类名,类名是程序员为类起的名字,可以用除关键

2、字以外的任何字符串表示; 左花括号; 声明数据和函数,数据就是用类型说明C+变量,函数就是一般的C+函数; 右花括号和分号;。 C+关键字private和public有什么作用? 公有成员用public关键字声明,它定义了类的外部接口。私有成员用private关键字声明,它定义了类的内部使用的数据和函数。 公有成员和私有成员有什么区别? 只有公有成员才能被用户程序直接访问,私有成员只能被自己所属类的成员函数访问。 说明类A的功能: class A private: int x,y; public: void ask1(int a=0, int b=0); int ask2; void ask3

3、; ; void A:ask1(int a, int b) x=a; y=b; int A:ask2 if (xy) return x; else return y; void A:ask3 cout”x=”x”ty=”yendl; 定义了一个类,类名为A,类A中有2个整型数据成员,它们都有私有数据;类A中有3个公有函数:ask1(int a=0, int b=0)、ask2和ask3,其中ask1(int a=0, int b=0)实现将a的值赋给x,b的值赋给y,若参数b,或参数a、b空缺时,其默认值为0;ask2是找出私有数据x、y中最大值,将这个最大值作为这个函数的返回结果;ask3实

4、现输出x和y。 说明类B的功能: class B private: int x,y; public: void ask1(int, int b=0); void ask2; void ask3; ; void B:ask1(int a, int b) x=b; y=a; void B:ask2 int z; if (xy) z=x; x=y; y=z; void B:ask3 cout”x=”x”ty=”yendl; 定义了一个类,类名为B,类B中有2个整型数据成员x和y,它们都有私有数据;类B中有3个公有函数:ask1(int a, int b=0)、ask2和ask3,其中ask1(int

5、 a, int b=0)实现将a的值赋给y,b的值赋给x,若参数b空缺时,b的默认值为0;ask2是交换私有数据x、y中的值;ask3实现输出x和y。 说明类C的功能: class C private: int x,y; public: void ask(int, int); void ask(int); void ask; void C:ask(int a, int b) x=a; y=b; void C:ask(int a) x=a; void C:ask cout”x=”x”ty=”yendl; 定义了一个类,类名为C,类C中有2个整型数据成员x和y,它们都有私有数据;类C中有3个重载的

6、公有函数:ask(int ,int)、ask(int)和ask,其中ask(int a, int b)实现将a的值赋给x,b的值赋给y;ask(int a)是将a的值赋给x;ask实现输出x和y。 说明类D的功能: class D void D:ask(int a) x=a; void D:ask(float b) y=b; void D:ask cout”x=”x”ty=”yendl; 定义了一个类,类名为D,类D中有2个数据成员x和y,它们都有私有数据,x为整型,y为实型;类D中有3个重载的公有函数:ask(int a)、ask(float b)和ask,其中ask(int a)实现将a的

7、值赋给x;ask(float b) 实现将b的值赋给y;ask实现输出x和y。 设计一个表示猫的类,包括猫的颜色、体重、年龄等数据,具有设置猫的颜色,修改和显示猫的体重、年龄等操作。 设计猫类的类名为Cat,猫类Cat有3个数据成员,颜色用字符串color7,可以存放3个汉字,体重用实型数weight表示,年龄用整型数age表示,为了数据的安全性,Cat的3个数据成员全部为私有的。对猫的属性数据的设置和修改PutColor为设置和修改颜色,PutWeight为设置和修改体重,PutAge为设置和修改年龄,它们都设置为公有函数,还要有一个1次设置3个参数的函数SetCat。设计函数Display

8、输出猫的信息。 表示猫的类设计如下: class Cat int age; char color7; float weight; private: int x; float y; public: void ask(int); void ask(float); void ask; public: void SetCat(char *s=”黄”, float w=1, int a=1); void PutColor(char *); void PutWeight(float ); void PutAge(int ); void Display; ; void Cat:SetCat(char *s,

9、 float w, int a) /猫的默认颜色为黄、体重1kg、年龄1岁 age=a; weight=w; strcpy(color,s); void Cat:PutColor(char *s) strcpy(color,s); void Cat:PutWeight(float w) weight=w; void Cat:PutAge(int a) age=a; void Cat:Display cout”n这只猫是一只”color”色的猫,” cout”体重”weight”千克,” cout”年龄”age”岁。”endl; 若猫的颜色是白色,重2.3kg,2岁,Display函数将会显示:

10、 这只猫是一只白色的猫,体重2.3千克,年龄2岁。 设计一个表示学习成绩的类,至少包括三门课程的成绩,可以设置、显示每门课程的成绩,可以计算、显示平均成绩。 表示学习成绩的类简称为成绩类,设计成绩类的类名为Grade,成绩类Grade的数据成员,应该包括学生的学号和姓名,因为可能有重名的学生,所以用学号作为唯一代表一个学生的关键字,假设学号全是9个字符,用字符串Number10表示,姓名最多为4个汉字,用字符串Name9表示, 可以存放4个汉字。假设有3门课,分别为C+程序设计语言,用整型变量Cpp表示;计算机原理,用整型变量Computer表示;数据库,用整型变量DataBase表示。平均成

11、绩用实型变量Average表示。 为了Grade类数据的安全性,数据成员全部为私有的,对成绩类的属性数据用一些函数进行设置和修改,PutNo为设置和修改学号,PutName为设置和修改姓名,PutCpp为设置和修改C+程序设计语言的成绩,PutCom为设置和修改计算机原理的成绩,PutData为设置和修改数据库的成绩,还有一个同时设置所有5个参数的函数SetGrade,它们都设置为公有函数。计算平均成绩的函数为Calc,设计函数Display输出成绩。有时可能要查看某个学生的成绩,所以设计比较学号的函数为ComNo,设计比较姓名的函数为ComName, GetCpp为读取C+程序设计语言的成绩

12、,GetCom为读取计算机原理的成绩,GetData为读取数据库的成绩,设计读取平均成绩的函数为GetAve。计算平均成绩只是在类的内部实现,所以设计为私有函数,其它函数都设计为公有函数。 表示学习成绩的类设计如下: class Grade char Number10; char Name9; int Cpp, Computer, DataBase; float Average; void Calc; public: ; void PutNo(char *); void PutName(char *); void PutCpp(int x=60); void PutCom(int x=60);

13、 void PutData(int x=60); void SetGrade(char *s1=123456789, char *s2=李华, int x=60, int y=60, int z=60); int ComNo(char *); int ComName(char *); int GetCpp; int GetCom; int GetData; float GetAve; void Display; void Grade:PutNo(char *s) strcpy(Number,s); void Grade:PutName(char *s) strcpy(Name,s); Cpp=

14、x; Calc; void Grade:PutCpp(int x) /输入新数据就要计算平均值 void Grade:PutCom(int x) Computer=x; Calc; /输入新数据就要计算平均值 void Grade:PutData(int x) DataBase=x; Calc; /输入新数据就要计算平均值 void Grade:Calc Average=(Cpp+Computer+DataBase)/3; void Grade:SetGrade(char *s1, char *s2,int x, int y, int z) strcpy(Number,s1); strcpy(

15、Name,s2); Cpp=x; Computer=y; DataBase=z; Calc; /输入新数据就要计算平均值 int Grade:ComNo(char *s) return (!strcmp(Number,s); int Grade:ComName(char *s) return (!strcmp(Name,s); int Grade:GetCpp return Cpp; int Grade:GetCom return Computer; int Grade:GetData return DataBase; float Grade:GetAve return Average; vo

16、id Grade:Display cout学号:Numbert; cout姓名:Nameendl; coutC+程序设计语言的成绩:Cppendl; cout计算机原理的成绩:Computerendl; cout数据库的成绩:DataBaseendl; cout平均成绩:Averageendl; 4.2 建造集合类实训 4.2.1 实训题目和要求 设计一个表示整型数据的集合类,可以对集合中的数据进行添加、删除,可以判断一个整数是否在这个集合里,可以求出集合数据的多少,可以判断集合的空和满,空集合就是没有数据元素,满集合是数据元素已经占满给出的存储单元。两个集合可以做交运算,就是将两个集合的公共

17、数据组成一个新的集合。两个集合可以做并运算,就是将两个集合的所有数据组成一个新的集合。 实训目的是通过类实训学会用VC+编写类。 实训要求: (1) 分析集合类的数据属性要求。 (2) 分析集合类的操作属性要求。 (3) 编制集合类的接口定义。 (4) 实现集合类的属性函数。 4.2.2 实训参考步骤 设计一个类,首先为类起一个有意义的名字,用集合的英文单词Set作为类名。 接着分析类的数据成员,要实现整型数据的集合类,必须有存放整型数的地方,最方便的是定义一个整型数组,数组名为IntArrayN,最多可以存放N个整数,还要定义一个整型数Last表示已经存放的数据元素的个数。有趣的是下标小于L

18、ast的地方已经存储了数据,Last正好是可以存放新数据的第一个空位置,如图4.1所示。这里N要设计为常数。 IntArrayN 下标 0 36 1 148 57 69 72 81 Last N-1 图4.1 Set类中的数组结构 添加新的数据Append,只要数组没有放满,就直接放到Last位置,再将Last加1。 删除数据Delete,如果要删除图4.1的最后一个81,只要将Last减1就行了,说明原来存放81的位置空了,可以再存放其它数据了,在C+中没有数据的物理删除,只是表明空或非空。如果要删除中间的数据,就把最后一个数据存入要删除数据的位置,然后将Last减1。若要删除57得到结果如

19、图4.2所示。 判断一个整数是否在这个集合中IsInSet,由整数与集合中的元素进行逐个比较来实现。 集合空Empty时,Last=0;集合满Full时,Last=N。 两个集合的交运算Intersect,是将两个集合的公共数据组成一个新的集合。 两个集合的并运算Union,是将两个集合的所有数据组成一个新的集合。 Set类还要有一个初始化函数Init,给Last赋初值,就是Last=0。 IntArrayN 下标 0 36 1 148 81 69 72 Last N-1 图4.2 图4.1删除57后Set类中的数组结构 下面实现Set类:先定义常量N。 /先定义常量N const int N

20、=1024; /定义类Set class Set int IntArrayN; int Last; /假设最多存放1024个元素 public: ; void Init; int Append(int); int Delete(int); int Member(int); int Empty; int Full; void Intersect(Set); void Union(Set); void Display; void Set:Init Last=0; int Set:Empty /判别集合是否空 if (Last=0) return 1; return 0; int Set:Full

21、/判别集合是否满 if (Last=N) return 1; return 0; /判别整数x是否在集合里 int Set:Member(int x) int i; for (i=0;iLast;i+) if (IntArrayi=x) return 1; return 0; /向集合中添加整数x int Set:Append(int x) if (Full) return 0; int i; for (i=0;iLast;i+) if (Member(x) return 1; /集合中已经有x IntArrayLast=x; Last+; return 1; /插入x /删除集合中的整数x

22、int Set:Delete(int x) int i; for (i=0;iLast;i+) if (IntArrayi=x) break; if (iLast)&(IntArrayi=x) IntArrayi=IntArrayLast-1; Last-; return 1; return 0; /求2个集合的交集 void Set:Intersect(Set s) int i,j; for (i=0;iLast;i+) for (j=0;js.Last;j+) if (IntArrayi=s.IntArrayj) break; if (js.Last)&(IntArrayi=s.IntAr

23、rayj) continue; Delete(IntArrayi); i-; void Set:Union(Set s) int i; for (i=0;is.Last;i+) /求2个集合的并集 Append(s.IntArrayi); void Set:Display int i; for (i=0;iLast;i+) coutIntArrayit; if (i+1)%5=0) coutendl; /显示集合中的所有元素 cout=Last表示没有找到,返回0。 Intersect(Set s) 函数实现求2个集合的交集,一个是当前的集合,一个是集合s。 “for (j=0;js.Last;j+) if (IntArrayi=s.IntArrayj) break”语句对当前集合的元素IntArrayi查找在s集合中是否有相同的元素;if语句判别若当前集合的元素IntArrayi与s集合中的元素有相同的,则不做任何操作;否则,删除当前集合的IntArrayi元素,并且总元素数减1。 Union(Set s) 函数实现求2个集合的并集,一个是当前的集合,一个是集合s。 for循环语句将s集合中的每个元素依次插入当前集合中。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号