「C++程序设计 (面向对象进阶)」学习笔记・一
0、引言
本专栏的系列文章是在学习 北京邮电大学 崔毅东 老师的《C++程序设计 (面向对象进阶)》课程过程中整理的。欢迎前往专栏了解更多相关内容~ 😀
有关于现代 C++ 的基本介绍,请前往《现代C++基本介绍》!
🔔 先决条件
本专栏的系列文章并不适合从未接触过编程的同学,读者需要确保自己已经具备编程基础(特别是 C++ 基础)!您可以参考笔者的「面向对象程序设计(基础)」专栏了解 C++ 基础的相关内容。
1、导论
- C++ 即 C Plus Plus 即 CPP
- C++ 之父:Bjarne Stroustrup
- 如果读者还不会念他的名字,那么可以请他本人亲自教授一下哦( •̀ ω •́ )✧(不是
- C/C++ 在计算机科学中所处的位置:

先导知识
- 计算机专业导论
- 计算机基本结构
- 布尔代数
- C 语言/ Java 语言
- 数据类型、运算符、表达式
- 分支、循环
- 函数、数组、引用、指针(C 语言)
后续学习
- 数据结构、面向对象系统分析与设计
- 数据库原理、计算机网络
- 计算机组成原理、操作系统
- 软件工程
2、C++ 编程范式(Programming Paradigm)
- 编程范式
- 规范编程的一系列思想、方法以及程序设计语言构造块所构成的一种模式。
C++ 是一门复杂的语言,支持多种编程范式。换句话来说,我们可以使用 C++ 编写多种不同风格的程序来。下面介绍几种 C++ 支持的编程范式:
- Structural Programming 结构化编程
- 任何函数都可以直接访问所有数据,数据是完全暴露的。 Object-Oriented Programming 面向对象编程
- 对象应该是封装起来的受保护的,对象里面的数据是不被别人直接访问的。对象通过接口(Interface)来和外界打交道。 Generic Programming 泛型编程
- 在 C++ 中,泛型编程通常使用模板实现。这个时候,"类型"(type)成为了模板的参数。 Functional Programming 函数式编程
- 在 C++ 中,函数式编程通常使用 Lambda 表达式实现。它将计算机运算视为函数运算,并且避免使用程序状态以及易变对象。它是面向数学的抽象,将计算描述为一种表达式求值。其实,函数式程序就是一个表达式。
3、语言演化与标准
本门课程要介绍的 C++ 是 C++11 之后的 C++,在此之前,高级编程语言已经经历了长足的发展。如下是部分高级语言之间的演化关系:
📌 Haskell
在这张图中,最顶上的 Haskell 语言是如此的“孤独”。它是一门纯粹的函数式编程语言,没有面向对象的概念。后续在学习到编程语言的高级阶段时,我们会逐步接触“函数式编程”这一概念的。
- C++ 标准发布时间
- 请参阅《 现代C++基本介绍》
本课程主要在 C++11、C++14、C++17 三代标准的基础之上介绍 C++ 的特性。
4、C++ 开发工具
C++ 作为一门编译型语言,通常需要考虑如下几类开发工具:
- Editor 编辑器
- Compiler 编译器
- Linker 链接器
当然,如果嫌麻烦的话可以直接使用 IDE (Integrated Developing Environment) 集成开发环境。
💬 在使用 IDE 进行开发时,我们应尽量选择其最新版本,以获得更加现代化和智能化的开发体验。
下面是一些推荐的 IDE:
- Visual Studio
- Eclipse CDT + Gcc
- Visual Studio Code + Gcc/Clang
- XCode (Mac)
💬 如果你需要安装 IDE 并运行第一个 C++ 程序的教程,请参考:
《在 Visual Studio 上开启自己的 C++ 学习之旅》
有关几款 IDE 的使用介绍,请参考崔毅东老师的教学视频,本文不再花大篇幅阐述:
- Visual Studio 介绍(🧭 第1单元 第03节)
- Eclipse 介绍(🧭 第1单元 第04节 1.2演示)
📌 安装 GCC
针对 C++ 语言,Eclipse CDT 和 Visual Studio Code 本质上来说都只提供编辑功能,他们并不能直接编译、链接 C++ 程序。因此,使用这两款开发工具还需要安装第三方的编译器和链接器,才能够合作形成 C++ 的集成开发环境。
在 Windows 平台下,我们可以尝试安装 GCC 编译器套件的 Windows 移植版 —— MinGW (MinGW-W64)、Msys (Msys2) 或 CygWin。
相关工具的安装教程,请参考崔毅东老师的教学视频,本文不再花大篇幅阐述:
- 安装 MinGW-W64 和 Msys2 工具(🧭 第1单元 第04节 2.2演示、3.2演示)
4.1、在 Eclipse 中配置 GCC 编译器
请参考崔毅东老师的教学视频(🧭 第1单元 第04节 4.2演示)
4.2、Eclipse 工程和工作空间
请参考崔毅东老师的教学视频(🧭 第1单元 第04节 4.3演示)
Q:如何学习 C++?
A:Practice! 实践!
参考书目
-
适用于无任何基础的初学者:
- 《Introduction to Programming with C++》(3rd Ed.), Y.Daniel Liang

- 《C++ 程序设计》(第3版),梁勇

- 《Introduction to Programming with C++》(3rd Ed.), Y.Daniel Liang
-
适用于有恒心的读者:
- 《C++ Primer》(5rd Ed.), Stanley B.Lippman等

- 《C++ Primer》(5rd Ed.), Stanley B.Lippman等
-
适用于已入门的读者:
- 《Thinking in C++》(2nd Ed.), Volume 1, Bruce Eckel

电子英文版
- 《Essential C++》, Stanley B.Lippman

- 《Thinking in C++》(2nd Ed.), Volume 1, Bruce Eckel
-
适用于当字典:
- 《The C++ Programming language》, Bjarne Stroustrup

- 《The C++ Programming language》, Bjarne Stroustrup
-
适用于课后拓展:
- 《The C++ Standard Library》, Nicolai M. Josuttis

直接进行一个 C++ 标准库的学习( •̀ ω •́ )✧
- 《Inside C++ Object Model》, Stanley B.Lippman

从编译器的角度来探讨 C++ 的实现方法和优缺点。
- 《The C++ Standard Library》, Nicolai M. Josuttis
相关文章:
「C++程序设计 (面向对象进阶)」学习笔记・一
0、引言 本专栏的系列文章是在学习 北京邮电大学 崔毅东 老师的《C程序设计 (面向对象进阶)》课程过程中整理的。欢迎前往专栏了解更多相关内容~ 😀 有关于现代 C 的基本介绍,请前往《现代C基本介绍》! 🔔 先决条件 本专栏的系列…...
Leetcode125. 验证回文串
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s&…...
【Yellowbrick】特征可视化分析
Yellowbrick特征可视化分析 ⭐Yellowbrick⭐特征分析可视化⭐Rank1D⭐Rank2D ⭐Yellowbrick Yellowbrick是一个用于可视化机器学习模型和评估性能的Python库。它提供了一系列高级可视化工具,帮助数据科学家和机器学习从业者更好地理解、调试和优化他们的模型。 它在…...
Android大厂需要刷的(999道)面试题
想必大家都在为今年的金九银十做准备,今年也是最为艰难的一年。作为程序员从未感觉到如此艰难,身边不是被辞退就是找不到工作。先不说2023年应届生毕业即失业,作为开发15年的老Android程序员,现在也在和300个人挣一个岗位。 肉少…...
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
不论搭建什么工程,运行什么文件,只要在Pycharm中出现ImportError: DLL load failed: 找不到指定的模块这样的问题,以下方法都适用!!! 一、问题描述 我在使用pycharm连接webots,用python控制机…...
Java设计模式:四、行为型模式-08:策略模式
文章目录 一、定义:策略模式二、模拟场景:策略模式三、违背方案:策略模式3.0 引入依赖3.1 工程结构3.2 优惠券折扣计算类3.3 单元测试 四、改善代码:策略模式4.1 工程结构4.2 策略模式结构图4.3 优惠券折扣实现4.3.1 定义优惠券接…...
ICCOA蓝牙数字车钥匙2.0
近期,ICCOA智慧车联开放联盟宣布,由小米、vivo、OPPO、长安、深蓝、吉利、极氪、比亚迪、北汽、蔚来、零跑、雪球、瓶钵、融卡等企业联合参与制定的ICCOA蓝牙数字车钥匙2.0标准(简称DK2.0),于2023年9月1日正式发布实施…...
ArcGIS土地利用程度综合指数分析
成图展示: 土地利用程度综合指数 第一步 准备数据 使用的数据为2010年河南省土地利用类型数据与其行政区划县级数据(为了节省操作,这里使用上次实验的部分数据[1],各土地利用类型已被提取) 第二步 面积统计 水域为例…...
服务端请求伪造(SSRF)及漏洞复现
文章目录 渗透测试漏洞原理服务端请求伪造1. SSRF 概述1.1 SSRF 场景1.1.1 PHP 实现 1.2 SSRF 原理1.3 SSRF 危害 2. SSRF 攻防2.1 SSRF 利用2.1.1 文件访问2.1.2 端口扫描2.1.3 读取本地文件2.1.4 内网应用指纹识别2.1.5 攻击内网Web应用 2.2 SSRF 经典案例2.2.1 访问页面2.2.…...
v-model和v-bind
v-model,它其实就是一个语法糖,作用就是双向绑定表单控件(radio, text,address,email,select,checkbox,textarea) v-bind(简写形式:value值),用于绑定属性值,只能实现数据的单项绑定。 <template> <div>…...
详细介绍 弹性盒子(display:flex)
文章目录 什么是弹性盒子 如何使用弹性盒子flex系列flex-direction 对齐方向 水平对齐垂直对齐flex-wrap 换行flex-flowflex模型说明容器的属性 justify-content X轴对齐方式align-content Y轴对齐方式总结属性值Y轴对齐的另外一种:align-itemsalign-content和alig…...
Docker使用数据卷挂载进行数据存储与共享
一、挂载和数据卷 在 Docker 中,挂载(Mounting)和数据卷(Data Volumes)是用于在容器和宿主机之间共享数据的机制。 挂载:将宿主机文件系统中的目录或文件与容器中的目录或文件进行关联的过程。数据卷&…...
[力扣146. LRU 缓存 ](https://leetcode.cn/problems/lru-cache/description/)
力扣146. LRU 缓存 使用LinkedHashmap(HashMap的子类,能够记住插入数据的顺序). LRU是Lease Recently User的缩写,意思是最近 最少使用。比如设计一个文件缓存系统,每个文件有自己的大小和访问时间,文件缓存系统有总的大小&…...
Mysql存储引擎
目录 一、前言 二、存储引擎 1、InnoDB存储引擎 1.1、简介 1.2、优势 1.3、使用方法 1.4、性能 2、MyISAM存储引擎 2.1、优势 2.2、使用方法 2.3、性能 3、MEMORY存储引擎 4、MyISAM 三、比较 四、总结 一、前言 MySQL是开放源代码的关系型数据库管理系统&…...
算法通关村-----数组实现加法专题问题解析
数组实现整数加法 问题描述 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。详见leetcode66 问题…...
倒排表的压缩算法
For压缩算法 这是倒排表的一种压缩算法。 还是那个问题,如果"小米" 这个词项,在多文档里都有,则就会导致倒排表很大,这时候就会设计到了压缩算法,这里说的是,倒排表。 那末我们来看看 for压缩…...
Android studio实现自定义圆形进度条 带刻度进度条 计步效果 时速表 水波纹效果
目录 原文链接效果图values /layout /activity原文链接 效果图 点击重置后: 该项目总共实现了三种圆形进度条效果 CircleProgress:圆形进度条,可以实现仿 QQ 健康计步器的效果,支持配置进度条背景色、宽度、起始角度,支持进度条渐变DialProgress:类似 CircleProgress,…...
使用【宝塔+docker】在云服务器上部署基于SpringBoot 和 Dubbo RPC 的项目:踩坑记录
待部署的项目包括:前端front,服务提供者backend,服务消费者gateway,注册中心nacos 服务器信息:腾讯云入门级服务器2核2G(后续有对服务器进行升级) 部署工具:前端使用宝塔部署&#x…...
【算法与数据结构】617、LeetCode合并二叉树
文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:采用递归的方式遍历二叉树,【算法与数据结构】144、94、145LeetCode二叉树的前中后遍历&am…...
ffmpeg把RTSP流分段录制成MP4,如果能把ffmpeg.exe改成ffmpeg.dll用,那音视频开发的难度直接就降一个维度啊
比如,原来我们要用ffmpeg录一段RTSP视频流转成MP4,我们有两种方案: 方案一:可以使用以下命令将rtsp流分段存储为mp4文件 ffmpeg -i rtsp://example.com/stream -vcodec copy -acodec aac -f segment -segment_time 3600 -reset_t…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
