




已阅读5页,还剩75页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数 据 结 构 与 算 法 分 析 从 C 语言 到 C+语言 数 据 结 构 与 算 法 分 析 C+的学习用书 v任何一本你能接触到的 C+编程书籍 v谭教授的书 v清华 王燕 面向对象的理论与 C+实践 v航空工业 赵建周 C和 C+程序设计教 程 数 据 结 构 与 算 法 分 析 C与 C+的不同 vC+在代码上对 C的扩充 v大不相同 C: 面向过程 C+: 面向对象 数 据 结 构 与 算 法 分 析 面向过程程序设计 C 语言 v选定数据结构、设计算法过程或函数。程 序执行被看作各过程调用的序列。 v面向过程编程: 程序 = 数据结构 + 算法 v设计思路 自顶向下、逐步求精。采用模块分解与功能抽 象,自顶向下、分而治之。 v炒菜吃 种菜、洗菜、切菜、炒菜 数 据 结 构 与 算 法 分 析 面向 过程 的 结构化 程序设计方法 v缺点:可重用性差、数据安全性差、难以开 发大型软件和图形界面的应用软件 把数据和处理数据的过程分离为相互独立的实体 。 当数据结构改变时,所有相关的处理过程都要进 行相应的修改。 每一种相对于老问题的新方法都要带来额外的开 销。 图形用户界面的应用程序,很难用过程来描述和 实现,开发和维护也都很困难。 数 据 结 构 与 算 法 分 析 面向对象程序设计 C+ 语言 v将数据及对数据的操作方法封装在一起,作为一 个相互依存、不可分离的整体 对象。 v对同类型对象抽象出其共性,形成类。 v主要特征是各对象之间的消息传递和各类之间的 继承。 v类通过一个简单的外部接口,与外界发生关系。 v对象与对象之间通过消息进行通信。 数 据 结 构 与 算 法 分 析 面向对象程序设计 v一个类的集合和各类之间以继承关系联系起 来的结构,再加上一个主程序,在主程序中定 义各对象并规定它们之间传递消息的规律。 v面向对象编程: 对象 = 数据结构 + 算法 (封装 ); 程序 = 对象 + 对象 + 对象 + v炒菜吃: 买净菜、按照烹调说明书炒菜 数 据 结 构 与 算 法 分 析 面向对象程序设计 v优点: 程序模块间的关系更为简单,程序模块的独立 性、数据的安全性就有了良好的保障。 通过继承与多态性,可以大大提高程序的可重 用性,使得软件的开发和维护都更为方便。 数 据 结 构 与 算 法 分 析 C语言中的关键字 vAuto break case char continue default do double else entry enum extern for float goto if int long register return short signed sizeof static struct switch typedef union unsigned while 数 据 结 构 与 算 法 分 析 C+语言中的关键字 vAsm auto break case catch* cdecl char class* const continue default delete* do double else enum extern far float for friend* goto huge if inline* int interrupu long near new* operator* pascal private* protected* public* register return short signed sizeof static struct switch template* this* throw* try* typedef union unsigned virtual* void volatile while 数 据 结 构 与 算 法 分 析 C+ 对 C的保留 vC+具有对传统 C语言的向后兼容性,很多 已有的 C程序可以稍加改造就可以重用。 v虽然 C+具备面向对象的处理能力,但它 还是保留了很多面向过程的东西。用 C+完 全可以不用面向对象的思想来进行程序设计 ,当然人们不会这样去做 除了那些只是 把 C+看成是 C扩充的初学者。 数 据 结 构 与 算 法 分 析 C+对 C在代码上的扩充 vcout 代替 printf, scanf Printf, scanf 都必须配合 %d、 %f等格式控制符使用 Cout后面直接跟上操作数即可,不用格式控制 符; vnew, delete 代替 malloc, free New自动计算要分配的类型大小,省事,避免偶然错误 ; 它自动返回正确的指针类型,不必进行类型转换; 可以用 new将 分配的对象初始化; 数 据 结 构 与 算 法 分 析 一个 简单 的 C+ 程序 例子 #include #include void main() string user_name; cout user_name; cout ”操作符 指针 - 类成员函数 数 据 结 构 与 算 法 分 析 类的声明 v成员数据:与一般的变量声明相同,但需要将它放 在类的声明体中。 v成员函数:称为 “方法 ”,一个方法对应一个操作。 可以在类中说明原型,在类外给出函数体实现,并在 函数名前使用类名加以限定。也可以直接在类中给出 函数体,形成内联成员函数。 v一般而言,数据成员用 private,成员函数用 public只 有被声明为 public的方法 (成员函数 )才能被外界所激活 v简单的成员函数的实现直接嵌入类的声明中 (inline) ,复杂的则可写在外面。 数 据 结 构 与 算 法 分 析 类与对象 对象 v类的对象是该类的某一特定实体,即类类 型的变量。 v声明形式: 类名 对象名; v例: Clock myClock; 数 据 结 构 与 算 法 分 析 类中成员的访问方式 v类中成员互访 直接使用成员名 v类外访问:外界通过发 “消息 ”来激活有关方法,所 谓消息,其实就是一个命令,由程序语句来实现 使用 “对象名 .成员名 ”方式访问 public 属性的成员, 注:类外部不能访问私有性成员,只有本类中的函数可 以访问 。 v如: myClock. ShowTime( )就是向对象 myClock发 出一个消息,通知它执行 display方法 数 据 结 构 与 算 法 分 析 一个例子 int main() Clock myClock; myClock.SetTime(8,30, 30); myClock.ShowTime(); #include class Clock /类的声明略 /类的实现略 数 据 结 构 与 算 法 分 析 构造函数 v构造函数的作用是在对象被创建时使用特定的值 构造对象,或者说将对象 初始化 为一个特定的状态 。(在声明对象时进行的数据成员设置,称为对象 的初始化。) v构造函数也是成员函数,被声明为公有型,与类 名同名,无返回值。 v构造函数在对象创建时 由系统自动调用 。 v构造函数也可以被重载,在对象创建时 由系统自 动调用 。 v如果程序中未声明,则系统自动产生出一个 默认 形式 的构造函数,该函数没有参数,不进行任何操 作 数 据 结 构 与 算 法 分 析 构造函数举例 class Clock public: Clock(int NewH,int NewM,int NewS);/构造函 数 void SetTime(int NewH,int NewM,int NewS); void ShowTime(); private: int Hour,Minute,Second; ; 数 据 结 构 与 算 法 分 析 构造函数的实现: Clock:Clock(int NewH, int NewM, int NewS) Hour= NewH; Minute= NewM; Second= NewS; 建立对象时构造函数的作用: int main() Clock c(0,0,0); /隐含调用构造函数,将初始值作为实参。 c.ShowTime(); 数 据 结 构 与 算 法 分 析 析构函数 v“清理善后 ”:在撤销对象时,系统自动调用析构 函数 (destructor),释放此对象所属的空间。 v析构函数名:与类名相同,只是在函数名前面加 一个 “ ”,以区别于构造函数 v只能用一个析构函数,不能重载 v若用户未编写析构函数,编译系统会自动生成一 个缺省的析构函数,它不进行任何操作 数 据 结 构 与 算 法 分 析 构造函数和析构函数举例 #include class Point public: Point(int xx,int yy); Point(); /.其他函数原型 private: int X,int Y; ; Point:Point(int xx=0,int yy=0) X=xx; Y=yy; Point:Point() /.其他函数的实现略 Point PointA /点 A(0,0) Point PointB(4,5) / B(4,5) 数 据 结 构 与 算 法 分 析 类的应用举例 1 #include class Clock /时钟类的声明 public: /外部接口,公有成员函数 void SetTime(int NewH = 0, int NewM = 0, int NewS = 0); void ShowTime(); private: /私有数据成员 int Hour, Minute, Second; ; 数 据 结 构 与 算 法 分 析 /时钟类成员函数的具体实现 void Clock:SetTime(int NewH, int New , Mint NewS) Hour=NewH; Minute=NewM; Second=NewS; void Clock:ShowTime() cout #include /数学公式的头文件 int main() Rectangle rect; rect.InitR(2,3,20,10); /设置长方形 rect.Move(3,2); /通过派生类对象访问基类公有 成员 couta) a=b; v if (ca) a=c; v return a; v double max2 (double a, double b, double c) 类型不同的数据间比较需分别调用两个不 同名的函数来实现。 a1、 b1、 c1为 int 型: max1(a1,b1,c1) a2、 b2、 c2为 double型: max2(a2,b2,c2) 数 据 结 构 与 算 法 分 析 函数重载的一个例子 C+ 中 vint max (int a, int b, int c) v v if (ba) a=b; v if (ca) a=c; v return a; v double max (double a, double b, double c) if (ba) a=b; if (ca) a=c;r eturn a; a1、 b1、 c1为 int 型: max(a1,b1,c1) a2、 b2、 c2为 double型: max(a2,b2,c2) 类型不同的数据间比较可以使用同名的函 数来实现,程序自动判断选择合适的类型 。 数 据 结 构 与 算 法 分 析 运算符重载 例 8-1 将 “ +” 、 “ -” 运算重载为复 数类的成员函数。 v 规则 : 实部和虚部分别相加减。 v 操作数 : 两个操作数都是复数类的对象。 数 据 结 构 与 算 法 分 析 #include class complex /复数类声明 public: /外部接口 complex(double r=0.0,double i=0.0)real=r;imag=i; /构造函数 complex operator + (complex c2); /+重载为成员函数 complex operator - (complex c2); /-重载为成员函数 void display() cout class Point public: Point(double i, double j) x=i; y=j; double Area() const return 0.0; private: double x, y; ; class Rectangle:public Point public: Rectangle(double i, double j, double k, double l); double Area() const return w*h; private: double w,h; ; 数 据 结 构 与 算 法 分 析 Rectangle:Rectangle(double i, double j, double k, double l) :Point(i,j) w=k; h=l; void fun(Point y=j; virtual double Area() const return 0.0; / virtual:虚 函数 private: double x, y; ; class Rectangle:public Point public: Rectangle(double i, double j, double k, double l); virtual double Area() const return w*h; / virtual:虚 函数 private: double w,h; ;/其他函数同上例 数 据 结 构 与 算 法 分 析 vvoid fun(Point if (ca) a=c; return a; 模板 (template) double max(float a, float b, float c) if (ba) a=b; if (ca) a=c; return a; 这两个重载的函数,有 很多相同的代码,能不 能充分利用这些相同的 代码?提高软件的开发 效率 数 据 结 构 与 算 法 分 析 函数模板 v函数模板可以用来创建一个通用功能的函数 ,以支持多种不同的形参,简化重载函数的函 数体设计。 v函数模版定义形式为: template 函数定义 数 据 结 构 与 算 法 分 析 函数 模板 (template) template T max( T a, T b, T c) if (ba) a=b; if (ca) a=c; return a; max就是 函数模板 Void main() int a1=10,a2=15,a3= 20; double a1=1.5,a2=5.5,a3=2.3 ; max (a1,b1,c1) max (a2,b2,c2) 编译器从调用 max()时实参的类型自动推导出函数模 板的类型参数。实际执行: int max (int a, int b, int c) double max(float a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年教师招聘之《小学教师招聘》预测试题附参考答案详解【考试直接用】
- 2025年学历类自考儿科护理学(二)-工商行政管理学概论参考题库含答案解析(5卷)
- 2025年学历类自考传播学概论-学前教育学参考题库含答案解析(5卷)
- 2025年教师招聘之《小学教师招聘》考试题库(研优卷)附答案详解
- 2025年学历类自考中国现代文学史-企业经营战略概论参考题库含答案解析(5卷)
- 2025年学历类自考中国法律思想史-比较教育参考题库含答案解析(5卷)
- 代办营业执照合同(标准版)
- 2025往年成人自考试题及答案
- 2025年学历类自考中国古代文学史(二)-学前教育史参考题库含答案解析(5卷)
- 2025唐诗风貌自考试题及答案
- 挂篮检查验收记录表
- 专业技术职务资格申报材料真实性承诺书
- 脓毒症指南课件
- 生产副总经理岗位职责标准版本(五篇)
- 对颈椎概念和命名的再认识
- 华为信息安全宣传
- 物业管理供方管理程序
- GB/T 37642-2019聚己内酯(PCL)
- GB/T 3730.2-1996道路车辆质量词汇和代码
- GB 25585-2010食品安全国家标准食品添加剂氯化钾
- 设计文件审核记录表(模本)
评论
0/150
提交评论