电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

潘爱民com幻灯片ppt02

36页
  • 卖家[上传人]:F****n
  • 文档编号:88154759
  • 上传时间:2019-04-20
  • 文档格式:PPT
  • 文档大小:147.50KB
  • / 36 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、C+ Overview,潘爱民 http:/ Object-Based Programming Object-Oriented Programming STL,C+之我见,C+语言在变化,我们的概念也要调整变化,最能反映OO思想的语言,掌握C+有助于理解OO,区分C和C+,C+不是C语言,不要用看待C语言的方式来看待C+,掌握C+语言的基础知识,操作系统的基础知识 文件API、内存管理 infrastructures 计算机原理 汇编语言 C/C+是产生ASM代码的framework 编译和执行过程 编译过程 执行过程 许多概念 进程、heap、stack,.,程序开发过程,开发,编辑,编译,出错?,链接,执行,结果正确?,结束,源程序 file.cpp,目标程序 file.obj,库函数和 其它OBJ,可执行程 序file.exe,Yes,Yes,No,No,Build过程:compile time,Compile + link 如何对待错误和警告 错误:一定要排除,从第一个错误找起 警告:或者排除,或者确实理解不会对程序造成危害 学会设置compile options和link

      2、options IDE中如何设置? 一定要知道! 命令行如何设置? 程序代码中如何设置?,执行过程:runtime,Load、重定位、初始化、main 如何调试 断点 assertion 程序对环境的依赖性 系统环境 CRT 内存影像,C+语言内容,数据类型 内置(built-in)、标准库、自定义的 表达式 控制语句 函数(模板) 异常处理,函数模板,例子: template Type min(Type a, Type b) return a(10,20);,函数模板(续),两种编译模式: inclusion模式 separation模式(export关键字) 模板特化 重载函数模板,异常处理(exception handling),错误处理机制、错误代码隔离 Throw(raise) an exception Throw expression 类似于return 语句 Try、catch语句(handler) try catch(type) 或 catch(type obj) 类似于函数调用 但是类型匹配发生在runtime,异常处理(续),嵌套机制,如果最外层没有处理,则由ter

      3、minate来处理 Local object正常析构 rethrow 在catch子句中仍然可以throw Catch all handler catch() 声明函数时指定函数可能的异常 int func(int) throw(string); 如果没有指定的异常发生,调用unexpected(),Object-Based Programming,class实现数据封装 对象 构造函数与析构函数 访问控制、友元 嵌套类 类中成员初始化 虚拟函数 类中运算符重载 类模板,this指针,在类的内部指向类自身的指针 在每个成员函数中,this指针提供了使用上的方便 this指针把类的多个实例对象区分开来,模板,函数模板 即以数据类型为“参数”的函数 例如: template Swap( T ,类模板(模板类或类生成器) 即以数据类型为“参数”的类 例如: template class Stack private : T poolmaxNum; int sp; public: Stack(); void Push(T x); T Pop(); BOOL IsEmpty() const; BO

      4、OL IsFull() const; ; 使用: Stack intStack; Stack float Stack;,模板(续),定义模板 实例化 模板参数:类型参数、非类型参数 两种编译模式: inclusion模式 separation模式(export关键字) 类模板特化(class template specializations) 类模板部分特化(class template partial specializations),从面向过程转换到面向对象,面向过程以功能为组织单元 在C语言中以函数作为功能单元; 通过数据结构来描述具体的问题; 数据在功能(函数)之间以参数的形式被传送。 面向对象 用类class封装数据以及与数据相关的操作; 用类的继承性来实现类的重用性; 多态性。,Object-Oriented Programming,CShape CPoint CLine CCircle CArc CText,CShape,CPoint,CLine,CCircle,CArc,CText,多态性和虚拟函数,多态性是面向对象的一个支柱 允许程序在实施对象的操作时,允许对象按不同

      5、的方式完成不同类型对象的操作;不同类型对象有自己实现操作的方法。 虚拟函数 虚拟函数实现了多态性。 说明:在函数说明之前加上关键字virtual 在基类的说明中,定义虚拟函数: virtual void Display(); 调用: CShape *pShape = GetCurrentShape(); pShape-Display();,对象的内存分布图,Vptr指针和vtab表 class A private : int value; public: virtual void Func1(void) virtual void Func2(void) ;,变量 偏移量 vptr 0 value 4,A:Func1 A:Func2,vtab,对象的内存分布图(续一),class B : pulic A private : int value1; public: virtual void Func1(void) virtual void Func2(void) ;,变量 偏移量 vptr 0 value 4 value1 8,B:Func1 B:Func2,vtab,对象的内存分布图(续

      6、二),class B : pulic A private : int value1; public: virtual void Func1(void) ;,变量 偏移量 vptr 0 value 4 value1 8,B:Func1 A:Func2,vtab,继承关系,Public继承 “is-a”关系 private继承 “has-a”关系 可以用复合类或者嵌套类来表示 protected继承 比private继承放宽限制 virtual继承 单个共享实例 虚基类的构造由the most derived class完成,类型转换,Static_cast Dynamic_cast 向下转换 void Draw(CShape *shape) /shape-DrawRect() /shape-DrawCircle() if (dynamic_cast(shape) RTTI:typeid,Static_cast类型转换,class B . ; class D : public B . ; void f(B* pb, D* pd) D* pd2 = static_cast(pb); / no

      7、t safe, pb may / point to just B B* pb2 = static_cast(pd); / safe conversion . ,Static_cast类型转换(续),class B . ; class D : public B . ; void f(B* pb) D* pd1 = dynamic_cast(pb); D* pd2 = static_cast(pb); ,C+标准库,C标准库 iostream library cin、cout、cerr ostream& operator (istream& os, MyClass&) STL(Standard Template Library),Generic Programming,作者:Alexander Stepanov 目标:高效、灵活地实现各种算法 思想:对算法进行抽象,与数据表示分开 以模板技术为基础 函数模板 类模板 C+的发展使得这种思想得以实现,STL基础,Object-Based Programming 有关class的各种设计技术 函数对象(function objects) 重载了

      8、函数调用操作符()的类 模板 函数模板 类模板 模板特化,STL思想,数据类型,算法,容器,STL实现,STL容器,顺序容器(Sequence Container) vector deque list 关联容器(Associative Container) set multiset map multiset,STL迭代器,迭代器(Iterator)是指针(pointer)的泛化,任意访问,双向迭代器,向前迭代器,输入迭代器,输出迭代器,STL算法,改变顺序的操作 reverse、replace 不改变顺序的操作 for_each、find 排序及相关操作 sort、rotate 常用的数字操作 count、sum_up,使用STL,#include #include #include #include using namespace std; template void print_elements(T elem) cout elem “ “; void (*pfi)(int) = print_elements;,void main() int ia7 = 0,1,2,3,4,5,6;

      9、 list ilist(ia, ia+7); / 以陣列做為 list 的初值 for_each(ilist.begin(), ilist.end(), pfi); / 0 1 2 3 4 5 6 ilist.push_back(7); ilist.push_back(0); ilist.push_back(7); ilist.push_back(9); for_each(ilist.begin(), ilist.end(), pfi); / 0 1 2 3 4 5 6 7 0 7 9 ilist.remove_if(bind2nd(modulus(), 2); / 去除所有奇數 for_each(ilist.begin(), ilist.end(), pfi); / 0 2 4 6 0 ,C+参考书,“C+ Programming Language” “C+ Primer”(3/e) “Design and Evolution of C+” “Inside the C+ Object Model” “Effective C+”(2/e) “More Effective C+” “Exceptional C+” “C+ Strategies and Tactics” “Generic Programming and the STL” ,

      《潘爱民com幻灯片ppt02》由会员F****n分享,可在线阅读,更多相关《潘爱民com幻灯片ppt02》请在金锄头文库上搜索。

      点击阅读更多内容
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.