面向对象的程序设计应用复习课件

上传人:沈*** 文档编号:241846413 上传时间:2024-07-30 格式:PPT 页数:32 大小:210KB
返回 下载 相关 举报
面向对象的程序设计应用复习课件_第1页
第1页 / 共32页
面向对象的程序设计应用复习课件_第2页
第2页 / 共32页
面向对象的程序设计应用复习课件_第3页
第3页 / 共32页
点击查看更多>>
资源描述
C+面向对象程序设计普通高等教育“十一五”国家级规划教材中国高等院校计算机基础教育课程体系规划教材谭浩强 编著 湖南工业大学 计算机与通信学院.7/30/20241面向对象的程序设计应用面向对象的程序设计应用15.1 授课内容授课内容面向对象的程序设计应用。主要内容:面向对象的程序设计应用。主要内容:1面向对象程序设计方法;面向对象程序设计方法;2类的构造函数和析构函数的设计;类的构造函数和析构函数的设计;3运算符重载的应用;运算符重载的应用;4类的继承和多态性的应用。类的继承和多态性的应用。.7/30/20242面向对象的程序设计应用面向对象的程序设计应用授课要求授课要求 1进一步熟悉面向对象程序设计方法;2进一步熟悉和掌握面向对象程序设计的基本特点。.7/30/20243面向对象的程序设计应用面向对象的程序设计应用3 授课重点授课重点1)重点是面向对象程序设计方法。4 授课难点授课难点1)难点是熟练掌握面向对象的程序设计方法。.7/30/202441面向对象程序设计方法面向对象程序设计方法(1)设计类设计一个类,主要应考虑以下几个方面的问题:(a)进行系统分析,找出系统存在的对象,再抽象出各种类。类的设计主要是设计类的数据成员和成员函数,然后决定这些成员的访问属性。在一个类中的所有成员共享某个数据成员时,该成员应定义为静态成员。(b)在考虑对象的初始化和对象结束后的清理工作时,还需要设计类的构造函数和析构函数。(c)另外,为考虑函数的灵活调用,需要考虑到函数的重载。.7/30/20245(d)为了输出我们自己设计的对象信息,需要考虑到运算符重载。(e)为了编程的灵活,有时会用到友元函数,即用友元函数来访问类的私有成员。(f)为了软件的重用,需要用到类的继承,即需要设计基类和派生类。(g)为了编程的方便,有时会用到用基类指针来访问派生类对象与基类同名的成员函数,此时,需要用到虚函数。.7/30/20246(2)定义对象对象是实现程序功能的具体实现者。定义对象时主要考虑:(a)对象的作用域。对象是全局的、局部的、还是临时的。(b)建立对象时,对象的初始化,即应调用类的哪个构造函数。(c)采用new建立的对象,应用delete删除。.7/30/20247(3)对象之间相互发送和接收消息程序的运行过程就是对象之间相互发送和接收消息,然后响应消息的过程。响应消息,也就是执行对象自己的成员函数,从而完成程序的功能。发送消息时,应考虑发送的消息必要性和及时性,即要考虑程序功能的要求。发送消息时,还应考虑参数传递,即在调用其他对象的成员函数时的参数传递。.7/30/202482针对设计类的几个问题,举例说明针对设计类的几个问题,举例说明例如:定义一个矩阵类Matrix/首先定义了矩阵类的最大行数和列数#include using namespace std;#define MaxRow 100#define MaxColumn 100class Matrix /定义Matrix类public:Matrix()Row=2;Column=2;/默认构造函数.7/30/20249 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;.7/30/202410private:int MatValMaxRowMaxColumn;/矩阵值 int Row;/行数 int Column;/列数;/主程序int main()Matrix a,b,c(2,3);return 0;.7/30/202411还可以增加矩阵的输入和输出函数:还可以增加矩阵的输入和输出函数:void Matrix:input()/定义输入数据函数int i,j;coutinput value of matrix:endl;for(i=0;iRow;i+)for(j=0;jMatValij;void Matrix:display()/定义输出数据函数int i,j;coutoutput value of matrix:endl;for(i=0;iRow;i+)for(j=0;jColumn;j+)cout MatValij ;coutendl;int main()Matrix a,b,c(2,3);a.input();coutendlMatrix a:=Row)|(y=Column)return 0;MatValxy=v;return 1;int Matrix:GetValueXY(int x,int y)return MatValxy;.7/30/202413(d)为了输出我们自己设计的对象信息,)为了输出我们自己设计的对象信息,需要考虑需要考虑到运算符重载。到运算符重载。Matrix operator+(Matrix&b)Matrix c;c.Row=Row;c.Column=Column;for(int i=0;ic.Row;i+)for(int j=0;jc.Column;j+)c.MatValij=MatValij+b.MatValij;return c;.7/30/202414则:主程序中可以添加:c=a+b;/用重载运算符“+”实现两个矩阵相加 coutendlMatrix c=Matrix a+Matrix b:endl;c.display();/注意:注意:如果重载运算如果重载运算“+”为成员函数,即:为成员函数,即:Matrix operator+(Matrix&a,Matrix&b)将出错:将出错:error C2804:binary operator+has too many parameters(二元运算符(二元运算符“+”的参数过多)的参数过多).7/30/202415(e)用友元函数来访问类的私有成员用友元函数来访问类的私有成员比如:有一个友元函数访问该类的私有成员比如:有一个友元函数访问该类的私有成员Row。friend int ReadMatrixRow(Matrix&m);类外的普通函数:类外的普通函数:int ReadMatrixRow(Matrix&m)return m.Row;在主程序中,添加:在主程序中,添加:int r=ReadMatrixRow(c);coutrendl;.7/30/202416使用类的继承和虚函数:使用类的继承和虚函数:#include class Pet public:virtual void Speak()coutHow does a pet speak?endl;class Dog:public Pet public:virtual void Speak()coutwang!wang!endl;class Cat:public Pet public:virtual void Speak()coutmiao!miao!Speak();p2=new Cat;p2-Speak();p3=new Dog;p3-Speak();Pet&p4=cat1;p4.Speak();delete p2;delete p3;输出结果:How does a pet speak?wang!wang!miao!miao!.7/30/202418void main()Pet*p1,*p2,*p3,obj;Dog dog1;Cat cat1;obj=dog1;obj.Speak();dog1.Speak();p1=&cat1;p1-Speak();输出结果: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&p4=cat1;p4.Speak();delete p2;delete p3;.7/30/202419(2)定义对象针对前面矩阵类,可以如下定义对象:(a)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);.7/30/202420(3)对象之间相互发送和接收消息比如:比如:m1.display();则向则向m1对象发送让它显示数据的消息。对象发送让它显示数据的消息。.7/30/2024213讲解几个程序讲解几个程序(1)阅读下面的程序,写出程序运行的结果。(通信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;.7/30/202422class Employee:public Personchar 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;.7/30/202423void main()Employee emp(张三,40,人事处,王五,36);程序运行结果:constructor of person张三constructor of person王五constructor of Employeedeconstrucor of Employeedeconstrutor of person王五deconstrutor of person 张三.7/30/202424(2)阅读下面的程序,写出程序运行的结果。(计05考题)#includeconst int N=5;void fun();void main()for(int i=1;iN;i+)fun();void fun()static int a=2;cout(a+=3)p=5 CA1.p=5 D*A1.p=52.若在函数func中存在语句 this-x=0;假设该语句的语法是正确的,则与该语句有关的下列叙述中,错误的是:()A.func是该类的友元函数 B.x是类的数据成员 C.this-x和x是指同一个变量 D.x一定不是静态数据成员3.若函数f的原型说明为:int f(char a,char*b=NULL,double c=0.0);则以下调用函数f的选项中,存在语法错误的是()1.A.f(A,”123”,4.5)B.f(char)65,”123”)2.C.f(A,”123”)D.f(A,4.5)AAD.7/30/202426基本概念1.什么是多态性?在C+中有哪两种多态性?2.在C+中,继承的方式由哪几种?如果不显式地给出继承方式关键字,系统默认的是什么继承方式?在不同的继承方式下,派生类自身及其使用者对基类的访问控制权限是否相同?3.面向对象程序设计的基本特征有哪些?4.C+程序在编译中会出现哪两类错误?这两类错误在本质上有什么区别?5.简述类和对象的含义。面向对象程序设计和面向过程程序设计的主要区别是什么?6.什么是友元函数?友元函数的作用是什么?7.函数重载的主要作用是什么?函数重载时参数个数不同时,能否有缺省参数,为什么?8.类和结构有什么异同?.7/30/202427填空题1根据程序说明和程序中的注释,填充程序中不完整的部分。类Number的成员函数TwoTimes是递归函数,功能是求2n(假设n0时返回值为0)。#include using namespace std;class Number private:int Num;public:int n;int TwoTimes(int 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)_);/输出2Numdelete p;nGetNum().7/30/202428写出程序运行的结果.7/30/202429编程题主要考察:类和对象的定义、函数重载和定义、类的派生和继承、文件的操作。.7/30/202430课后总结课后总结面向对象程序设计方法:(1)类的设计,包括构造函数和析构函数的设计;(2)运算符重载的应用;(3)类的继承和多态性的应用。灵活应用.7/30/202431课后作业课后作业开始课程设计准备 本讲结束本讲结束 学好学好C+的要点:的要点:多编程,多上机多编程,多上机.7/30/202432
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


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

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


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