「C++程序设计 (面向对象进阶)」学习笔记・一

0、引言

本专栏的系列文章是在学习 北京邮电大学 崔毅东 老师的《C++程序设计 (面向对象进阶)》课程过程中整理的。欢迎前往专栏了解更多相关内容~ 😀

有关于现代 C++ 的基本介绍,请前往《现代C++基本介绍》!

🔔 先决条件

本专栏的系列文章并不适合从未接触过编程的同学,读者需要确保自己已经具备编程基础(特别是 C++ 基础)!您可以参考笔者的「面向对象程序设计(基础)」专栏了解 C++ 基础的相关内容。

1、导论

  • C++C Plus PlusCPP
  • C++ 之父:Bjarne Stroustrup
  • 如果读者还不会念他的名字,那么可以请他本人亲自教授一下哦( •̀ ω •́ )✧(不是
  • C/C++ 在计算机科学中所处的位置:
    1-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
      Introduction to Programming with C++
    • 《C++ 程序设计》(第3版),梁勇
      C++ 程序设计

  • 适用于有恒心的读者:

    • 《C++ Primer》(5rd Ed.), Stanley B.Lippman等
      C++ Primer

  • 适用于已入门的读者:

    • 《Thinking in C++》(2nd Ed.), Volume 1, Bruce Eckel
      Thinking in C++

    电子英文版

    • 《Essential C++》, Stanley B.Lippman
      Essential C++

  • 适用于当字典:

    • 《The C++ Programming language》, Bjarne Stroustrup
      The C++ Programming language

  • 适用于课后拓展:

    • 《The C++ Standard Library》, Nicolai M. Josuttis
      The C++ Standard Library

    直接进行一个 C++ 标准库的学习( •̀ ω •́ )✧

    • 《Inside C++ Object Model》, Stanley B.Lippman
      Inside C++ Object Model

    从编译器的角度来探讨 C++ 的实现方法和优缺点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/98469.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

BIO到NIO、多路复用器, 从理论到实践, 结合实际案例对比各自效率与特点(上)

文章目录 文章引入IO模型及概念梳理BIO简单介绍代码样例压测结果 NIO(单线程模型)简单介绍与BIO的比较代码样例压测结果 多路复用器问题引入 文章引入 如果你对BIO、NIO、多路复用器有些许疑惑, 那么这篇文章就是肯定需要看的, 本文将主要从概念, 代码实现、发展历程的角度去突…

cocosCreator 之 微信小游戏打包

版本: v3.8.0 环境: Mac 介绍 cocosCreator 支持将游戏发布到多个小游戏平台,并提供了打包等流程处理。 本篇文章主要讲述下微信小游戏的发布流程相关。更多内容参考官方文档: 发布到小游戏平台 微信小游戏的发布相关&#xff…

vue3 DOM元素渲染完成之后执行

在Vue 3中,可以使用nextTick函数来在DOM元素渲染完成之后执行代码。nextTick函数会在下次DOM更新循环结束之后执行提供的回调函数。 例如,在Vue 3的组件中,可以这样使用nextTick函数: import { nextTick } from vue;export defa…

多线程与高并发——并发编程(3)

文章目录 三、锁1 锁的分类1.1 可重入锁、不可重入锁1.2 乐观锁、悲观锁1.3 公平锁、非公平锁1.4 互斥锁、共享锁2 深入synchronized2.1 类锁、对象锁2.2 synchronized的优化2.3 synchronized实现原理2.4 synchronized的锁升级2.5 重量级锁底层 ObjectMonitor3 深入ReentrantLo…

并发编程的故事——并发之共享模型

并发之共享模型 文章目录 并发之共享模型一、多线程带来的共享问题二、解决方案三、方法中的synchronize四、变量的线程安全分析五、习题六、Monitor七、synchronize优化八、wait和notify九、sleep和wait十、park和unpark十一、重新理解线程状态十二、多把锁十三、ReentrantLoc…

CocosCreator3.8研究笔记(二)windows环境 VS Code 编辑器的配置

一、设置文件显示和搜索过滤步骤 为了提高搜索效率以及文件列表中隐藏不需要显示的文件, VS Code 需要设置排除目录用于过滤。 比如 cocoscreator 中,编辑器运行时会自动生成一些目录:build、temp、library, 所以应该在搜索中排除…

云计算的三个主要服务模型:IaaS、PaaS 和 SaaS

文章目录 介绍基础设施即服务(Infrastructure as a Service,IaaS)平台即服务(Platform as a Service,PaaS)软件即服务(Software as a Service,SaaS) 区别基础设施即服务&…

C++面试题(吴)-计算机网络部分(2)和常见设计模式

目录 1.网络部分 3.32 说说浏览器从输入 URL 到展现页面的全过程 3.33 简述 HTTP 和 HTTPS 的区别? 3.34 说说 HTTP 中的 referer 头的作用 3.35 说说 HTTP 的方法有哪些 3.36 简述 HTTP 1.0,1.1,2.0 的主要区别 3.37 说说 HTTP 常见的…

vue组装模板(侧边栏+顶部+主体)--项目阶段4

目录 一、前言介绍 二、结构解析 三、页面拆分 (一)页面拆分 1.侧边栏页面(固定)--Aside.vue 2.顶部页面(固定)--Header.vue 3.主体页面(不固定的)--示例用UserView…

PYTHON用户流失数据挖掘:建立逻辑回归、XGBOOST、随机森林、决策树、支持向量机、朴素贝叶斯和KMEANS聚类用户画像...

原文链接:http://tecdat.cn/?p24346 在今天产品高度同质化的品牌营销阶段,企业与企业之间的竞争集中地体现在对客户的争夺上(点击文末“阅读原文”获取完整代码数据)。 “用户就是上帝”促使众多的企业不惜代价去争夺尽可能多的客…

C#,《小白学程序》第七课:列表(List)应用之一“编制高铁车次信息表”

1 文本格式 /// <summary> /// 车站信息类 class /// </summary> public class Station { /// <summary> /// 编号 /// </summary> public int Id { get; set; } 0; /// <summary> /// 车站名 /// </summary>…

bug复刻,解决方案---在改变div层级关系时,导致传参失败

问题描述&#xff1a; 在优化页面时&#xff0c;为了实现网页顶部遮挡效果&#xff08;内容滚动&#xff0c;顶部导航栏不随着一起滚动&#xff0c;并且覆盖&#xff09;&#xff0c;做法是将内容都放在一个div里面&#xff0c;为这个新的div设置样式&#xff0c;margin-top w…

查漏补缺 - JS三 WebAPI

目录 BOMhistory DOM操作DOM1&#xff0c;dom.children 和 dom.childNodes 区别2&#xff0c;dom.remove()3&#xff0c;其他常用 API DOM 属性1&#xff0c;标准属性2&#xff0c;自定义属性 DOM 内容DOM样式DOM事件 JavaScript 包括 EcmaScript 和 WebAPI EcmaScript 包括 语…

25 Linux可视化-Webmin和bt运维工具

25 Linux可视化-Webmin和bt运维工具 文章目录 25 Linux可视化-Webmin和bt运维工具25.1 Web运行环境简介25.2 Webmin的安装及使用25.2.1 安装webmin25.2.2 Webmin使用演示 25.3 bt(宝塔)的安装及使用25.3.1 安装宝塔25.3.2 宝塔Web登录Linux服务器25.3.3 找回宝塔登录密码 学习视…

客路旅行(KLOOK)面试(部分)(未完全解析)

一面 用过Chatgpt的哪个版本&#xff0c;了解Chatgpt版本之间的差异吗 什么是优雅部署&#xff1f;newBing: 服务启动时&#xff0c;检查依赖的组件或容器是否就绪&#xff0c;如果不就绪&#xff0c;等待或重试&#xff0c;直到就绪后再注册到服务中心&#xff0c;对外提供服…

Java之API详解之BigDecimal类的详细解析

7 BigDecimal类 7.1 引入 首先我们来分析一下如下程序的执行结果&#xff1a; public class BigDecimalDemo01 {public static void main(String[] args) {System.out.println(0.09 0.01);}} 这段代码比较简单&#xff0c;就是计算0.09和0.01之和&#xff0c;并且将其结果…

Mapbox-gl 关闭所有Popup,以及关闭按钮出现黑色边框bug

1.官方示例 var popup new mapboxgl.Popup().addTo(map);popup.remove(); 很明显&#xff0c;需要记录popup对象&#xff0c;管理起来比较麻烦。 2.本人采用div的方式关闭所有的popup&#xff0c;在map对象上新增加方法 map.closePopupmapView.popupClear function(){$(&q…

ceph架构及 IO流程

CEPH是由多个节点构成的集群&#xff0c;它具有良好的可扩展性和可靠性。节点之间相互通信以达到&#xff1a; 存储和检索数据 数据复制 监控集群的健康状况 保证数据的完整性 检测故障并恢复 基本架构如下图&#xff1a; 分布式对象存储系统RADOS是CEPH最为关键的技术&a…

WebRTC音视频通话-WebRTC推拉流过程中日志log输出

WebRTC音视频通话-WebRTC推拉流过程中日志log输出 之前实现iOS端调用ossrs服务实现推拉流流程。 推流&#xff1a;https://blog.csdn.net/gloryFlow/article/details/132262724 拉流&#xff1a;https://blog.csdn.net/gloryFlow/article/details/132417602 在推拉流过程中的…

第 3 章 栈和队列(用递归函数求解迷宫问题(求出所有解))

1. 背景说明&#xff1a; 若迷宫 maze 中存在从入口 start 到出口 end 的通道&#xff0c;则求出所有合理解并求出最优解 迷宫示意图&#xff1a; 输入文本&#xff1a; 10 10181 3 1 7 2 3 2 7 3 5 3 6 4 2 4 3 4 4 5 4 6 2 6 6 7 2 7 3 7 4 7 6 7 7 8 11 18 8 2. 示例代码…