C++学习第7章实验类和对象03章节

上传人:E**** 文档编号:91244743 上传时间:2019-06-26 格式:PPT 页数:51 大小:1.04MB
返回 下载 相关 举报
C++学习第7章实验类和对象03章节_第1页
第1页 / 共51页
C++学习第7章实验类和对象03章节_第2页
第2页 / 共51页
C++学习第7章实验类和对象03章节_第3页
第3页 / 共51页
C++学习第7章实验类和对象03章节_第4页
第4页 / 共51页
C++学习第7章实验类和对象03章节_第5页
第5页 / 共51页
点击查看更多>>
资源描述

《C++学习第7章实验类和对象03章节》由会员分享,可在线阅读,更多相关《C++学习第7章实验类和对象03章节(51页珍藏版)》请在金锄头文库上搜索。

1、高级语言程序设计C+上机实验 类和对象,张海威 南开大学信息技术科学学院,第7章 类和对象,类的定义,1,对象的说明及初始化,2,拷贝构造函数,3,有序单向链表,4,2,Database & Information System Lab,类的定义,如何定义一个类 关键字class 类名 类定义体(类体) 成员变量 参照普通变量说明 一般不进行初始化 成员函数 参照普通函数说明,函数原型或函数定义,Database & Information System Lab,3,类的定义,类成员的访问权限 私有 private 公有 publie 保护 protected 友元 friend,Databa

2、se & Information System Lab,4,类的定义,练习 设计一个圆柱类,能够求出圆柱的底面周长、底面积和体积(示范题1) 设计一个复数类,成员函数实现复数的加法、减法(示范题2) 设计一个时间类(实践题2),Database & Information System Lab,5,作业7.1,定义一个学生类(Student),私有数据成员包括:姓名、性别、年龄、成绩;函数成员包括打印学生的信息(printInfo) 请自定义类的构造函数和析构函数 在主函数中定义学生类的对象数组并初始化 根据学生成绩排序并输出学生的全部信息,Database & Information Sys

3、tem Lab,6,类的定义,设计一个类 共同属性 数据成员(成员变量) 共同行为 成员函数 通常是对数据成员的操作 一般来说,成员变量是私有,成员函数是公有,在类外可以通过调用成员函数,获取成员变量的值或对成员变量进行操作,Database & Information System Lab,7,类的定义,【设计一个足球队类】 成员变量 队名 胜场数 平场数 负场数 成员函数 计算球队积分 打印球队信息,Database & Information System Lab,8,类的定义,【设计一个足球队类】代码: #include #include class SoccerTeam char *

4、 teamname; int win; int draw; int lose; public: ScoreTeam(char*); int score(int,int,int); void printInfo(); ;,Database & Information System Lab,9,类的定义,构造函数的编写 确定参数 参数通常与类的成员变量有关 注意字符指针成员、数组成员 初始化成员变量 那些成员变量需要在构造的时候初始化 例如,一支球队可以没有胜平负的场次信息,但必须有队名 SoccerTeam:SoccerTeam(char *name) teamname = new charst

5、rlen(name)+1; strcpy(teamname,name); ,Database & Information System Lab,10,对象,对象说明及初始化 对象数组的初始化 初始化列表 SoccerTeam team4= SoccerTeam(“Spain“),SoccerTeam(“Italy“), SoccerTeam(“Germany“),SoccerTeam(“Brazil“); /仅写成SoccerTeam team4是错误的 初始化列表的形式是构造函数的调用表达式,参数表要与构造函数一致 如果有多个构造函数,必须与其中一个参数一致,Database & Infor

6、mation System Lab,11,对象,对象说明及初始化 对象数组的初始化 如果初始化列表麻烦,可以使用无参构造函数进行初始化,但必须提前定义或使用默认(不定义其它任何构造函数) 在主函数中对对象的类成员赋值 例如:SoccerTeam类有如下定义的构造函数 SoccerTeam:SoccerTeam() /函数体为空 ,Database & Information System Lab,12,对象,SoccerTeam team4; for(int i=0;iname; int w,d,l; coutw; coutd; coutl; teami.GetMemberValue(name

7、,w,d,l); ,Database & Information System Lab,13,对象,【思考】 对于SoccerTeam类,还可以有哪些形式的构造函数,可以完成哪些初始化工作,给出原型 SoccerTeam(char*,int,int,int); SoccerTeam(char*,int w=0,int d=0,int l=0); SoccerTeam(char*,int,int); SoccerTeam(char*,int); SoccerTeam(int,int,int); SoccerTeam(int,int); ,Database & Information System

8、 Lab,14,对象,对象的说明及初始化 对象指针的说明及初始化 =new 例如: SoccerTeam *pteam = new SoccerTeam(“China”); 访问对象的类成员 使用运算符:-,Database & Information System Lab,15,对象,对象与函数 对象作函数的参数 函数返回值为对象 将参数或者返回值当成普通类型处理,只不过某些具体运算或操作,需要使用对象的成员;而某些具体运算或操作需要使用对象本身 例如,按照球队积分排序 void sort(SoccerTeam team,int n) if(teami.scoreteamj.score) ,

9、Database & Information System Lab,16,类和对象的关系,一个对象是类的一个实例 维护一整套类的成员 成员变量 成员函数 不同的对象,其所管理的类成员变量值不同,成员函数的参数、返回值不同 只有跟对象发生关联,成员变量、成员函数才有意义,Database & Information System Lab,17,类和对象的关系,this指针的理解 指向当前对象 在类的成员函数中隐含 用来访问成员函数中涉及到的类的成员变量 表示当前对象所管理的类的成员变量 哪个对象调用该成员函数,函数中的成员变量的值就是该对象的成员变量值,Database & Informatio

10、n System Lab,18,类和对象的关系,this指针的理解 假设类包含一整型成员变量a,程序段: void MyClass:Myfucntion(int a) a += a;/局部变量a+a this-a + = a;/成员变量a+局部变量a a += this-a;/局部变量a+成员变量a 当类成员函数中的局部变量与类成员变量同名时,为了避免二义性需在成员变量名前加上this指针,Database & Information System Lab,19,类和对象的关系,【this指针程序示例】,Database & Information System Lab,20,#include

11、 class Myclass int a; public: Myclass()a=0; void Myfunction(int); void print(); ; void Myclass:print() cout“Member a=“aendl; ,void Myclass:Myfunction(int a) a += a;/局部变量a+a couta += a;/成员变量a+局部变量a coutaa;/局部变量a+成员变量a cout“Local a=“aendl; void main() Myclass MyObj; MyObj.Myfunction(10); MyObj.print()

12、; ,将不同类型的程序放在不同文件中,类定义体 MyClass.h 类的成员函数定义、静态成员变量赋初值 MyClass.cpp #include ”MyClass.h” 主函数 Main.cpp 注意:在使用类的文件中,一定要嵌入包含该类定义的头文件,且将文件名包含在双引号中,Database & Information System Lab,21,将不同类型的程序放在不同文件中,可能会产生类重复定义的错误 class XXX redefined 由于多次include造成的 同一个源文件中嵌入多个头文件,两个或以上头文件嵌入了相同的头文件 处理文件包含错误的方法预处理命令 类定义的文件My

13、Class.h采用如下写法 #ifndef ABC_H #define ABC_H /头文件的程序内容,即类MyClass的定义 #endif,Database & Information System Lab,22,IDE中的类视图,Database & Information System Lab,23,类视图选项卡,类名 类成员变量 类成员函数,IDE中的文档视图,Database & Information System Lab,24,文档视图选项卡,源文件 头文件 资源文件,友元,友元的含义 友元函数 不是类的成员函数 原型说明在类内 定义在类外(类的成员函数可在类内定义) 直接调用

14、(类的成员函数需要类对象调用) 友元类 其成员函数全部为另一类的友元函数 不建议过多使用,Database & Information System Lab,25,运算符重载,以运算符和运算表达式的形式类对象的运算 友元函数方式 每个运算分量都是参数 类成员函数方式 调用成员函数的对象是一个运算分量 成员函数的参数是其它运算分量 以合法表达式的形式调用运算符重载函数,实现类对象的运算 亦可直接调用运算符重载函数,Database & Information System Lab,26,运算符重载,运算符重载函数 友元函数 直观 破坏了类的封装性 类的成员函数 不直观,第一个运算分量不明显 保持

15、了类的封装性,Database & Information System Lab,27,运算符重载,使用方式 表达式形式 Set c = a + b; 函数调用形式 Set c = operator+(a,b);/友元函数 Set c = a.operator+(b);/成员函数 成员函数的定义中直接使用的成员变量,为调用该成员函数的对象所有,该对象亦是运算表达式的第一运算分量。,Database & Information System Lab,28,运算符重载,#include class point int x,y; public: point(); point(int,int); vo

16、id print(); friend point operator+(point,point); ;,Database & Information System Lab,29,运算符重载,point:point() x=0; y=0; point:point(int x0,int y0):x(x0),y(y0) void point:print() cout“(“x“,“y“)“endl; ,Database & Information System Lab,30,运算符重载,point operator+(point a,point b) point c; c.x = a.x + b.x; c.y = a.y + b.y; return c; void main() point a(1,2),b(3,4); point c = a.operator+(b);/函数调用 point d

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号