已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
0、概述1、结构化的程序设计、面向对象的程序设计的基本思想。l 结构化的程序设计将数据和对数据的操作分离,程序是由一个个的函数组成的。l 面向对象的程序设计将数据和操作封装在一起,程序是由一个个对象组成的,对象之间通过成员函数进行通信,它能够较好地支持程序代码的复用。2、面向对象的程序设计有四大特征,它们是封装性、继承性、多态性、抽象性。面向过程的程序设计中程序模型描述为 (1) ,面向对象程序设计的程序模型可描述为 (2) 。(1)“程序=算法+数据结构”。其数据与数据处理是分离的。(2)程序=对象+对象+对象;对象=(算法+数据结构)。注:l 在C语言中,编程的单位是函数;而在C+语言中,编程的单位是类l C+语言对C语言作了很多改进,其是C+引进了类和对象的概念;使得C+语言发生了质变,从面向过程变成了面向对象。一、 C+语言对C的扩充1. 输入输出语句:标准的I/O流、文件流2. string类型与string流3. 向量(vector)P88迭代器(interator)l 迭代器是指针概念的泛型化,它指向容器中的元素,它能象指针一样增减,轮流指示容器中每个元素。所以说迭代器是面向对象版本的指针。l 迭代器可以包括指针,但迭代器又不仅仅是一个指针。 迭代器类型变量的使用:v vector:iterator it; /it为向量中的迭代器v for( it=a.begin(); it!=a.end(); +it ) cout*it ;如:v iterator insert(iterator it,const T&x=T()/把元素x插入到it指向的元素之前v iterator erase(iterator it) /删除it指向的元素v iterator erase( iterator first, iterator last) /删除first,last范围指向的元素4. 引用类型作为:函数参数类型、函数的返回值类型(注意被引用的实体必须是存在)5. 函数重载和默认参数注意:默认参数的规则:默认参数只能在声明时给出,无默认值的参数在前,有默认值的参数在后二、类要求: 1. 掌握类定义、类成员的访问权限(public、protected、private);能够根据给定的要求定义类,并实现类的成员函数; 类是对具有共同属性和行为的一类事物的抽象描述,在C+语言中,共同属性被描述为类中的数据成员,共同行为被描述为类中的成员函数。 this指针:每一个非静态的成员函数都有一个this指针;当该成员函数被调用时, this指针会指向调用它的对象。例如: return *this; 返回的是调用该成员函数的对象(或 对象引用)2. 常成员函数的定义与使用;成员函数的重载;默认参数的形式; 常成员函数的定义格式:类型说明符 函数名(参数表)const注:常成员函数不能修改所捆绑对象的数据成员,也不能调用非const函数。class Examplepublic:Example(int y=10)data=y;int getData() const return +data; /常成员函数不能修改所捆绑对象的数据成员private: int data; 函数默认参数的规则:默认参数值只是在函数声明时描述,默认参数值只能从后往前设置。如:class Aint a,b;public: A(int aa, int bb=0);A:A(int aa, int bb)a=aa; b=bb;3. 静态数据成员和静态成员函数的定义和使用;注:l 静态数据成员是类的所有对象中共享的成员l 静态成员函数只能直接访问类中的静态成员,若要访问类中的非静态成员时,必须借助对象名、引用或指向对象的指针。 #include using namespace std;class CSampleprivate: int i; static int k;public: CSample() i=0; k+; void Display()couti=i,k=kendl;int CSample:k=0;/静态数据成员初始化在类外void main() CSample a,b; a.Display(); b.Display();答: i=0,k=2 i=0,k=2#include using namespace std;class Sample int A; static int B; public: Sample(int a)A=a; B+=a; static void print(Sample s); ; void Sample:print(Sample s) coutA=s.A,B=B、)的重载;例:填上合适的语句,使程序的运行结果为200。#include class numberprivate:int val;public:number(int i)val=i; ;int operator+( int i, number n) ;void main() number n(100);int i=100;couti+nendl;/运算符+需要重载,因为n是自定义类的对象 三、对象生灭要求: 1. 掌握类的构造函数的定义方法,理解构造函数的作用。能够根据要求正确定义构造函数,能够重载构造函数。注意构造函数与对象定义之间的关系,以及缺省构造函数的作用; 2. 掌握类的成员初始化,能够利用成员初始化参数表初始化成员;以及对象的构造顺序。 3. 理解析构函数的含义和析构函数的定义方式,能够根据类的逻辑正确地实现析构函数; 4. 常对象应在定义时给予初始化,只能调用常成员函数;但构造函数和析构函数对这个规则例外,它们从不定义为常成员函数,但可被常对象调用(被自动调用)。#includeusing namespace std;class Rpublic:R(int r1,int r2) R1=r1;R2=r2;void print()coutR1,R2endl;void print() const coutconst:R1,R2endl;private:int R1,R2;void main()R a(5,4);a.print();const R b(20,52); /b是常对象b.print();运行结果:5. 掌握拷贝构造函数的使用; 什么情况下调用了拷贝构造函数? 用类的一个对象去初始化该类的另一个对象时使用。 当函数的形参是类的对象,调用函数时,进行形参与实参结合时使用。 当函数的返回值是类对象,函数执行结束返回调用者时使用。例:根据给定的程序执行结果,将下列程序补充完整。#include using namespace std;class Sample int x; public: Sample(); Sample(int a)x=a; Sample( ) void disp()coutx=xendl; ; void main() Sample s1(2), s2 ; s2.disp(); 程序的执行结果:x=2。四、继承要求: 1. 理解继承的含义和作用,掌握派生类的定义方法和实现:作用:利用继承能够实现软件复用。这种实现缩短了程序的开发时间,促使开发人员复用已经侧试和调试好的高质量软件2. 掌握派生类的构造方法和顺序,当基类构造函数含有参数时,在定义派生类的构造函数时须提供基类构造函数所需要的参数。3. 理解在公共继承、保护继承、私有继承方式下,派生类对象和成员对基类成员的访问权限(见课件)4. 区别继承和组合在实现上的差异。5. 掌握赋值兼容规则。基类对象可以使用公有派生类对象来代替,包括:派生类对象可以赋值给基类对象;派生类对象可以初始化基类对象的引用;基类类型指针可以指向派生类对象。6. 掌握多重继承技术和虚拟继承作用。注:l 在多重继承情况下,基类的构造函数的执行顺序不是取决于初始化列表中的顺序。而是按派生类声明时基类的顺序。l 在多重继承中,如果多条继承路径上有一个公共的基类,则在这些路径的汇合点上的派生类会产生来自不同路径的公共基类的多个拷贝,如果用virtual把公共基类定义成虚基类,则只会保留公共基类的一个拷贝。l 虚拟继承为了解决多重继承中的同名冲突造成的二义性五、多态要求: 1. 理解多态性多态性:多态是指同样的消息被不同类型的对象接收后导致完全不同的行为。l 多态从实现的角度来讲可以划分为两类: 编译时的多态和运行时的多态。l 多态实现的条件:继承体系结构下,存在同名同型的虚函数;使用基类指针指向或引用派生类的对象。#includeusing namespace std;class BASE public: void getxy(int i, int j=0)x=i; y=j; virtual void fun()coutBASE:x=xty=yendl;protected: int x,y;class A: public BASEpublic: void fun() coutA:x=xty=ygetxy(10); pb-fun(); /多态2. 理解虚函数在类的继承层次中的作用及其使用。在使用虚析构函数时要注意以下几点: (1) 只要基类的析构函数被声明为虚函数,则派生类的析构函数,无论是否使用virtual关键字进行声明,都自动成为虚函数。 (2) 如果基类的析构函数为虚函数,则当派生类未定义析构函数时,编译器所生成的默认析构函数也为虚函数; (3) 当使用delete运算符删除一个对象时,隐含着对析构函数的一次调用,如果析构函数为虚函数,则这个调用采用动态联编。动态联编可以保证析构函数被正确执行。(见课件的例子)#include using namespace std;class AAint a;public:AA(int i) a=i; coutAA=aendl;virtual AA() coutAA=aendl;class BB:public AA int b;public:BB(int i, int j):AA(i) b=j; coutBB=bendl;BB() coutBB=bendl;void main()AA *pb=new BB(6,9);delete pb; 运行结果:六、抽象类要求: 1. 掌握纯虚函数的作用和定义、抽象类的概念抽象类具有下述一些特点:(1) 抽象类只能作为基类使用,其纯虚函数的实现由派生类给出;但派生类仍可不给出纯虚函数的定义,继续作为抽象类存在。(2) 抽象类不能定义对象。但可以声明一个抽象类的指针和引用。通过指针和引用,可以指向并访问派生类对象,进而访问派生类的成员,这种访问是具有多态特征的。七、模板要求: 1. 模板是为了实现代码的重用。模板包括函数模板和类模板。 掌握函数模板的定义和用法。v 函数模板既可以与函数模板重载,也可以与非函数模板重载 掌握类模板的定义和实现例:编写一函数模板返回数组的最小值,数组的类型可为整型、字符串型或双精度实型,并编程进行测试。#include template /T为形式化类型参数T min_array( ,int n)T min= ;for(int i=1;in;i+)if(arrimin) ;return min;void main()int a6=90,-83,12,106,34,0;coutMin integer of arrar is: min_array(a,6)endl;string s2=abcd,ab;coutMin char of arrar is: min_array(s,2)endl;double d6=3.14,-83.2,12.45,46.9,34.7,0.0;coutMin double of arrar is: min_array(d,6)endl;例:有下面6个重载的plus函数,请编写一个函数模板替代它们:int plus(int x,int y) return x+y; int plus(float x,float y) return x+y; int plus(double x,double y) return x+y; int plus(float x,int y) return x+y; int plus(int x,float y) return x+y; int plus(double x,int y) return x+y; 答案:templateint plus
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高校事业编聘用合同
- 2025-2030智能包装行业风险投资发展分析及投资融资策略研究报告
- 2025-2030智能光纤网络运维系统市场空间与商业模式创新研究
- 跟租客没签合同
- 房面合租合同
- 农户种植合同
- 2025年高考政治答题题库及答案
- 深入解读汉字世界
- 生物进化之旅
- 2025年度家具退换货承诺书及服务细则
- 制冷初级工培训课件
- 2025年初级养老护理员考试理论知识模拟试题(带答案)
- 甘肃教辅管理办法
- 《HJ 212-2025 污染物自动监测监控系统数据传输技术要求》
- 档案管理考试题库及答案
- 中老年健身知识培训课件
- 急性腹痛的鉴别与护理
- 电价分类介绍课件
- 美术山楂树课件
- 电动公交安全培训
- vocs台账管理制度
评论
0/150
提交评论