当前位置: 首页 > news >正文

「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.lryc.cn/news/155721.html

相关文章:

  • Leetcode125. 验证回文串
  • 【Yellowbrick】特征可视化分析
  • Android大厂需要刷的(999道)面试题
  • Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
  • Java设计模式:四、行为型模式-08:策略模式
  • ICCOA蓝牙数字车钥匙2.0
  • ArcGIS土地利用程度综合指数分析
  • 服务端请求伪造(SSRF)及漏洞复现
  • v-model和v-bind
  • 详细介绍 弹性盒子(display:flex)
  • Docker使用数据卷挂载进行数据存储与共享
  • [力扣146. LRU 缓存 ](https://leetcode.cn/problems/lru-cache/description/)
  • Mysql存储引擎
  • 算法通关村-----数组实现加法专题问题解析
  • 倒排表的压缩算法
  • Android studio实现自定义圆形进度条 带刻度进度条 计步效果 时速表 水波纹效果
  • 使用【宝塔+docker】在云服务器上部署基于SpringBoot 和 Dubbo RPC 的项目:踩坑记录
  • 【算法与数据结构】617、LeetCode合并二叉树
  • ffmpeg把RTSP流分段录制成MP4,如果能把ffmpeg.exe改成ffmpeg.dll用,那音视频开发的难度直接就降一个维度啊
  • 朝夕光年游戏自动化测试实践
  • 数据结构基本概念
  • 【javaweb】学习日记Day9 - Mybatis 基础操作
  • Mybatis学习|Mybatis缓存:一级缓存、二级缓存
  • 230903文本docx
  • Mysql-DML(数据处理语言)
  • 部署项目至服务器
  • OSI与TCP IP各层的结构与功能,都有哪些协议
  • 【2023年11月第四版教材】第10章《进度管理》(第三部分)
  • 【Vuex状态管理】Vuex的基本使用;核心概念State、Getters、Mutations、Actions、Modules的基本使用
  • Linux centos7 bash编程(循环与条件判断)