版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年福建医科大学孟超肝胆医院福建医科大学吴孟超纪念医院人员控制数自主招聘工作人员笔试备考试题及答案解析
- 2026年湖北大话嘻游管理有限公司劳务派遣人员招聘60人笔试模拟试题及答案解析
- 2026安徽省国资委组织国有企业为高校毕业生开发见习岗位笔试模拟试题及答案解析
- 昭通市2026年市级机关统一公开遴选公务员(17人)笔试备考试题及答案解析
- 2026年商都县教师招聘笔试备考试题及答案解析
- 2026湖北武汉市中心城区公立中学招聘1人笔试备考试题及答案解析
- 2026年10月广东广州市天河区侨乐小学招聘编外聘用制专任教师1人笔试备考题库及答案解析
- 2026年湖口县教师招聘考试模拟试题及答案解析
- 2026年天峨县教师招聘笔试备考题库及答案解析
- 2026年安义县教师招聘考试备考试题及答案解析
- 统编版初中道德与法治九年级上册6.3文化自信日益增强 议题式教学课件(共35张)+内嵌视频
- 江苏省南通市启东市2025-2026学年九年级上学期期中数学试卷(含答案)
- 2026年卫生信息化系统管理岗医疗卫生事业招聘考试笔试试题(含答案)
- 血液透析用中心静脉导管护理专家共识(2025版)
- 大学英语四级词汇表 (完美打印版)
- 精神科患者的团体治疗护理
- DB54∕T 0533-2025 公路养护预算指标(定额)
- 5.1《从小爱劳动》课件 统编版道德与法治三年级下册
- 高校教师资格证之高等教育学完整版及答案【历年真题】
- 手术室质控培训课件内容
- 谈谈如何做好学生辅导员工作(精)课件
评论
0/150
提交评论