C面向对象程序涉及复习要点重点复习实用教案_第1页
C面向对象程序涉及复习要点重点复习实用教案_第2页
C面向对象程序涉及复习要点重点复习实用教案_第3页
C面向对象程序涉及复习要点重点复习实用教案_第4页
C面向对象程序涉及复习要点重点复习实用教案_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

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

文档简介

1、第第1章复习章复习(fx)要点要点 简单( jindn)的C+程序#include / 用cout输出时需要用 / 此头文件using namespace std; / 使用命名(mng mng)空间stdint main() coutThis is a C+ program.n; / 用C+的方法输出一行 return 0;第1页/共74页第一页,共75页。 输入和输出格式:coutendl表示结束一行数据类型 const 常量定义 const float PI = 3.14159;占用存储单元,只读不可写 函数原型声明 格式:函数类型 函数名(参数列表); int max(int x, i

2、nt y); 要求:函数调用之前必须(bx)对所调用的函数作函数原型声明第2页/共74页第二页,共75页。 函数重载 定义(overload) 要求:参数个数或参数类型不同 有默认参数的函数 格式(g shi):float area(float r=6.5) 与函数重载的关系第3页/共74页第三页,共75页。函数模版、函数重载函数模版、函数重载(zhn zi)例题例题1、对重载函数形参的描述中,错误的是 A. 参数的个数可能不同 B. 参数的类型(lixng)可能不同C. 参数的顺序可能不同 D. 参数的个数、类型(lixng)、顺序都相同,只是函数的返回值类型(lixng)不同D第4页/共7

3、4页第四页,共75页。 变量的引用* 函数传值与函数传地址 对比(dub)引用与指针:P19 例1.10&1.11 内置函数 inline 作用:空间换时间 作用域运算符 :第5页/共74页第五页,共75页。 字符串变量 string 定义,与字符数组的关系(gun x) 赋值 字符串操作:复制、连接、比较 new和delete运算符第6页/共74页第六页,共75页。例题例题(lt)1、对于动态分配内存空间描述正确的是 A使用new运算符分配的内存空间的长度必需是常量(chngling) Bdelete运算符可以释放动态的存储空间和静态的存储空间C由new分配的内存空间是不连续的Dde

4、lete运算符只能释放由new分配的动态存储空间 D第7页/共74页第七页,共75页。什么什么(shn me)是是蓝?蓝?类与对象(duxing)第8页/共74页第八页,共75页。类和对象类和对象(duxing) 在C+中,类是一种(y zhn)数据类型。int x;class student std1; 基本(jbn)数据类型用户定义数据类型变量(实例)对象(实例)第9页/共74页第九页,共75页。 1.类的声明与对象的定义(dngy) 2.类的数据成员与成员函数 3.对象成员的访问 4.构造函数与析构函数 5. Const 6. Static 7. New与delete 8. 拷贝构造函数

5、 9. 友元第10页/共74页第十页,共75页。第第2章章 要点要点(yodin)复习复习 基本概念对象(duxing)封装与信息隐蔽抽象继承与重用多态性第11页/共74页第十一页,共75页。 声明(shngmng)类类型*class CGoods private : char Name21 ; int Amount ; float Price ; float Total_value ;public : void CountTotal(void) ; ;1. class关键字2. 类名(li mn)3. 类体 ; 格式4. 类数据成员5. 类成员函数6. 访问限定符 第12页/共74页第十二页

6、,共75页。 定义对象的方法 1. 先声明类类型(lixng),然后再定义对象 class Student stud1; Student stud1; 2. 在声明类类型(lixng)的同时定义对象 class Student stud1; 3. 不出现类名,直接定义对象 class stud1;第13页/共74页第十三页,共75页。 类与结构( jigu)体类型的异同 1.用class声明的类如果不带成员访问限定符,所有成员默认限定为private;2.用struct声明的类如果不带成员访问限定符,所有成员默认限定为public。第14页/共74页第十四页,共75页。 类成员(chngyun

7、) 数据成员(chngyun)/成员(chngyun)变量 - private 成员(chngyun)函数/成员(chngyun)方法 - publicinline成员函数成员函数的存储(cn ch)方式第15页/共74页第十五页,共75页。 成员(chngyun)函数的存储方式数据区代码区对象1对象数据区代码区对象数据区代码区数据区对象1数据区对象数据区对象公共代码区第16页/共74页第十六页,共75页。 对象成员(chngyun)的访问* 对象名+成员(chngyun)运算符 stud1.num =1001; 对象指针 Student *p=&stud1; pnum =1001;

8、对象引用 Student &s=stud1; s.num =1001;第17页/共74页第十七页,共75页。 类的封装性和信息隐蔽 1.公用接口与私有实现的分离 2.类声明和成员函数定义(dngy)的分离P64-65 3.名词:对象、方法、消息 stud.display();第18页/共74页第十八页,共75页。第第3章复习章复习(fx)要点要点 构造函数* 构造函数是特殊的公有成员函数,其特征如下: 1.函数名与类名相同。2.构造函数无函数返回(fnhu)类型说明。注意是什么也不写,也不可写void!实际上构造函数有返回(fnhu)值,返回(fnhu)的就是构造函数所创建的对象。3.

9、在程序运行时,当新的对象被建立,该对象所属的类的构造函数自动被调用,在该对象生存期中也只调用这一次。4.构造函数可以重载。严格地讲,说明中可以有多个构造函数,它们由不同的参数表区分,系统在自动调用时按一般函数重载的规则选一个执行。第19页/共74页第十九页,共75页。5.构造函数可以在类中定义,也可以在类外定义。 6. 如果类说明中没有(mi yu)给出构造函数,则C+编译器自动给出一个缺省的构造函数: 类名(void) 但只要我们定义了一个构造函数,系统就不会自动生成缺省的构造函数。 只要构造函数是无参的或各参数均有缺省值的,C+编译器都认为是缺省的构造函数,并且缺省的构造函数只能有一个 。

10、第20页/共74页第二十页,共75页。构造函数的重载构造函数的重载(zhn zi)* 缺省构造函数 Time:Time() hour=0; minute=0; sec=0; Time t; 带参数的构造函数 Time:Time(int h, int m, int s) hour=h; minute=m; sec=s; Time t(13,10,11); 用参数初始化表 Time:Time(int h, int m, int s):hour(h),minute(m),sec(s) 使用(shyng)默认参数的构造函数 Time:Time(int h=13, int m=10, int s=11)

11、 hour=h; minute=m; sec=s; Time t;第21页/共74页第二十一页,共75页。 析构函数当一个对象定义时,C+自动调用构造函数建立该对象并进行初始化,那么当一个对象的生命周期结束时,C+也会自动调用一个函数注销该对象并进行善后工作,这个特殊的成员函数即析构函数(destructor):1. 构函数名与类名相同,但在前面(qin mian)加上字符,如CGoods()。2. 析构函数无函数返回类型,与构造函数在这方面是一样的。但析构函数不带任何参数。3. 一个类有一个也只有一个析构函数,这与构造函数不同。析构函数可以缺省。4. 对象注销时,系统自动调用析构函数。第22

12、页/共74页第二十二页,共75页。 调用(dioyng)构造函数和析构函数的顺序第23页/共74页第二十三页,共75页。构造函数构造函数(hnsh)和析构函数和析构函数(hnsh)例题例题1. 在下面有关对构造函数的描述中,正确的是 。A. 构造函数可以带有返回值B. 构造函数的名字与类名完全相同C. 构造函数必须(bx)带有参数D.构造函数必须(bx)定义,不能缺省2在下面有关析构函数特征的描述中,错误的是 。A. 一个类中只能定义一个析构函数B. 析构函数名与类名完全相同C. 析构函数不能指定返回类型D. 析构函数不能带有参数3假定AB为一个类,则执行“AB a(4) , b3 , * p

13、2 ;”语句时,自动调用该类构造函数的次数为 。3 B. 4 C. 6 D. 94.对于任意一个类,析构函数的个数最多为( B ) A.0 B.1 C.2 D.3第24页/共74页第二十四页,共75页。 对象数组对象数组的定义、初始化、建立(jinl)数组的同时调用构造函数P82 例3.6 对象指针*1.指向对象的指针2.指向对象成员的指针2.1.指向对象数据成员的指针2.2.指向对象成员函数的指针3. this指针 P85 例3.7 this指针的作用第25页/共74页第二十五页,共75页。共用共用(n yn)数据的保护数据的保护 Const 对内存(ni cn)的使用只读不可写(写在首次/

14、初始化完成)。 常对象 const Time t;或:Time const t; 常数据成员 const int hour; 常成员函数 void get_time() const;第26页/共74页第二十六页,共75页。 指向对象的常指针 Time * const p1 = & t1; 指向常对象的指针变量(binling) const Time *p1 = & t1; 对象的常引用 const Time &t= t1; void fun( const Time & t ); /不可改变t的值第27页/共74页第二十七页,共75页。对象的动态对象的动态(dng

15、ti)建立和释放建立和释放 new & delete Box *pt; pt = new Box; delete pt;第28页/共74页第二十八页,共75页。静态静态(jngti)成员成员Static 由关键字static修饰说明的类成员,成为(chngwi)静态类成员(static class member)。虽然使用static修饰说明,但与函数中的静态变量有明显差异。类的静态成员为其所有对象共享,不管有多少对象,静态成员只有一份存于公用内存中。第29页/共74页第二十九页,共75页。 静态数据成员初始化(只能在类体外进行初始化)既可以通过对象名引用,也可以通过类名(li mn)

16、来引用 静态成员函数 静态成员函数没有this指针 静态成员函数访问静态数据成员,不访问非静态成员第30页/共74页第三十页,共75页。 对象的赋值 对象的复制(fzh) 拷贝构造函数 类名 对象2(对象1) Box:Box(const Box& b) height=b.height; width=b.width; length=b.length; 第31页/共74页第三十一页,共75页。Static例题例题(lt)假定类AB中有一个公有属性的静态数据成员bb,在类外不通过对象名访问该成员bb的写法(xif)为 (1) 。 静态成员(static)属于_类_ ,而不属于_任何一个对象_

17、 ,它被同一个类的所有对象共享。 第32页/共74页第三十二页,共75页。 友元 友元函数(hnsh): friend void display(Time &); 友元成员函数(hnsh):friend void Time:display(Date &); 友元类 允许另一个类或函数访问你的类的东西(dngx)。Class APrivate:int i=0;Friend class b /声明Class B Void main() A a1=new A(); B b1= new B(); Int j=b1.i; 可直接访问A类里的如B是A的友元类,那么a对b完全开放包括priv

18、ate,也就是B可以访问A里任何东西(dngx)第33页/共74页第三十三页,共75页。友元例题友元例题(lt)13、关于友元函数 的描述(mio sh)中,错误的是 A. 友元函数不是成员函数 B. 友元函数只能访问类中私有成员C. 友元函数破坏隐藏性,尽量少用D. 友元函数说明在类体内,使用关键字friend B第34页/共74页第三十四页,共75页。 类模版(不考)第35页/共74页第三十五页,共75页。第第4章复习章复习(fx)要点要点 运算符重载的方法(fngf)*格式: 函数类型 operator 运算符名称(形参表列) 对运算符的重载处理复数+ P122 例4.2运算符重载的规则

19、 P124-126第36页/共74页第三十六页,共75页。 运算符重载的实现1.类成员(chngyun)函数 2.友元函数 参数个数参数个数参数次序参数次序类成员函数类成员函数参数个数参数个数=原操作数个原操作数个数数-1(后置(后置+、-除除外)外)左侧为类类型左侧为类类型友元函数友元函数参数个数参数个数=原操作数个原操作数个数数,且至少应该有一,且至少应该有一个自定义类型的形参。个自定义类型的形参。随意随意第37页/共74页第三十七页,共75页。 双目运算符重载P134 例4.4 单目运算符重载 区别 “前置和后置” 重载流插入运算符和流提取(tq)运算符*重点是格式:友元函数/普通函数

20、istream & operator (istream & ,自定义类 &); ostream & operator (ostream & ,自定义类 &);第38页/共74页第三十八页,共75页。 不同类型(lixng)数据间的转换(不考)第39页/共74页第三十九页,共75页。运算符重载运算符重载(zhn zi)例题例题假定(jidng)要对类AB定义加号操作符重载成员函数,实现两个AB类对象的减法,并返回相减结果,则该成员函数的声明语句为:( )A、 AB & operator - ( ) B、 AB operator -(AB &

21、amp; a)C、 operator -(AB a) D、 AB operator -(AB & a , AB & b)B 第40页/共74页第四十页,共75页。第第5章复习章复习(fx)要点要点 面向对象程序设计有4个主要特点(tdin):1.抽象2.封装3.继承4.多态性第41页/共74页第四十一页,共75页。青处于青处于(chy)蓝,而胜于蓝蓝,而胜于蓝 继承(inheritance)机制是面向对象程序设计(chn x sh j)使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生新的类,称派生类。继承呈现了面向对象程序设计(ch

22、n x sh j)的层次结构。体现了由简单到复杂的认识过程。 多态性(polymorphism)多态性是考虑在不同层次的类中,以及在同一类中,同名的成员函数之间的关系问题。函数的重载,运算符的重载,属于编译时的多态性。以虚函数为基础的运行时的多态性是面向对象程序设计(chn x sh j)的标志性特征。 体现了类推和比喻的思想方法。第42页/共74页第四十二页,共75页。派生类的声明派生类的声明(shngmng)方式方式 定义(dngy)格式* class 派生类名:访问限定符 基类名1,访问限定符 基类名2,访问限定符 基类名n private: 成员表1; /派生类增加或替代的私有成员 p

23、ublic:成员表2; /派生类增加或替代的公有成员 protected:成员表3; /派生类增加或替代的保护成员 ;/分号不可少第43页/共74页第四十三页,共75页。继承继承(jchng)过程过程编制(binzh)派生类时可分四步 吸收(xshu)基类的成员 改造基类成员 发展新成员 重写构造函数与析构函数 不论是数据成员,还是函数成员,除构造函数与析构函数外全盘接收 声明一个和某基类成员同名的新成员,派生类中的新成员就屏蔽了基类同名成员称为同名覆盖(override) 派生类新成员必须与基类成员不同名,它的加入保证派生类在功能上有所发展。 第44页/共74页第四十四页,共75页。派生类的

24、构成派生类的构成(guchng)*第45页/共74页第四十五页,共75页。继承继承(jchng)分类分类基类1基类2基类n派生类1派生类2基类派生类1派生类2(a)多重继承(jchng) (b)单继承(jchng) 一个基类可以直接派生出多个派生类 派生类可以由多个基类共同派生出来,称多重继承。第46页/共74页第四十六页,共75页。派生类成员的访问派生类成员的访问(fngwn)属性属性*第47页/共74页第四十七页,共75页。 多级派生时的访问(fngwn)属性P164 例5.4第48页/共74页第四十八页,共75页。继承继承(jchng)例题例题1在公有继承的情况(qngkung)下,基类

25、成员在派生类中的访问权限 。A受限制 B. 保持不变 C. 受保护 D. 不受保护9.在公有派生情况下,有关派生类对象和基类对象的关系,不正确的叙述是( A ) A.派生类的对象可以(ky)赋给基类的对象 B.派生类的对象可以(ky)初始化基类的引用 C.派生类的对象可以(ky)直接访问基类中的成员 D.派生类的对象的地址可以(ky)赋给指向基类的指针第49页/共74页第四十九页,共75页。派生类的构造函数派生类的构造函数(hnsh)和析构函数和析构函数(hnsh)*执行派生类构造函数的顺序是:调用基类构造函数,初始化基类数据成员(chngyun)调用子对象构造函数,初始化子对象数据成员(ch

26、ngyun)执行派生类构造函数,初始化派生类数据成员(chngyun)执行派生类析构函数的顺序是:调用派生类析构函数,清理派生类增加数据成员(chngyun)调用子对象析构函数,清理子对象数据成员(chngyun)调用基类析造函数,清理基类数据成员(chngyun)第50页/共74页第五十页,共75页。构造函数构造函数(hnsh)和析构函数和析构函数(hnsh)次序例题次序例题#include using namecpace std;class B1/基类B1声明(shngmng) public:B1(int i) coutconstructing B1 iendl;B1() coutdest

27、ructing B1 endl;class B2/基类B2声明(shngmng)public:B2(int j) coutconstructing B2 jendl;B2() coutdestructing B2 endl;class B3/基类B3声明(shngmng)public:B3()coutconstructing B3 *endl;B3() coutdestructing B3 endl;class C: public B2, public B1, public B3public:C(int a, int b, int c, int d): B1(a),memberB2(d),me

28、mberB1(c),B2(b)private:B1 memberB1;B2 memberB2;B3 memberB3;void main()C obj(1,2,3,4); 第51页/共74页第五十一页,共75页。constructing B2 2constructing B1 1constructing B3 *constructing B1 3constructing B2 4constructing B3 *destructing B3destructing B2destructing B1destructing B3destructing B1destructing B2第52页/共74

29、页第五十二页,共75页。派生类构造函数一般形式: 派生类名:派生类名 (总参数表): 基类名(实参表 ), 子对象(duxing)名(参数表) 派生类新增成员的初始化语句; 第53页/共74页第五十三页,共75页。 多层派生时的构造函数(hnsh) P172 例5.7 派生类的析构函数(hnsh) 与构造函数(hnsh)一样,不能继承基类的。第54页/共74页第五十四页,共75页。派生类例题派生类例题(lt)类A与类B都有public数据(shj)成员f,类C公有继承A和B,类C有public数据(shj)成员f,类D保护继承C,d是类D的一个对象,从d访问类A的成员f的表达式是 。d.A:f

30、 第55页/共74页第五十五页,共75页。多重继承多重继承(jchng) 定义(dngy): class D: public A, private B, protected C 类D新增加的成员 多重继承派生类的构造函数 派生类构造函数名(总参数表):基类1构造函数(参数表),基类2构造函数(参数表),基类3构造函数(参数表) 派生类新增成员初始化语句 P176 例5.8第56页/共74页第五十六页,共75页。多重继承多重继承(jchng)的二义性的二义性 在多重继承时,基类与派生类之间,或基类之间出现同名成员时,将出现访问时的二义性(不确定性)采用同名隐藏规则或虚函数(仅针对成员函数)来解决

31、。 当派生类从多个(du )基类派生,而这些基类又从同一个基类派生,则在访问此共同基类中的成员时,将产生二义性采用虚基类来解决。int a;int a;int a;第57页/共74页第五十七页,共75页。 虚基类* P185 例5.9class A ;class B: virtual public A ;class C: virtual public A ;第58页/共74页第五十八页,共75页。 基类与派生类转换(zhunhun)* 大材小用第59页/共74页第五十九页,共75页。第第6章复习章复习(fx)要点要点一个接口(ji ku),多种方法多态性的概念(ginin)第60页/共74页第

32、六十页,共75页。 静态多态 在编译程序时系统就可以(ky)确定调用哪个函数,因此静态多态性又称编译时的多态性。静态多态性是通过函数重载实现的。 动态多态 在程序运行中才能确定操作所针对的对象。它又称运行时的多态性。动态多态性是通过基类与派生类转换+虚函数实现的。第61页/共74页第六十一页,共75页。多态性例题多态性例题(lt)C+语言(yyn)中的多态性分为 时多态性和运行时的多态性。编译(biny) 第62页/共74页第六十二页,共75页。虚函数虚函数(hnsh)* 虚函数是一个(y )类的成员函数,定义格式如下: virtual 返回类型 函数名(参数表); 关键字virtual指明该

33、成员函数为虚函数。virtual仅用于类定义中,如虚函数在类外定义,不可加virtual。 当某一个(y )类的一个(y )类成员函数被定义为虚函数,则由该类派生出来的所有派生类中,该函数始终保持虚函数的特征。第63页/共74页第六十三页,共75页。 当在派生类中重新定义虚函数(overriding a virtual function,亦译作超载或覆盖)时,不必(bb)加关键字virtual。但重新定义时不仅要同名,而且它的参数表和返回类型全部与基类中的虚函数一样,否则联编时出错。 虚函数与改造类成员,同名覆盖(override)有关:如未加关键字virtual,则是普通的派生类中的新成员函

34、数覆盖基类同名成员函数(当然参数表必须一样,否则是重载),可称为同名覆盖函数,它不能实现运行时的多态性。第64页/共74页第六十四页,共75页。 比较(bjio)有虚函数的override和无虚函数的override,访问成员第65页/共74页第六十五页,共75页。#include class B0public: void display() cout B0:display() endl; ;class B1 : public B0public: void display() cout B1:display() endl; ;class D1 : public B1public: void d

35、isplay() cout D1:display() display (); void main() B0 b0; B1 b1; D1 d1; B0 *p; p = &b0; fun(p); p = &b1; fun(p); p = &d1; fun(p); B0:display()B0:display()B0:display() 第66页/共74页第六十六页,共75页。#include class B0public: virtual void display() cout B0:display() endl; ;class B1 : public B0public:

36、void display() cout B1:display() endl; ;class D1 : public B1public: void display() cout D1:display() display (); void main() B0 b0; B1 b1; D1 d1; B0 *p; p = &b0; fun(p); p = &b1; fun(p); p = &d1; fun(p); B0:display()B1:display()D1:display() 第67页/共74页第六十七页,共75页。第68页/共74页第六十八页,共75页。 虚函数(hnsh)实现-虚函数(hnsh)表VPRT(不考)第69页/共74页第六十九页,共75页。 构造函数不能是虚函

温馨提示

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

最新文档

评论

0/150

提交评论