没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
内容概要:本文为《C++ 入门与 STL 学习》的系列笔记汇编,包含了 C++ 基础、STL(Standard Template Library)的各种容器与算法的学习,及类的设计、继承、多态等面向对象特性的讲解与应用。重点涵盖了 C++ 中容器的概念和使用、操作符的重载、类的构建以及虚函数的应用等。 适合人群:初级到中级水平的 C++ 学习者。 使用场景及目标:适用于 C++ 初学者的基础概念理解和实际编程练习,能够帮助掌握标准库中的重要容器以及常用的数据结构和算法;进阶学员可通过本文加强对面向对象思想与设计模式的认知。 阅读建议:学习过程中应跟随本文指引逐一实验相关概念的具体代码实现效果,同时注意理论学习与动手实践相结合。
资源推荐
资源详情
资源评论
《C++入门与STL学习》系列分享专栏
简介
草根程序猿的C++学习经历,该专栏记录了C++ Primer和STL的学习过程中的一些记录和心得,以及部分实践的心得体会,希望能够帮助自己回忆和辅助有兴趣刷题的同学一起
学习,欢迎大家阅读参考,如有错误或疑问请留言纠正^_^
文章
C++ Primer 学习笔记_1_C++面向对象介绍
C++ Primer 学习笔记_2_标准模板库vector(1)
C++ Primer 学习笔记_3_标准模板库vector(2)
C++ Primer 学习笔记_4_标准模板库string(1)
C++ Primer 学习笔记_5_标准模板库string(2)
C++ Primer 学习笔记_6_标准模板库_set集合容器
C++ Primer 学习笔记_7_标准模板库_multiset多重集合容器
C++ Primer 学习笔记_8_标准模板库_map映照容器
C++ Primer 学习笔记_9_标准模板库_multimap多重映照容器
C++ Primer 学习笔记_10_标准模板库_map和set的对比
C++ Primer 学习笔记_11_标准模板库_stack、queue队列容器与priority_queue优先队列容器
C++ Primer 学习笔记_12_标准模板库_ deque双端队列容器
C++ Primer 学习笔记_13_标准模板库_list双向链表容器
C++ Primer 学习笔记_14_标准模板库_bitset位集合容器
C++ Primer 学习笔记_19_类与数据抽象(1)_类的定义和声明
C++ Primer 学习笔记_20_类与数据抽象(2)_内联成员函数、成员函数的重载及其缺省参数、类与结构体、隐含的this指针
C++ Primer 学习笔记_21_类与数据抽象(3)_类作用域、类作用域中的名字查找、前向声明、嵌套类、局部类
C++ Primer 学习笔记_22_类与数据抽象(4)_默认构造函数、重载构造函数、全局对象的构造先于main、构造函数与new、析构函数与delete、转换构造函数、
赋值与初始化、explicit
C++ Primer 学习笔记_23_类与数据抽象(5)_初始化列表(const和引用成员)、拷贝构造函数
C++ Primer 学习笔记_24_类与数据抽象(6)_深拷贝与浅拷贝、空类与空数组
C++ Primer 学习笔记_29_类与数据抽象(11)_友元函数和友元类
C++ Primer 学习笔记_25_类与数据抽象(7)--static 成员变量、static 成员函数、类/对象的大小
C++ Primer 学习笔记_26_类与数据抽象(8)--四种对象生存期和作用域、static 用法总结
C++ Primer 学习笔记_27_类与数据抽象(9)--static 与单例模式、auto_ptr与单例模式、const成员函数、const 对象、mutable修饰符
C++ Primer 学习笔记_28_类与数据抽象(10)--const 用法小结、static与const以及static const(const static)、分别用C和C++来实现一个链栈
C++ Primer 学习笔记_30_操作符重载与转换(1)--可重载/不可重载的操作符、成员函数方式重载、友元函数方式重载
C++ Primer 学习笔记_31_操作符重载与转换(2)--++/--运算符重载、!运算符重载、赋值运算符重载 、String类([]、 +、 += 运算符重载)、>>和<<运算符
重载
C++ Primer 学习笔记_32_操作符重载与转换(3)--成员函数的重载、覆盖与隐藏、类型转换运算符、*运算符重载、->运算符重载
C++ Primer 学习笔记_33_操作符重载与转换(4)--转换构造函数和类型转换运算符归纳、operator new 和 operator delete 实现一个简单内存泄漏跟踪器
C++ Primer 学习笔记_34_面向对象编程(1)--继承(一):公有/私有/保护继承、overload/overwrite/override之间的区别
C++ Primer 学习笔记_35_面向对象编程(2)--继承(二):继承与构造函数、派生类到基类的转换 、基类到派生类的转换
C++ Primer 学习笔记_36_面向对象编程(3)--继承(三):多重继承、虚继承与虚基类
C++ Primer 学习笔记_37_面向对象编程(4)--虚函数与多态(一):多态、静态绑定与动态绑定、虚函数、虚表指针、虚析构函数、object slicing与虚函数、
重载与覆盖与重定义的区别
C++ Primer 学习笔记_34_面向对象编程(5)--虚函数与多态(二):纯虚函数、抽象类、虚析构函数、动态创建对象
C++ Primer 学习笔记_35_面向对象编程(6)--虚函数与多态(三):虚函数表指针(vptr)及虚基类表指针(bptr)、C++对象模型
C++ Primer 学习笔记_36_面向对象编程(7)--虚函数与多态(四):RTTI、dynamic_cast、typeid与显示转换、类与类之间的关系uml
C++ Primer 学习笔记_37_面向对象编程(8)--虚函数与多态(五):虚继承和虚函数对C++对象内存模型造成的影响(类/对象的大小)
C++ Primer 学习笔记_38_面向对象编程(9)--虚函数与多态(六):auto_ptr与shared_ptr、对象/值语义、资源管理(RAII)、实现auto_ptr、Ptr_vector
C++ Primer 学习笔记_15_从C到C++(1)--bool类型、const限定符、const与#define、结构体内存对齐
C++ Primer 学习笔记_16_从C到C++(2)--域运算符、new/delete运算符、重载、name managling与extern “C”、带默认参数的函数
C++ Primer 学习笔记_17_从C到C++(3)--引用、const引用、引用传递、引用作为函数返回值、引用与指针区别
C++ Primer 学习笔记_18_从C到C++(4)--内联函数、内联函数与带参数宏区别、新的类型转换运算符
C++ Primer 学习笔记_43_模板(一):模板、函数模板、函数模板特化、重载函数模板、非模板函数重载
C++ Primer 学习笔记_44_模板(二):类模板、非类型模板参数
C++ Primer 学习笔记_45_模板(三):缺省模板参数(借助标准模板容器deque实现Stack模板)、成员模板、关键字typename
C++ Primer 学习笔记_46_STL剖析(一):泛型程序设计、什么是STL、STL六大组件及其关系
C++ Primer 学习笔记_47_STL剖析(二):vector源码剖析、内存分配器Allocator
C++ Primer 学习笔记_48_STL剖析(三):迭代器、迭代器的类型、常用的容器成员、迭代器失效的问题
C++ Primer 学习笔记_49_STL剖析(四):算法、7种算法分类、非变动性算法示例
C++ Primer 学习笔记_50_STL剖析(五):变动性算法源代码分析与使用示例(for_each、copy_backward、transform、replace_copy_if 等)
C++ Primer 学习笔记_51_STL剖析(六):移除性算法(remove)、变序性算法(rotate)、排序算法(sort)、已序区间算法、数值算法(accumulate)
C++ Primer 学习笔记_52_STL剖析(七):函数对象、自定义函数对象、 函数对象与容器、函数对象与算法、STL中内置的函数对象
C++ Primer 学习笔记_53_STL剖析(八):函数适配器:bind2nd 、mem_fun_ref 、函数适配器应用举例
C++ Primer 学习笔记_54_STL剖析(九):迭代器适配器{(插入迭代器back_insert_iterator)、IO流迭代器(istream_iterator、ostream_i
C++ Primer 学习笔记_55_STL剖析(十):容器适配器(stack、 queue 、priority_queue)源码浅析与使用示例
C++ Primer 学习笔记_56_STL剖析(十一)(原boost库):详解智能指针(unique_ptr(原scoped_ptr) 、shared_ptr 、weak_ptr源码分析)
C++ Primer 学习笔记_57_总结
C++ Primer 学习笔记_1_C++面向对象介绍
欢迎大家阅读参考,如有错误或疑问请留言纠正,谢谢
一、程序
1、程序
(1)编写程序是为了让计算机解决现实生活中的实际问题
用一定的数据来表示
按一定的逻辑来处理这些数据
(2)pascal之父 结构化程序设计先驱 迪杰斯特拉
程序 = 算法 + 数据结构
(3)程序是完成一定功能的一些列有序指令的集合
指令 = 操作码 + 操作数
按一定的逻辑来处理这些数据
将指令按一定的顺序进行整合,就形成了程序。
(4)更多的要站在机器的角度来考虑问题
而不是站在解决问题的本身空间来考虑问题
(5)将现实生活中要处理的数据,我们不得不用二进制来表示
我们要施加的逻辑也不得不用二进制指令来表示
要按照机器的思维来解决问题
(6)抽象层次还是比较低的,大部分时候我们还是需要以机器的思维来考虑问题
寻址方式
2、机器语言与汇编语言
(1)机器语言就是一些机器能读懂的二进制指令集合
(2)汇编语言将机器指令映射为一些可以被人读懂的助记符,如ADD、SUB等。
3、高级语言
高级语言屏蔽了机器的细节,提高了语言的抽象层次,程序中可以采用具有一定含义的数据命名和容易理解的执行语句。这使得在书写程序时可以联系到程序所描述的具体事物
。
二、结构化程序设计
1、结构化程序设计
特点:自顶向下,将系统视为分层的子程序的集合
(1)传统的程序设计方法可以归结为“程序=算法+数据结构”,将程序定义为处理数据的一系列过程。这种设计方法的着眼点是面向过程的,特点是数据与程序分离,即数据与数
据处理分离。
(2)结构化程序设计的基本思想是采用自顶向下、逐步细化的设计方法和单入单出的控制结构。其理念是将大型程序分解成小型、便于管理的任务。如果其中的一项任务仍然过
大,则将它分解为更小的任务。这一过程将一直持续下去,直到将程序划分为小型的,易于编写的模块。
【1】可以将程序分为功能不同的模块,使得整个程序更有条理性
2、结构化程序设计的缺点
结构化程序设计为处理复杂问题提供了有力手段,但到80年代末,这种设计方法逐渐暴露出以下缺陷:
(1)程序难以管理
(2)数据修改存在问题
(3)程序可重用性差
(4)用户要求难以在系统分析阶段准确定义,致使系统在交付使用时产生许多问题。
(5)用系统开发每个阶段的成果来进行控制,不能适应事物变化的要求。
(6)面向过程程序设计缺点的根源在于数据与数据处理分离
很多数据仍然属于整个程序,因而结构化程序设计思想还是需要有很多的全局变量,在某个地方进行更改,会对整个程序产生难以预料的影响。
三、面向对象程序设计
1、面向对象程序设计
(1)面向对象(Object
Oriented )是认识事务的一种方法,是一种以对象为中心的思维方式
(2)面向对象的程序设计:
【1】对象 =(算法+数据结构)
【2】程序 = 对象+对象+……+对象
(3)面向对象程序设计模拟自然界认识和处理事物的方法,将数据和对数据的操作方法放在一起,形成一个相对独立的整体——对象(object),同类对象还可抽象出共性,形
成类(class )。一个类中的数据通常只能通过本类提供的方法进行处理,这些方法成为该类与外部的接口。对象之间通过消息(message)进行通讯。
2、数据抽象
(1)结构化设计方法应用的是过程抽象。所谓过程抽象是将问题域中具有明确功能定义的操作抽取出来,并将其作为一个实体看待。
(2)数据抽象是较过程抽象更高级别的抽象方式,将描述客体的属性和行为绑定在一起,实现统一的抽象,从而达到对现实世界客体的真正模拟。
3、实体、对象、类之间的关系
现实世界中的实体可以抽象出类别的概念。对应于计算机世界就有一个类(class)的概念,因为类是一个抽象的概念的对应体,所以计算机不给它分配内存,只给对象分配
内存。下图表达了计算机世界与现实世界之间的对应关系。
4、从机算机的观点看对象
(1)对象是计算机内存中的一块区域。通过内存分块每个对象在功能上相对保持独立。
(2)这些内存不但存储数据,也存储代码。这保证对象是受保护的,只有对象中的代码能访问存储于对象中的数据。这清楚地限定了对象所具有的功能,并且使得对象不受未知
外部事件的影响,从而使自己的数据和功能不会因此遭受破坏。
(3)对象之间只能通过函数调用也就是发送消息来实现相互通信。
(4)当对象的一个函数被调用时,对象执行内部的代码来响应该调用,从而使对象呈现一定的行为。这个行为及其呈现出来的结果就是该对象所具有的功能。
三、面向对象的基本特征——封装、继承、多态
话题外的理解,抽象:(1)抽象是人们认识事物的一种方法;(2)抓住事物本质,而不是内部具体细节或具体实现
1、封装
(1)封装是指按照信息屏蔽的原则,把对象的属性和操作结合在一起,构成一个独立的对象。提供接口,使用者专注于所需要的接口内容。
(2)通过限制对属性和操作的访问权限,可以将属性“隐藏”在对象内部,对外提供一定的接口,在对象之外只能通过接口对对象进行操作。
(3)封装性增加了对象的独立性,从而保证了数据的可靠性。
(4)外部对象不能直接操作对象的属性,只能使用对象提供的服务。
我们不用关心电视机的内部工作原理,电视机提供了选台、调节音量等功能让我们使用。
2、继承
对象 -> 类(归类) 从特殊到一般的过程
大类 -> 小类(分类) 从一般到特殊的过程
(1)继承表达了对象的一般与特殊的关系。特殊类的对象具有一般类的全部属性和服务。
(2)当定义了一个类后,又需定义一个新类,这个新类与原来的类相比,只是增加或修改了部分属性和操作,这时可以用原来的类派生出新类,新类中只需描述自己所特有的属
性和操作。
(3)继承性大大简化了对问题的描述,大大提高了程序的可重用性,从而提高了程序设计、修改、扩充的效率。
继承具有传递性,如汽车具有车的全部属性和行为。
3、多态
(1)多态性:同一个消息被不同对象接收时,产生不同结果,即实现同一接口,不同方法。
(2)多态使得我们以一般的观点来看待不同的(但又大相径庭的)对象。
(3)一般类中定义的属性和服务,在特殊类中不改变其名字,但通过各自不同的实现后,可以具有不同的数据类型或具有不同的行为。
当向图形对象发送消息进行绘图服务请求后,图形对象会自动判断自己的所属类然后执行相应的绘图服务。
4、继承与多态
继承和多态性组合,可以生成很多相似但又独一无二的对象。继承性使得这些对象可以共享许多相似特性,而多态又使同一个操作对不同对象产生不同表现形式。这样不仅提高
了程序设计的灵活性,而且减轻了分别设计的负担。
四、面向对象思想总结
1、面向对象思想总结
(1)面向对象是一种认识世界的方法,也是一种程序设计方法
(2)面向对象的观点认为,客观世界是由各种各样的实体,也就是对象组成的。每种对象都有自己的内部状态和运动规律。不同的对象间的相互联系和相互作用就构成了各种不
同的系统,并进而构成整个客观世界。
2、面向对象编程方法的特性
(1)程序设计的重点在数据而不是函数。(先发现类,再考虑类对象的相互作用)
(2)程序由对象组成,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
(3)对象之间通过相互协作来完成功能
(4)函数与相关的数据紧密结合
(5)数据可以被隐藏
(6)很容易扩充新的数据和函数(开闭原则:对增加开放,对修改关闭)
3、面向对象编程的优缺点
(1)面向对象编程的优点:
【1】易维护:可读性高,即使改变需求,由于继承的存在,维护也只是在局部模块,维护起来是非常方便和较低成本的。
剩余319页未读,继续阅读
资源评论
天涯学馆
- 粉丝: 1916
- 资源: 312
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Matlab的破片着靶图像识别系统设计
- 数字人开源项目,旨在实现实时、互动的数字人流媒体传输,可做毕业设计
- 基于Python的图书管理系统
- Aloha模仿学习复现
- Sentinel RMS license 5.0 Beta.rar 工具
- 基于MATLAB图像处理实现直线识别(拟合角平分线)
- VisualComponents Premium 4.9 OLP库卡仿真 KUKA.Sim lservrc.dat
- Dephi 12 控件之TMS VCL UI Pack v13.1.10.0.7z
- 小米6X-miui14安卓13定制资源 解锁bl状态fast模式刷写
- 从CCD图像传感器到CMOS图像传感器(CIS)的发展历程
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功