C++语言程序设计第3版清华大学教程_第1页
C++语言程序设计第3版清华大学教程_第2页
C++语言程序设计第3版清华大学教程_第3页
C++语言程序设计第3版清华大学教程_第4页
C++语言程序设计第3版清华大学教程_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

C++语言程序设计清华大学教程第3版·从入门到面向对象编程Contents课程目录系统学习程序设计语言演进、面向对象核心思想与C++工程实践01计算机程序设计语言的发展02面向对象方法的基本概念03C++程序设计实践CHAPTER01计算机程序设计语言的发展从机器语言到面向对象,理解编程语言的演进逻辑ComputerScienceFundamentals计算机程序的本质计算机程序本质上是指令的有序集合,计算机通过执行程序中的指令来完成各种任务。理解程序、指令与计算机硬件之间的关系,是掌握任何编程语言的基础前提。程序控制一切计算机的所有工作都是由程序来控制的,程序决定了计算机的行为方式和输出结果。程序指令的有序集合程序是指令的有序集合,每条指令都是计算机硬件能够识别和执行的具体操作命令。指令最小操作单元指令是计算机可以识别的最小操作单元,不同类型的处理器拥有各自不同的指令集架构。指令集EARLYPROGRAMMING机器语言与汇编语言机器语言与汇编语言是计算机发展初期的编程方式,它们与硬件紧密耦合、抽象层次极低,程序员需要处理大量机器细节,这导致了人类自然语言与计算机语言之间的巨大鸿沟。机器语言由计算机硬件直接识别的二进制指令组成,是发展初期唯一可用的编程方式,人类自然语言与机器语言之间存在巨大鸿沟。0101二进制汇编语言将机器指令映射为ADD、SUB等人类可读的助记符,略微缩小了与自然语言的差距,但抽象层次仍然很低。ADD/SUB底层困境程序员必须处理大量底层机器细节,开发效率极低,程序难以在不同硬件平台之间移植和维护。低效·难移植LANGUAGEEVOLUTION高级语言的突破高级语言通过屏蔽底层机器细节、提升抽象层次,使程序员能够使用具有含义的命名和易理解的语句来描述问题,极大地缩小了人类思维与计算机执行之间的差距。01屏蔽硬件细节高级语言屏蔽了底层机器的硬件细节,提高了编程语言的抽象层次,使程序能够联系到所描述的具体事物,让开发者专注于问题本身而非机器实现。Abstraction02语义化表达程序中可以采用具有含义的数据命名和容易理解的执行语句,代码可读性和可维护性大幅提升,团队协作效率显著改善,降低了软件开发和维护成本。Readability03透明转换机制高级语言编写的程序需要通过编译器或解释器转换为机器码才能执行,这一转换过程对程序员透明,实现了跨平台兼容和硬件无关性。CompilerOBJECT-ORIENTEDPROGRAMMING面向对象语言的核心思想面向对象语言以描述客观世界中的事物及其关系为出发点,通过将事物抽象为具有属性和行为的对象,并利用类的继承与多态实现代码重用,使程序能更直接地反映问题域的本来面目。认知出发点以更直接地描述客观世界中存在的事物及其关系为起点,采用人类认知事物的一般思维方法进行软件开发。对象思维抽象映射桥梁将客观事物看作具有属性和行为的对象,通过抽象找出同一类对象的共同特征形成类,建立现实到程序的映射。类与对象继承与多态通过类的继承与多态机制实现代码重用,大幅提高软件开发效率,使程序直接反映问题域的本来面目。高效开发EVOLUTION程序设计方法的演进程序设计方法经历了从面向过程到面向对象的演进。结构化方法采用自顶向下、逐步求精的策略进行模块分解,而面向对象方法则通过对象、类、继承和多态等机制更自然地映射现实世界,更适合大型复杂系统的开发。01面向过程的结构化方法最早期的程序以数学计算为主要目的,设计重点在于求解问题的具体过程,但对于庞大复杂的程序难以有效开发和维护程序按功能划分为若干基本模块形成树状结构,各模块功能相对独立,内部由顺序、选择、循环三种基本结构组成结构化02面向对象的程序设计方法将客观事物看作具有属性和行为的对象,通过分类抽象找出同类事物的共性形成类,以更贴近人类认知的方式组织程序利用封装、继承和多态三大特性,使程序能直接反映问题域的本来面目,显著提升了大型软件系统的开发效率和可维护性对象化LANGUAGEOVERVIEWC++语言的定位与特色C++支持多范式编程,兼具C语言的高效性与面向对象机制,是程序设计思想和工程实践的理想入门语言。面向对象增强在C语言基础上增加类、继承、多态等特性,保持高效性与底层硬件直接操作能力,支持代码复用与模块化设计面向对象多范式支持支持结构化、面向对象和泛型编程三种范式,根据问题特点选择最合适的方法,灵活应对各类开发场景三种范式高校教学首选清华等数十所高校入门语言,兼顾算法、数据结构、面向对象设计与UML建模,培养系统级编程思维数十所高校CHAPTER02面向对象方法的基本概念深入理解对象、类、封装、继承与多态的核心机制Object-OrientedConcepts对象:系统的基本构成单位对象是面向对象系统中描述客观事物的基本实体,由一组描述静态特征的属性数据和一组描述动态特征的行为操作序列构成,是构建软件系统的最小组成单位。对象面向对象方法中用来描述客观事物的一个实体,是构成系统的基本单位,每个对象都是独立存在的个体。基本单位属性用来描述对象的静态特征,是对象所持有的数据项,例如一个学生对象具有姓名、学号、成绩等属性。静态特征行为用来描述对象的动态特征,是对象能够执行的操作序列,例如学生对象可以执行选课、查询成绩等行为。动态特征Object-OrientedConcept类:抽象与分类的产物类是人类分类思维的产物,通过抽象忽略非本质特征、提取共性,将具有相同属性和行为的一组对象归为一类。类与对象的关系如同模具与铸件——类是抽象描述,对象是具体实例。分类思维通过抽象忽略事物的非本质特征,只关注与当前目标有关的本质特征,把具有共同性质的事物划分为一类。这种思维方式是认知复杂世界的基础方法。抽象类的定义具有相同属性和服务的一组对象的集合,为该类全部对象提供包括属性和行为两部分的抽象描述。类封装了数据与操作,形成完整的抽象单元。集合类与实例类与对象犹如模具与铸件——类是抽象模板,属于某个类的具体对象称为该类的一个实例。每个实例拥有类定义的属性和行为的具体值。实例Object-OrientedProgramming封装:信息隐藏与接口隔离封装将对象的属性和行为结合成一个独立的系统单元,通过建立边界屏障隐蔽内部实现细节,仅保留有限的对外接口与外部交互,从而保护数据完整性并降低系统各部分之间的耦合度。边界屏障与信息隐蔽封装把对象的属性和服务结合成一个独立的系统单元,对外形成一个边界屏障,尽可能隐蔽对象的内部实现细节。这种机制有效防止了外部对内部状态的随意访问和修改。InformationHiding有限接口与访问控制封装只保留有限的对外接口使之与外部发生联系,外部只能通过这些接口访问对象,不能直接操作其内部数据。通过访问控制修饰符实现精细化的权限管理。InterfaceIsolation数据保护与低耦合封装机制保护了对象数据的完整性和安全性,同时降低了系统各部分之间的耦合度,使代码更易于维护和修改。模块间的依赖关系变得更加清晰可控。LowCouplingObject-OrientedProgramming继承:代码复用的核心机制继承使特殊类(子类)自动拥有一般类(父类)的全部属性与服务,是面向对象技术实现软件复用的核心机制。通过继承建立类的层次结构,避免了代码重复,大幅提升了软件开发效率。关系定义继承定义了特殊类与一般类之间的关系,特殊类的对象自动拥有其一般类的全部属性与服务,例如客轮继承轮船的所有特征。Inheritance软件复用继承对于软件复用有重要意义,是面向对象技术能够提高软件开发效率的关键原因之一,子类可以在父类基础上增加或修改功能。Reuse层次结构通过继承建立的类层次结构使代码组织更加清晰,公共特征在父类中定义一次即可被所有子类共享,避免了大量重复代码。HierarchyPolymorphism多态:同一接口的不同实现多态允许同一操作在不同对象上产生不同行为,运行时动态绑定方法,增强灵活性与可扩展性。01概念定义一般类中定义的属性或行为,被特殊类继承后可具有不同实现方式,同一操作在不同对象上产生不同表现。动态绑定02实现机制在C++中主要通过虚函数实现,程序在运行时根据对象的实际类型动态决定调用哪个方法版本。virtual03核心价值新增子类时无需修改调用方代码,只需继承父类并重写相应方法即可,符合开闭原则。开闭原则OOPFundamentals面向对象三大特性的协同封装、继承和多态是面向对象语言的三大核心特性,它们各自解决不同层面的问题并相互协同——封装保护数据完整性、继承实现代码复用、多态提供运行时灵活性,三者共同构成了面向对象程序设计的完整方法论基础。Encapsulation&Inheritance封装与继承01封装将数据和操作绑定为独立单元并隐藏内部细节,是构建安全、低耦合软件模块的基础02继承使子类自动获得父类的属性和方法并支持扩展,是实现代码复用和建立类层次的核心手段Polymorphism&Synergy多态与特性协同01多态允许同一接口在不同对象上有不同实现,通过虚函数机制在运行时动态绑定方法调用02三大特性协同工作:封装保护数据、继承建立层次、多态提供灵活性,共同构成面向对象设计的基石CHAPTER03C++程序设计实践从基础语法到标准模板库,掌握C++编程的核心技能C++Programming结构化编程基础C++结构化编程部分涵盖基本数据类型、流程控制语句和函数机制,使开发者能够使用int、double、string等类型描述现实世界数据,通过if-else控制程序逻辑,利用函数封装完整算法,构建清晰的过程化程序结构。基本数据类型包括int、double、string等,用于描述现实世界中的各类数据,是构建程序的基础元素int·double·string流程控制语句分支控制(if-else)和循环控制(for/while)使程序根据条件执行不同逻辑,实现复杂业务流程if-else·for·while函数机制作为基本的过程化单元,将完整算法封装为可复用代码块,通过参数传递和返回值实现模块间通信封装·参数·返回值MemoryManagement数组与指针数组和指针是C++底层操作的核心工具。数组提供连续内存空间的批量数据存储,指针则直接操作内存地址,二者结合使C++具备了对硬件的直接控制能力和极高的运行效率,是理解C++内存管理的关键。连续内存空间数组存储相同类型的批量数据,通过下标索引实现快速随机访问,是数据结构的基础实现形式。RandomAccess直接操作内存地址指针使C++能够进行底层内存操作,实现动态内存分配、函数间高效数据传递等高级功能。MemoryAddress二者关系密切数组名本质上是指向首元素的指针,理解二者关系是掌握C++内存管理和高效编程的关键前提。FirstElementC++Object-Oriented类与对象的C++实现类和对象是C++面向对象编程的核心,通过class关键字定义类来封装数据和操作,创建对象实例来使用这些封装好的功能。类定义与访问控制使用class关键字定义类,将数据成员和成员函数封装在一起,通过public、private和protected控制不同层次的访问权限。class·access构造与析构函数构造函数在对象创建时自动执行初始化,析构函数在对象销毁时自动执行清理,保证对象生命周期的正确管理。lifecycle对象实例化与调用通过类创建对象实例后,使用点运算符调用公有成员函数,实现封装功能而无需了解内部实现细节。instance·dotObject-OrientedDesign组合与继承的设计策略组合是将一个类的对象作为另一个类的成员来构建复杂对象的方式,继承则是从已有类派生新类以复用和扩展功能的方式。二者结合使用可以灵活地建立类之间的层次关系,是面向对象设计中构建复杂系统的两种基本手段。组合·Composition将一个类的对象作为另一个类的数据成员,表达"有一个"(has-a)关系,如汽车有一个发动机。has-a继承·Inheritance派生类自动获得基类的全部成员并可添加新功能,表达"是一个"(is-a)关系,如客轮是一种轮船。is-a混合使用派生类在继承基类的同时,其内部也可以通过组合包含其他类的对象,灵活构建复杂系统。混合构建C++CoreMechanism虚函数与动态绑定虚函数是C++实现运行时多态的核心机制。通过在基类中声明virtual函数并在派生类中重写,程序在运行时能够根据对象的实际类型而非指针的声明类型来调用正确的方法版本,从而实现灵活的动态绑定。虚函数声明与重写虚函数在基类中用virtual关键字声明,派生类可以重写该函数以提供不同的实现版本。重写时需保持函数签名一致,确保多态行为正确生效。●●●虚函数机制动态绑定机制通过基类指针或引用调用虚函数时,程序在运行时根据对象的实际类型动态决定调用哪个方法版本。这一机制由虚函数表(vtable)实现。●●●动态绑定虚析构函数虚析构函数确保通过基类指针删除派生类对象时能正确调用派生类的析构函数,防止内存泄漏。含有虚函数的基类应始终声明虚析构函数。●●●内存安全C++CoreFeature运算符重载运算符重载允许为自定义类类型定义运算符的行为,使对象能像基本数据类型一样使用+、-、<<等运算符,大幅提升代码的直观性和可读性。这是C++独有的强大特性,使自定义类型能够无缝融入C++的表达式体系。重载机制运算符重载通过定义特殊函数为自定义类类型赋予运算符的含义,使对象能像基本数据类型一样使用加减乘除等运算符机制流操作重载流插入运算符(<<)和流提取运算符(>>)的重载使自定义类型能直接使用cout和cin进行输入输出操作<<>>语义一致性运算符重载应遵循语义一致性原则——重载后的运算符行为应与原有含义保持逻辑上的一致,避免造成代码理解困难原则C++Templates泛型程序设计泛型程序设计通过模板机制使代码能够适用于多种数据类型,在不损失运行效率的前提下实现最大程度的代码通用性。通用与高效泛型程序设计的目标是使程序写得尽可能通用、简单而优雅,同时不损失运行效率,模板是实现这一目标的核心机制。通用·高效函数与类模板函数模板使一个函数能处理多种数据类型,类模板使一个类能存储和操作任意类型的数据,编译时由编译器生成具体的代码。编译期实例化STL基石模板是C++标准模板库STL的基石,容器、迭代器和算法都基于模板实现,使开发者无需为每种数据类型重写相同的逻辑。容器·迭代器·算法STLArchitectureC++标准模板库(STL)C++标准模板库(STL)提供了经过充分测试和优化的容器与算法框架。容器如vector、list等负责数据的存储和组织,算法如sort、find等负责数据的处理,迭代器作为二者之间的桥梁,三者协作构成了高效、通用的编程基础设施。SECTION01常用容器01vector(向量)动态数组容器,支持随机访问和动态扩容,是最常用的STL容器。内存连续存储,缓存友好,适合存储需要频繁按索引访问的元素序列,尾部插入删除效率为O(1)。02list(双向链表)支持高效的中间插入和删除操作,但不支持随机访问。每个节点独立分配内存,适合需要频繁在序列中间增删元素的场景,插入删除操作时间复杂度均为O(1)。vector·list·deque·arraySECTION02标准算法与迭代器01通用算法STL提供sort、find、accumulate等通用算法,通过迭代器与容器解耦设计。同一算法可作用于不同类型的容器,实现了代码的高度复用,大幅降低开发复杂度。02迭代器容器与算法之间的桥梁,

温馨提示

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

最新文档

评论

0/150

提交评论