C面向对象程序设计复习提纲.ppt_第1页
C面向对象程序设计复习提纲.ppt_第2页
C面向对象程序设计复习提纲.ppt_第3页
C面向对象程序设计复习提纲.ppt_第4页
C面向对象程序设计复习提纲.ppt_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

,第一章C+的初步知识第二章类和对象第三章关于类和对象的进一步讨论第四章运算符重载第五章继承与派生第六章多态性与虚函数第七章输入输出流,第一章C+的初步知识,1.1从C到C+1.2C+语言的词法和词法规则1.3最简单的C+程序1.4C+对C的扩充1.5C+程序的编写和实现,1.4C+对C的扩充,C+既可用于面向过程的程序设计,也可用于面向对象程序设计。C+继承了C语言提供的绝大部分功能和语法规定,并在此基础上作了扩充。,1.4.1C+的输入和输出1.4.2用const定义常变量1.4.3函数原型声明1.4.4函数的重载1.4.5函数模板1.4.6有默认参数的函数,1.4.7变量的引用1.4.8内置函数1.4.9作用域运算符1.4.10字符串变量1.4.11动态分配/回收内存运算符,作业,5,6,7,10,11,13(改成用模板和变量引用设计),第2章类和对象,2.1面向对象程序设计方法概述2.2类的声明和对象的定义2.3类的成员函数2.4对象成员的引用(调用)2.5类和对象的简单应用2.6类的封闭性和信息隐蔽,类定义格式:,class类名private:私有成员声明public:公有成员声明protected:保护成员声明;,class是保留字,声明类类型类名:按标识符取名。private、public、protected也是保留字,是成员访问限定符,其后必须跟冒号。在类声明的后如不直接定义对象就必须跟分号。,private:只能被本类中的成员函数访问,类外(除友元外)不能访问。public:公有成员可以被本类的成员函数访问,也能在类的作用域范围内的其他函数访问。protected:受保护成员可由本类的成员函数访问,也能由派生类的成员函数访问。在定义类时,这三类成员不分前后顺序,也可以重复出现。一般推荐最多出现一次。,例2.3类成员的调用,#includeusingnamespacestd;classTimeprivate:inthour;intminute;intsec;public:voidset_time();voidshow_time();,intmain()Timet1;t1.set_time();t1.show_time();Timet2;t2.set_time();t2.show_time();return0;,voidTime:set_time()cinhour;cinminute;cinsec;voidTime:show_time()couthour:minute:secendl;,多文件系统,一般在面向对象程序开发时:将类的声明(包括成员函数的声明)放在指定的头文件(*.h)中;把类成员函数的定义放在源文件(*.cpp)中;在应用程序中只要把有关的头文件包含进来即可。,作业,P68习题5,6,第3章关于类和对象的进一步讨论,本章将对类和对象进行进一步的讨论。,3.1构造函数3.2析构函数3.3调用构造函数和析构函数的顺序3.4对象数组3.5对象指针3.6共用数据的保护(难点)3.7对象的动态建立和释放3.8对象的赋值和复制3.9静态成员3.10友元3.11类模板,3.1构造函数,3.1.1对象的初始化3.1.2构造函数的作用3.1.3带参数的构造函数3.1.4用参数初始化表初始化数据成员3.1.5构造函数的重载3.1.6使用默认参数的构造函数,确定对象的初始状态,3.1.2构造函数的作用,构造函数的作用:用于为对象分配空间和进行初始化。构造函数的特点:(1)构造函数的名字与它的类名必须相同;(2)它没有类型,不返回值,为public类型;(3)它可以带参数,也可以不带参数;(4)不需要写调用语句,在系统建立对象时由系统自觉调用执行。(5)如果用户没有定义构造函数,C+系统会自动生成一个空的构造函数。,#includeusingnamespacestd;classBoxpublic:Box();/不带形参的构造函数为系统默认函数Box(inth,intw,intlen):height(h),width(w),length(len)intvolume();private:intheight;intwidth;intlength;,这是什么?构造函数也可以重载。一个类可以有多个同名构造函数,函数参数的个数、参数的类型各不相同定义对象是只执行一个构造函数,#includeusingnamespacestd;classBoxpublic:Box(intw=10,inth=10,intlen=10);intvolume();private:intheight;intwidth;intlength;,例3.4:将例3.3中的构造函数改用带默认值的参数,长、宽、高的默认值都是10。,如果在类外定义构造函数,应该在声明构造函数时指定默认参数值,在定义函数时可以不再指定默认参数值。,3.2析构函数,作用:与构造函数相反,当对象的生命周期结束时,系统自动调用析构函数,收回对象占用的内存空间。析构函数的特征析构函数名以符号开始后跟类名析构函数没有数据类型、返回值、形参。由于没有形参所以析构函数不能重载。如果程序员没有定义析构函数,C+编译系统会自动生成一个析构函数。,3.3调用构造函数和析构函数的顺序,当定义多个对象时:先构造的后析构,后构造的先析构。,对象1的构造函数,对象2的构造函数,对象1的析构函数,对象2的析构函数,作业,P116习题2,4,7.(1)(2),12,第四章运算符重载,4.1什么是运算符重载4.2运算符重载的方法4.3重载运算符的规则4.4运算符重载函数作为类成员函数和友元函数4.5重载双目运算符4.6重载单目运算符4.7重载流插入运算符和流提取运算符,4.2运算符重载的方法,方法:定义一个重载运算符函数,在需要时系统自动调用该函数,完成相应的运算。实质:函数的重载。运算符重载函数的格式:函数类型operator运算符(形参表)重载处理数据类型:是重载函数值的数据类型。operator是保留字,4.3重载运算符的规则,(1)C+只允许重载已有运算符。(2)不能重载的运算符有五个。(3)重载不改变操作数的个数。(4)重载不改变运算符的优先级。(5)运算符重载函数不能带默认值参数。(6)运算符重载函数参数至少有一个自定义类型,可以是类对象或类对象引用。(7)运算符重载函数可以是类成员函数也可以是类的友元函数,还可以是普通函数。,例4.2,classComplexpublic:Complex()real=0;imag=0;Complex(doubler,doublei)real=r;imag=i;/重载运算符+Complexoperator+(Complex,test14,#includeclassComplexpublic:Complex()real=0;imag=0;Complex(doubler)real=r;imag=0;Complex(doubler,doublei)real=r;imag=i;friendComplexoperator+(Complex,test14,例4.3,作业,P149习题2,4,第五章继承与派生,面向对象程序设计有四个主要特点:抽象(二、三章);封装(二、三章);继承(五章);多态性(六章)。,5.1继承与派生的概念5.2派生类的声明方式5.3派生类的构成5.4派生类成员的访问属性5.5派生类的构造函数和析构函数5.6多重继承,继承与派生的关系,类A是已存在的类,在A的基础上建立一个新类B:类A称为基类或父类,类B称作派生类或子类。子类从父类获得其已有的特性,这种现象称作类的继承。父类产生子类,称作类的派生。,5.2派生类的声明方式,派生类的声明格式:class派生类名:继承方式基类名派生类新增成员声明;继承方式包括:public、private(系统默认)、protected。举例:已经声明一个基类student,在它基础上通过单继承建立一个增加了“年龄”的派生类student1。,5.3派生类的构成,派生类中的成员包括从基类继承过来的成员和自己增加的成员。,5.5.1简单的派生类的构造函数,何为简单派生类?只有一个基类,只有一级派生;派生类数据成员中不包含基类的对象(子对象)。构造函数格式:派生类名:派生类名(基类所需的形参,本类成员所需的形参):基类名(基类参数表)本类成员初始化赋值语句;,说明:基类所需的形参,基类参数表一一对应,例5.5简单派生类的构造函数,#include#includeusingnamespacestd;classStudent/声明基类public:/公用部分Student(intn,stringnam,chars)/基类构造函数num=n;name=nam;sex=s;Student()/基类析构函数protected:/保护部分intnum;stringname;charsex;,test51,classStudent1:publicStudent/声明公用派生类public:Student1(intn,stringnam,chars,inta,charad):Student(n,nam,s)/派生类构造函数age=a;/只对派生类新增的数据成员初始化addr=ad;voidshow();private:/派生类的私有部分intage;stringaddr;,执行构造函数的顺序是(析构函数相反):派生类构造函数先调用基类构造函数;再执行派生类构造函数本身。即先初始化num,name,sex,然后再初始化age和addr,5.6多重继承,5.6.1声明多重继承的方法5.6.2多重继承派生类的构造函数5.6.3多重继承引起的二义性问题5.6.4虚基类,为何要用多重继承?如:定义一个沙发床类,5.6.3多重继承引起的二义性问题,多重继承最常见的问题是二义性问题。二义性问题分类:在多重继承时,基类与派生类之间,或基类之间出现同名成员时,将出现访问时的二义性(不确定性)采用同名隐藏规则(5.6.3)来解决。当派生类从多个基类派生,而这些基类又从同一个基类派生,则在访问此共同基类中的成员时,将产生二义性采用虚基类(5.6.4)来解决。,同名隐藏规则,当派生类与基类或基类之间有相同成员时,访问派生类中的同名成员方法:派生类对象.同名成员名访问基类中被覆盖的同名成员方法:派生类对象.基类名:同名成员名,1.虚基类的作用,作用派生类在继承间接共同基类时只保留一份成员,从而解决多层继承时可能发生的对同一基类继承多次而产生的二义性问题。声明class派生类名:virtual继承方式基类名,如:classA:virtualpublicN注意在第一级继承时就要将共同基类设计为虚基类,类的继承举例1:classNpublic:inta;Voiddisplay()cout“N:a=“display(),pt是一个基类的指针),可以调用同一类族中不同类的虚函数。这就是多态性,对同一消息,不同对象有不同的响应方式。,(1)在基类用virtual声明成员函数为虚函数。在派生类中重新定义同名函数,让它具有新的功能。(2)在派生类中重新定义此函数时,要求函数名、函数类型、参数个数和类型与基类的虚函数相同,根据需要重新定义函数体。C+规定,当一个成员函数被声明为虚函数后,其派生类中的同名函数自动成为虚函数。(3)定义一个指向基类对象的指针变量,并让它获得同一类族中某个对象的地址。(4)用该指针变量调用虚函数,调用的就是该对象所属类的虚函数。,虚函数的使用方法,例:虚函数用法,#include#includeusingnamespacestd;classbasepublic:virtualvoidFn()cout“在基类内”endl;classsubclass:publicbasepublic:virtualvoidFn()cout“在派生类内”endl;,test20,voidtest(base,运行结果:,n执行bc=sc后,调用test(bc)在基类内调用test(bsc)在基类内执行bsc=纯虚函数作用在许多情况下,基类中不能为虚函数给出一个有意义的定义,而将它说明为纯虚函数,其作用是:为派生类提供一个一致的接口(界面)。它的定义留给派生类来做,派生类根据需要来定义各自的实现。,6.4.2抽象类,何为抽象类带有纯虚函数的类是抽象类抽象类的任务一般只描述这组子类共同操作接口,而完整的实现留给子类。抽象类的说明抽象类是一个特殊的类,只能用作其他类的基类,抽象类是不能定义对象的。,作业,P219习题2,3,7.1C+的输入和输出7.2标准输出流7.3标准输入流7.4文件操作与文件流7.5字符串流,第七章输入输出流,C+中的流类,类名,作用,头文件,iosistreamostreamiostreamifstreamofstreamfstreamistrstreamostrstreamstrstream,抽象基类通用输入流和其他输入流基类通用输出流和其他输出流基类通用输入输

温馨提示

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

评论

0/150

提交评论