版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、面向对象程序设计C+ 总结复习,主 要内容,C+语言基础 面向过程和面向对象的编程风格 封装:类与抽象数据类型 对象的行为模型:客户/服务模式,事件驱动。 继承 多态性 接口、重载 STL “COM组件” 事件,C+语言基础,C+程序包含如下成分: 1)注释,2)include文件,3)变量,4)语句,5)函数,6)类 变量、指针和引用 例:int a=1; int *ip; ip= 2) try . catch( type expr) ,面向过程和面向对象的编程风格,面向过程 设计方法:自顶向下,函数分解函数。 程序:函数,函数层层调用。 面向对象设计方法: 模拟现实世界,自下而上组装对象。
2、主要步骤包括: 1)识别相关对象,将他们组织成为层次结构,例: 世界由对象组成(宝马车,冰箱,教师,数组),并以某种形式对这些对象分类(宝马车和桑车归于小汽车,冰箱电视机归于家电类).不同领域有不同的分类. 2)为类添加属性,添加行为(方法) 面向对象语言描述(程序): 类和对象不是一回事. 1)类(成员函数、成员变量) 类可以从基类继承 2)类的实例化(对象) 成员变量也可以是对象,组合其他对象 3) 对象的请求 (访问其成员) 有各种方法分类,常常很难判断出正确的抽象级别和合理的分类层次结构. 与现实世界结构最接近的可能是最好的软件的架构.,类,封装class 属性,包含的部件:成员变量
3、行为,操作:成员函数,方法 class 类名:public 基类名 private:成员变量;成员函数 /私有的,只有自身类成员函数才可以访问 public:成员变量;成员函数; /公有的 protected:成员变量;成员函数; /保护的,类体系成员函数才可以访问; 类是一个数据类型。 对象:类的实例,在使用一个对象前必须先实例化. Point pt(0,0); Point *ppt=new Point(0,0); 关系 笼统-具体关系 is a :类-对象 整体-部分关系has a:成员变量是对象,this 指针,设类有一个int m_x;成员变量,那么n个类的实例,内存中就有n个m_x变
4、量,m_x是this对象的成员变量. n个类的每个实例,并不意味内存有n个类的成员函数。被产生的代码几乎和我们已经为C 库写的一样高效。 void Point:MoveTo(int x,int y) this-m_x =x; m_y=y; ; (在成员函数内),x,y,x,y,MoveTo() this-x, this-y,内存,数据区,代码区,对象1,对象2,对象的行为模型,客户/服务模式 服务器:类 客户:客户通过创建对象,或通过函数参数传递过来的对象,访问对象的变量或调用对象的函数,操纵对象或获得信息,得到服务。 void Func( CObj obj,CObj *pobj) pobj-
5、m_x=obj.m_x;/(客户) 客户服务器是相对的。 事件驱动:订阅/连接服务器定义的事件,服务器调用客户实现的函数,响应事件。 typedef void callback(int param); 服务端 void subMsg(char *subject,callBack* cbFunc); 客户端 void myCallback(int param). subMsg(“时间”, myCallback);,继承,继承 现实世界中对象的类别可能有多个层次. 基类,派生类 class Circle : public Point; 1)类与类的关系:父子关系is a 子类则通过附加属性和方法来
6、对父类特化或扩展。 2)子类继承父类的所有成员。 3)组合与继承都是重要的重用方法,一般优先使用对象组合,Point,Circle,Rect,多态性,成员函数函数的执行是在运行时才动态 绑定到函数的入口地址:多态性 多态程序 类的继承体系。 虚函数:体系中关键字virtual修饰父子同名的成员函数。 调用是通过基类对象引用或指针。 设在Point为根的类层次体系中Draw是成员虚函数. class Pointpublic:virtual void Draw(); void OnDraw( Point *pObj) pObj-Draw( ); /调用层次体系中哪个类的成员函数? ,关键概念,对象
7、,类 构造函数 析构函数 this指针 作用域分辨符: 静态成员函数,成员变量 初始化段 虚函数,纯虚函数 类型转换 拷贝构造函数 访问限制 重载、隐蔽、覆盖 操作符重载,接口,接口: 抽象基类 暴露的方法集合 class I A void f()=0; 通过继承纯虚类来实现接口。 采用接口的好处:多态 Client不必知道其使用对象的具体所属类。多个类可以实现相同接口,提高了(对象)组合的机率。 class B :public IA void f(); class C :public IA void f();,操作符重载,表达式 X Y 1) =X. operator ( Y ) 用类的成员
8、函数重载 例: string 表达式 X 1)=X . operator ( ) 2)或 =operator ( X),模板与标准模板库,模板函数 例:求两数中较大的数。 template T maxV( T a, T b) return ab?a:b; 模板类 例: template class Stack T *pEle; Stack() pEle=new Tn; ; moid main() Stack stack; ,STL,例: #include #include #include #include #include using namespace std; class Stock;
9、bool oCmp(Stock ,C+输入输出类层次,istream ,ostream ifstream, ofstream; istringstream,ostringstream; cin, cout #include #include #include ,例格式化: int a=10; double b=2000.24; char s=“王伟”; ostringstream sout; soutxy; 例 struct double salary; char name23; employee; ifstream ifile( payroll.dat“, ios_base:binary )
10、; if(ifile ) is.read( (char *) ,编程准则,1.要区别类的创建者和类的使用者(客户程序员) 2.当我们创建一个类时,要尽可能用有意义的名字来命名类,可以用函数重载和缺省参数来创建一个清楚、易用的接口. 3.数据隐藏允许我们(类的创建者)将来在不破坏用户代码的情况下随心所欲地修改代码。为实现这一点,应把对象的成员尽可能定义为private, 而只让接口部分为p u b l i c,而且总是使用函数而不是数据. 4.使类尽可能地原子化。也就是每个类有一个单一、清楚的目。 5.从设计的角度,寻找并区分那些变化和不变的成分。把它们封装到不同类中. 6.注意在继承过程中的限
11、制。最清晰的设计是向被继承者加入新的功能,而如果在继承过程删除了原有功能,而不是加入新功能,那这个设计就值得怀疑了。 7.大声朗读我们的类,确保它们是合理的。读基类时用“is-a”,读成员对象时用“has-a”。 8.一个典型的基类仅仅是它的派生类的一个接口。当我们创建一个基类时,缺省情况下让成员函数都成为纯虚函数。记住要给析构函数一个函数体,因为继承关系中所有的析构函数总是被调用。 9.如果我们的类中包含指针,我们必须产生拷贝构造函数、“=”运算符和析构函数,以使类运行正常。 10.避免使用全局变量。尽可能把数据放在类中。全局函数存在的可能性要比全局变量大,虽然我们后来发现一个全局函数作为一
12、个类的静态成员更合适。,11.当写一个函数时,我们的第一选择是用c o n s t引用来传递参数。只要我们不需要修改正在被传递进入的对象,这种方式是最好的。 12.当心临时变量. 13.在我们的构造函数中只做一些最必要的事情,如果一个构造函数无法避免失败,最好的方法是抛出一个异常. 14.使用异常层次,客户代码还是通过基类来捕获这个异常.用值来抛出异常,用引用来捕获异常。 15. 先查看一个标准模板库,然后查问创建特殊工具的开发包。当我们熟悉了这些产品后,我们就可大大提高我们的生产效率。 16.注意重载,一个函数不应该用某一参数的值来决定执行哪段代码,如果遇到这种情况,应该产生两个或多个重载函数来代替。 17.保证初始化出现在我们的代码的所有方面。 18.不要用“foo a=b;”的形式来定义一个对象。这是常常引起混乱的原因。因为它调用构造函数来代替运算符“ =”。为了清楚起见,可以用“ foo a(b);”
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 采购部门业务管理制度
- 采购销售业务管理制度
- 采购需求制定管理制度
- 采购预算编制管理制度
- 采购验收环节管理制度
- 金螳螂材料采购管理制度
- 钢铁厂原料采购管理制度
- 2025年前台岗位实操试卷
- 基于认知诊断模型的日语语法测试开发
- 七年级下学期第一次月考测试卷(考试版)【相交线与平行线~实数】-人教版(2024)七下
- 2026届江苏南通市通州区高三下学期模拟预测化学试题(含答案)
- 吉水县2026年面向社会公开招聘农村(社区)“多员合一岗”工作人员【146人】考试备考试题及答案解析
- 2026年中级消防设施操作员习题库(附答案解析)
- 民盟支部内部管理制度
- 2026年公安局辅警招聘《综合理论知识》考试题库及答案
- 2025-2026学年冀美版(新教材)初中美术八年级下册(全册)教学设计(附目录P125)
- 吸痰护理操作中的并发症预防
- 1.6 有多少名观众 课件-2025-2026学年三年级下册数学北师大版
- 动物营养学各单元
- 2026年海底管道智能巡检报告及未来五至十年海洋工程报告
- RCEP培训商务部课件
评论
0/150
提交评论