面向对象的程序设计应用复习.ppt

上传人:za****8 文档编号:15717493 上传时间:2020-09-01 格式:PPT 页数:32 大小:264.50KB
收藏 版权申诉 举报 下载
面向对象的程序设计应用复习.ppt_第1页
第1页 / 共32页
面向对象的程序设计应用复习.ppt_第2页
第2页 / 共32页
面向对象的程序设计应用复习.ppt_第3页
第3页 / 共32页
资源描述:

《面向对象的程序设计应用复习.ppt》由会员分享,可在线阅读,更多相关《面向对象的程序设计应用复习.ppt(32页珍藏版)》请在装配图网上搜索。

1、2020年9月1日4时0分,1,C+面向对象程序设计,普通高等教育“十一五”国家级规划教材 中国高等院校计算机基础教育课程体系规划教材,谭浩强 编著,湖南工业大学 计算机与通信学院,2020年9月1日4时0分,2,面向对象的程序设计应用,15.1 授课内容 面向对象的程序设计应用。主要内容: 1面向对象程序设计方法; 2类的构造函数和析构函数的设计; 3运算符重载的应用; 4类的继承和多态性的应用。,2020年9月1日4时0分,3,面向对象的程序设计应用,授课要求 1进一步熟悉面向对象程序设计方法; 2进一步熟悉和掌握面向对象程序设计的基本特点。,2020年9月1日4时0分,4,面向对象的程序

2、设计应用,3 授课重点 1)重点是面向对象程序设计方法。 4 授课难点 1)难点是熟练掌握面向对象的程序设计方法。,2020年9月1日4时0分,5,1面向对象程序设计方法,(1)设计类 设计一个类,主要应考虑以下几个方面的问题: (a)进行系统分析,找出系统存在的对象,再抽象出各种类。类的设计主要是设计类的数据成员和成员函数,然后决定这些成员的访问属性。在一个类中的所有成员共享某个数据成员时,该成员应定义为静态成员。 (b)在考虑对象的初始化和对象结束后的清理工作时,还需要设计类的构造函数和析构函数。 (c)另外,为考虑函数的灵活调用,需要考虑到函数的重载。,2020年9月1日4时0分,6,(

3、d)为了输出我们自己设计的对象信息,需要考虑到运算符重载。 (e)为了编程的灵活,有时会用到友元函数,即用友元函数来访问类的私有成员。 (f)为了软件的重用,需要用到类的继承,即需要设计基类和派生类。 (g)为了编程的方便,有时会用到用基类指针来访问派生类对象与基类同名的成员函数,此时,需要用到虚函数。,2020年9月1日4时0分,7,(2)定义对象,对象是实现程序功能的具体实现者。 定义对象时主要考虑: (a)对象的作用域。对象是全局的、局部的、还是临时的。 (b)建立对象时,对象的初始化,即应调用类的哪个构造函数。 (c)采用new建立的对象,应用delete删除。,2020年9月1日4时

4、0分,8,(3)对象之间相互发送和接收消息,程序的运行过程就是对象之间相互发送和接收消息,然后响应消息的过程。响应消息,也就是执行对象自己的成员函数,从而完成程序的功能。 发送消息时,应考虑发送的消息必要性和及时性,即要考虑程序功能的要求。 发送消息时,还应考虑参数传递,即在调用其他对象的成员函数时的参数传递。,2020年9月1日4时0分,9,2针对设计类的几个问题,举例说明,例如:定义一个矩阵类Matrix /首先定义了矩阵类的最大行数和列数 #include using namespace std; #define MaxRow 100 #define MaxColumn 100 clas

5、s Matrix /定义Matrix类 public: Matrix() Row = 2;Column = 2; /默认构造函数,2020年9月1日4时0分,10,Matrix(int r,int c) /带参数的构造函数 int i,j; if (rMaxRow) Row = MaxRow; else Row = r; if (cMaxColumn) Column = MaxColumn; else Column = c; for(i=0;iRow;i+) for (j=0;jColumn;j+) MatValij = 0; ;,2020年9月1日4时0分,11,private: int M

6、atValMaxRowMaxColumn; /矩阵值 int Row;/行数 int Column; /列数 ; /主程序 int main() Matrix a,b,c(2,3); return 0; ,2020年9月1日4时0分,12,还可以增加矩阵的输入和输出函数: void Matrix:input() /定义输入数据函数 int i,j; coutMatValij; void Matrix:display() /定义输出数据函数 int i,j; coutoutput value of matrix:endl; for(i=0;iRow;i+) for(j=0;jColumn;j+)

7、 cout MatValij ; coutendl; ,int main() Matrix a,b,c(2,3); a.input(); coutendlMatrix a:endl; a.display(); return 0; ,2020年9月1日4时0分,13,还可增加其他一些成员函数: int Matrix:SetValueXY(int x,int y,int v) if (x=Row)|(y=Column) return 0; MatValxy = v; return 1; int Matrix:GetValueXY(int x,int y) return MatValxy; ,202

8、0年9月1日4时0分,14,(d)为了输出我们自己设计的对象信息,需要考虑到运算符重载。 Matrix operator+( Matrix ,2020年9月1日4时0分,15,则:主程序中可以添加: c=a+b; /用重载运算符“+”实现两个矩阵相加 coutendlMatrix c = Matrix a + Matrix b :endl; c.display(); ,/注意:如果重载运算“+”为成员函数,即: Matrix operator+(Matrix ;,class Dog : public Pet public: virtual void Speak() coutwang!wang!

9、endl; ;,class Cat : public Pet public: virtual void Speak() coutmiao!miao!endl; ;,2020年9月1日4时0分,18,void main() Pet*p1, *p2, *p3,obj; Dog dog1; Cat cat1; obj = dog1; obj.Speak(); dog1.Speak(); p1 = ,p2=new Cat; p2-Speak(); p3=new Dog; p3-Speak(); Pet ,输出结果: How does a pet speak ? wang!wang! miao!miao

10、!,2020年9月1日4时0分,19,void main() Pet*p1, *p2, *p3,obj; Dog dog1; Cat cat1; obj = dog1; obj.Speak(); dog1.Speak(); p1 = ,输出结果: How does a pet speak ? wang!wang! miao!miao! miao!miao! wang!wang! miao!miao!,p2=new Cat; p2-Speak(); p3=new Dog; p3-Speak(); Pet ,2020年9月1日4时0分,20,(2)定义对象,针对前面矩阵类,可以如下定义对象: (a

11、) Matrix m1,m2; (b) Matrix m3(3,4); (c) Matrix *pt1 = new Matrix(); /或new Matrix; (d) Matrix *pt2 = new Matrix(5,6); 注意:用new建立的对象,需要用delete删除。 (e) Matrix mz15; (f) Matrix mz25= Matrix(1,2),Matrix(3,4);,2020年9月1日4时0分,21,(3)对象之间相互发送和接收消息,比如:m1.display(); 则向m1对象发送让它显示数据的消息。,2020年9月1日4时0分,22,3讲解几个程序,(1)

12、阅读下面的程序,写出程序运行的结果。(通信02考题) #include #include class Person char m_strName10; /姓名 intm_nAge; /年龄 public: Person(char* name,int age) strcpy(m_strName, name); m_nAge = age; coutconstructor of personm_strNameendl; Person() coutdeconstrutor of personm_strNameendl; ;,2020年9月1日4时0分,23,class Employee : publi

13、c Person char m_strDept20; PersonWang; public: Employee(char *name, int age, char *dept, char *name1, int age1) : Person(name,age) , Wang(name1,age1) strcpy(m_strDept, dept); coutconstructor of Employeeendl; Employee() coutdeconstrucor of Employeeendl; ;,2020年9月1日4时0分,24,void main() Employee emp(张三,

14、40,人事处,王五,36); 程序运行结果: constructor of person张三 constructor of person王五 constructor of Employee deconstrucor of Employee deconstrutor of person王五 deconstrutor of person 张三,2020年9月1日4时0分,25,(2)阅读下面的程序,写出程序运行的结果。(计05考题) #include const int N=5; void fun(); void main() for(int i=1;iN;i+) fun(); void fun(

15、) static int a=2; cout(a+=3) ; ,程序运行结果: 5 8 11 14,2020年9月1日4时0分,26,选择题,1.已知:p是一个指向类A数据成员m的指针,A1是类A的一个对象。如果要给m赋值为5,( )是正确的。 AA1.*p=5 BA1-p=5 CA1.p=5 D*A1.p=5 2.若在函数func中存在语句 this-x=0; 假设该语句的语法是正确的,则与该语句有关的下列叙述中,错误的是:( ) A. func是该类的友元函数 B. x是类的数据成员 C. this-x和x是指同一个变量 D. x一定不是静态数据成员 3. 若函数f的原型说明为: int

16、f(char a,char *b=NULL,double c=0.0); 则以下调用函数f的选项中,存在语法错误的是 ( ) A. f(A,”123”,4.5) B. f(char)65,”123”) C. f(A,”123”) D. f(A,4.5),A,A,D,2020年9月1日4时0分,27,基本概念,1.什么是多态性?在C+中有哪两种多态性? 2.在C+中,继承的方式由哪几种?如果不显式地给出继承方式关键字,系统默认的是什么继承方式?在不同的继承方式下,派生类自身及其使用者对基类的访问控制权限是否相同? 3.面向对象程序设计的基本特征有哪些? 4.C+程序在编译中会出现哪两类错误?这两

17、类错误在本质上有什么区别? 5.简述类和对象的含义。面向对象程序设计和面向过程程序设计的主要区别是什么? 6.什么是友元函数?友元函数的作用是什么? 7.函数重载的主要作用是什么?函数重载时参数个数不同时,能否有缺省参数,为什么? 8. 类和结构有什么异同?,2020年9月1日4时0分,28,填空题,1根据程序说明和程序中的注释,填充程序中不完整的部分。 类Number的成员函数TwoTimes是递归函数,功能是求2n (假设n using namespace std; class Number private:int Num; public: int n; int TwoTimes (int

18、 n) /递归函数TwoTimes (n)求2n 。 if (_(1)_) return 0; if (n=0) _(2)_; else return _(3)_; int GetNum() return Num; Number(int n=0) Num = n; ; void main() Number *p; p =_(4)_;/动态生成由p指向的Number对象,并使Num为5。 coutTwoTimes(_(5)_);/输出2Num delete p;,nGetNum(),2020年9月1日4时0分,29,写出程序运行的结果,2020年9月1日4时0分,30,编程题,主要考察: 类和对象的定义、函数重载和定义 、类的派生和继承、文件的操作。,2020年9月1日4时0分,31,课后总结,面向对象程序设计方法: (1)类的设计,包括构造函数和析构函数的设计 ; (2)运算符重载的应用; (3)类的继承和多态性的应用。,灵活应用,2020年9月1日4时0分,32,课后作业,开始课程设计准备 本讲结束,学好C+的要点: 多编程,多上机,

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!