面向对象的程序设计应用复习课件_第1页
面向对象的程序设计应用复习课件_第2页
面向对象的程序设计应用复习课件_第3页
面向对象的程序设计应用复习课件_第4页
面向对象的程序设计应用复习课件_第5页
已阅读5页,还剩27页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C++面向对象程序设计普通高等教育“十一五”国家级规划教材中国高等院校计算机基础教育课程体系规划教材谭浩强编著

湖南工业大学计算机与通信学院.7/22/20231面向对象的程序设计应用15.1授课内容面向对象的程序设计应用。主要内容:1.面向对象程序设计方法;2.类的构造函数和析构函数的设计;3.运算符重载的应用;4.类的继承和多态性的应用。.7/22/20232面向对象的程序设计应用授课要求1.进一步熟悉面向对象程序设计方法;2.进一步熟悉和掌握面向对象程序设计的基本特点。.7/22/20233面向对象的程序设计应用3授课重点1).重点是面向对象程序设计方法。4授课难点1).难点是熟练掌握面向对象的程序设计方法。.7/22/202341.面向对象程序设计方法(1)设计类设计一个类,主要应考虑以下几个方面的问题:(a)进行系统分析,找出系统存在的对象,再抽象出各种类。类的设计主要是设计类的数据成员和成员函数,然后决定这些成员的访问属性。在一个类中的所有成员共享某个数据成员时,该成员应定义为静态成员。(b)在考虑对象的初始化和对象结束后的清理工作时,还需要设计类的构造函数和析构函数。(c)另外,为考虑函数的灵活调用,需要考虑到函数的重载。.7/22/20235(d)为了输出我们自己设计的对象信息,需要考虑到运算符重载。(e)为了编程的灵活,有时会用到友元函数,即用友元函数来访问类的私有成员。(f)为了软件的重用,需要用到类的继承,即需要设计基类和派生类。(g)为了编程的方便,有时会用到用基类指针来访问派生类对象与基类同名的成员函数,此时,需要用到虚函数。.7/22/20236(2)定义对象对象是实现程序功能的具体实现者。定义对象时主要考虑:(a)对象的作用域。对象是全局的、局部的、还是临时的。(b)建立对象时,对象的初始化,即应调用类的哪个构造函数。(c)采用new建立的对象,应用delete删除。.7/22/20237(3)对象之间相互发送和接收消息程序的运行过程就是对象之间相互发送和接收消息,然后响应消息的过程。响应消息,也就是执行对象自己的成员函数,从而完成程序的功能。发送消息时,应考虑发送的消息必要性和及时性,即要考虑程序功能的要求。发送消息时,还应考虑参数传递,即在调用其他对象的成员函数时的参数传递。.7/22/202382.针对设计类的几个问题,举例说明例如:定义一个矩阵类Matrix//首先定义了矩阵类的最大行数和列数#include<iostream>usingnamespacestd;#defineMaxRow100#defineMaxColumn100classMatrix//定义Matrix类{public:Matrix(){Row=2;Column=2;};//默认构造函数

.7/22/20239

Matrix(intr,intc)//带参数的构造函数 {inti,j; if(r>MaxRow) Row=MaxRow; else Row=r; if(c>MaxColumn) Column=MaxColumn; else Column=c; for(i=0;i<Row;i++) for(j=0;j<Column;j++) MatVal[i][j]=0; };.7/22/202310private:intMatVal[MaxRow][MaxColumn];//矩阵值intRow;//行数intColumn;//列数};//主程序intmain(){ Matrixa,b,c(2,3); return0;}.7/22/202311还可以增加矩阵的输入和输出函数:voidMatrix::input()//定义输入数据函数{ inti,j; cout<<"inputvalueofmatrix:"<<endl;for(i=0;i<Row;i++) for(j=0;j<Column;j++) cin>>MatVal[i][j];}voidMatrix::display()//定义输出数据函数{ inti,j; cout<<"outputvalueofmatrix:"<<endl;for(i=0;i<Row;i++) { for(j=0;j<Column;j++) { cout<<""<<MatVal[i][j]<<""; } cout<<endl; }}intmain(){ Matrixa,b,c(2,3);a.input();cout<<endl<<"Matrixa:"<<endl;a.display(); return0;}.7/22/202312还可增加其他一些成员函数:intMatrix::SetValueXY(intx,inty,intv){ if((x>=Row)||(y>=Column)) return0; MatVal[x][y]=v; return1;}intMatrix::GetValueXY(intx,inty){ returnMatVal[x][y];}.7/22/202313(d)为了输出我们自己设计的对象信息,需要考虑到运算符重载。Matrixoperator+(Matrix&b)

{ Matrixc; c.Row=Row; c.Column=Column; for(inti=0;i<c.Row;i++) for(intj=0;j<c.Column;j++) c.MatVal[i][j]=MatVal[i][j]+b.MatVal[i][j]; returnc;}.7/22/202314则:主程序中可以添加:{

c=a+b;//用重载运算符“+”实现两个矩阵相加cout<<endl<<"Matrixc=Matrixa+Matrixb:"<<endl;c.display();}//注意:如果重载运算“+”为成员函数,即:Matrixoperator+(Matrix&a,Matrix&b)将出错:errorC2804:binary'operator+'hastoomanyparameters(二元运算符“+”的参数过多).7/22/202315(e)用友元函数来访问类的私有成员比如:有一个友元函数访问该类的私有成员Row。friendintReadMatrixRow(Matrix&m);类外的普通函数:intReadMatrixRow(Matrix&m){returnm.Row;}在主程序中,添加:{intr=ReadMatrixRow(c);cout<<r<<endl;}.7/22/202316使用类的继承和虚函数:#include<iostream.h>classPet

{public:

virtualvoidSpeak()

{cout<<"Howdoesapetspeak?"<<endl;}};classDog:publicPet

{public:

virtualvoidSpeak() {cout<<"wang!wang!"<<endl;}};classCat:publicPet

{public:

virtualvoidSpeak(){cout<<"miao!miao!"<<endl;}};.7/22/202317voidmain(){ Pet *p1,*p2,*p3,obj; Dogdog1; Catcat1; obj=dog1; obj.Speak(); dog1.Speak();p1=&cat1; p1->Speak();

p2=newCat; p2->Speak(); p3=newDog; p3->Speak(); Pet &p4=cat1; p4.Speak(); deletep2; deletep3;}输出结果:Howdoesapetspeak?wang!wang!miao!miao!.7/22/202318voidmain(){ Pet *p1,*p2,*p3,obj; Dogdog1; Catcat1; obj=dog1; obj.Speak(); dog1.Speak();p1=&cat1; p1->Speak();

输出结果:Howdoesapetspeak?wang!wang!miao!miao!miao!miao!wang!wang!miao!miao!p2=newCat; p2->Speak(); p3=newDog; p3->Speak(); Pet &p4=cat1; p4.Speak(); deletep2; deletep3;}.7/22/202319(2)定义对象针对前面矩阵类,可以如下定义对象:(a)Matrixm1,m2;(b)Matrixm3(3,4);(c)Matrix*pt1=newMatrix();//或newMatrix;(d)Matrix*pt2=newMatrix(5,6);

注意:用new建立的对象,需要用delete删除。(e)Matrixmz1[5];(f)Matrixmz2[5]={Matrix(1,2),Matrix(3,4)};.7/22/202320(3)对象之间相互发送和接收消息比如:m1.display();则向m1对象发送让它显示数据的消息。.7/22/2023213.讲解几个程序(1)阅读下面的程序,写出程序运行的结果。(通信02考题)#include<iostream.h>#include<string.h>classPerson{ char m_strName[10];//姓名 int m_nAge;//年龄public: Person(char*name,intage) { strcpy(m_strName,name); m_nAge=age; cout<<"constructorofperson"<<m_strName<<endl; } ~Person() {cout<<"deconstrutorofperson"<<m_strName<<endl;}};.7/22/202322classEmployee:publicPerson{ char m_strDept[20]; Person Wang;public: Employee(char*name,intage,char*dept,char*name1,intage1) :Person(name,age),Wang(name1,age1) { strcpy(m_strDept,dept); cout<<"constructorofEmployee"<<endl; } ~Employee(){cout<<"deconstrucorofEmployee"<<endl;}};.7/22/202323voidmain(){ Employeeemp("张三",40,"人事处","王五",36);}程序运行结果:constructorofperson张三constructorofperson王五constructorofEmployeedeconstrucorofEmployeedeconstrutorofperson王五deconstrutorofperson张三.7/22/202324(2)阅读下面的程序,写出程序运行的结果。(计05考题)#include<iostream.h>constintN=5;voidfun();voidmain(){for(inti=1;i<N;i++)fun();}voidfun(){staticinta=2;cout<<(a+=3)<<"";}程序运行结果:581114.7/22/202325选择题1.已知:p是一个指向类A数据成员m的指针,A1是类A的一个对象。如果要给m赋值为5,()是正确的。A.A1.*p=5B.A1->p=5C.A1.p=5D.*A1.p=52.若在函数func中存在语句this->x=0;假设该语句的语法是正确的,则与该语句有关的下列叙述中,错误的是:()A.func是该类的友元函数B.x是类的数据成员C.this->x和x是指同一个变量D.x一定不是静态数据成员3.若函数f的原型说明为:intf(chara,char*b=NULL,doublec=0.0);则以下调用函数f的选项中,存在语法错误的是()A.f(‘A’,”123”,4.5)B.f((char)65,”123”)C.f(‘A’,”123”)D.f(‘A’,4.5)AAD.7/22/202326基本概念1.什么是多态性?在C++中有哪两种多态性?2.在C++中,继承的方式由哪几种?如果不显式地给出继承方式关键字,系统默认的是什么继承方式?在不同的继承方式下,派生类自身及其使用者对基类的访问控制权限是否相同?3.面向对象程序设计的基本特征有哪些?4.C++程序在编译中会出现哪两类错误?这两类错误在本质上有什么区别?5.简述类和对象的含义。面向对象程序设计和面向过程程序设计的主要区别是什么?6.什么是友元函数?友元函数的作用是什么?7.函数重载的主要作用是什么?函数重载时参数个数不同时,能否有缺省参数,为什么?8.类和结构有什么异同?.7/22/202327填空题1.根据程序说明和程序中的注释,填充程序中不完整的部分。类Number的成员函数TwoTimes是递归函数,功能是求2n(假设n<0时返回值为0)。#in

温馨提示

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

最新文档

评论

0/150

提交评论