简明C++教程
文章平均质量分 91
本系列课程在大神cherno的C++教程基础上整理完成,非常喜欢cherno的风格,希望大家也能喜欢。
九灵猴君
这个作者很懒,什么都没留下…
展开
-
026 - C++ 可见性
现在人们对于可见性的争论有很多,我建议你坚持自己的想法和习惯。有些人总是将变量写成私有的,然后搞一个公共的 getter 或者 setter ,这也是我强烈反对的一种操作。你可以把你的想法发在评论区,本期就到这里,下期再见。原创 2023-05-06 15:44:47 · 752 阅读 · 0 评论 -
025 - C++ 接口(纯虚函数)
这就是纯虚函数整个的工作原理,它知道任何 Printable 的东西,它们都有一个 GetClassName 函数去调用,如果你不实现这个函数,你就不能实例化这个类。这就是 C++ 中的接口,也就是 C++ 中的纯虚函数,它是非常有用的一个工具,可以被用在刚才的这个场景下,如果想要确保类都有一个特定的方法,那么可以将这个类作为参数放入一个通用的函数中,然后就可以调用这个方法或者做其他事情。本期内容就是这些,下期再见。原创 2023-05-05 17:17:22 · 647 阅读 · 0 评论 -
024 - C++ 虚函数
这就是虚函数的本质,但是很遗憾的一点是,虚函数并不是没有额外的开销的,有两种与虚函数相关的运行时成本。首先,我们需要额外的内存来存储 V 表,这样我们就可以分配到正确的函数,包括基类中要有一个成员指针指向 V 表;其次,每次我们调用虚函数时,我们需要遍历这个表来确定要映射到哪个函数,这些是额外的性能损失。由于这些成本,很多人不喜欢使用虚函数,但是我使用的过程中,没有遇到开销特别大的情况。就我个人而言,我经常使用它,可能在一些嵌入式平台上,CPU性能很差的时候需要避免使用虚函数。原创 2023-05-04 17:35:23 · 462 阅读 · 0 评论 -
023 - C++ 继承
在本系列课程中我们将分解所有与面向对象编程相关的独立概念,多态、继承等等。所有这些概念都值得好好研究。如果将整个体系如果比喻成一个物件,我还只是接触到了它的表面而已。好了,本期的内容就是这些,下期再见。原创 2023-04-26 10:55:45 · 450 阅读 · 0 评论 -
022 - C++ 析构函数
上期我们讨论了构造函数。认识了它是什么以及如何使用它。如果你没有看上一期,那么你一定要回去看一下。今天我们要讨论一下它的“孪生兄弟”,,它们在某些方面非常相似。构造函数是你创建一个新的实例对象时运行,而析构函数是在销毁对象时运行。所以当一个对象要被销毁时,析构函数会被调用。构造函数通常是用于设置变量或做任何你需要的初始化,对应的析构函数是用于卸载变量等东西,清理你使用过的内存。析构函数同时适用于栈和堆分配的对象。如果你使用 New 分配一个对象,当你调用 delete 时析构函数也会被调用。原创 2023-04-25 10:19:20 · 413 阅读 · 0 评论 -
021 - C++ 构造函数
还有一些特殊类型的构造函数,如复制构造函数、移动构造函数等。它们每一个都会单独有一期,因为它们都很复杂。这就是构造函数的基本使用了,记住一句话就行:它是一个特殊的方法,在你创建类的实例时运行,主要用途是初始化该类。当你创建一个新对象实例时,构造函数确保你初始化的所有内存,完成你所有需要做的设置。本期就是这些。如果你有什么想法,可以放在评论区哈,下期再见。原创 2023-04-24 10:40:26 · 422 阅读 · 0 评论 -
020 - C++ 枚举
好了,枚举的本质就是让我们的编码更容易,让我们的代码更干净。在枚举的后面其实就是整数,你可以把它们用在很多地方。枚举有很多很多用途,我们将在以后的细节中介绍(有可能还会有一个专门介绍枚举类的一期)。好了,记住:如果你有一个数值集合想要用数字来表示它们,那么枚举就是你想要的。下期再见。原创 2023-04-22 22:57:46 · 405 阅读 · 0 评论 -
019 - C++ 中的局部静态(local static)
这是一个很好的例子。当你想这样用的时候,不一定非要用单例类。可以通过替换掉初始化函数来实现。例如,你可能需要在程序中的某处调用一个静态初始化函数来创建所有对象。你就可以使用静态 get 方法之类的东西,在很多情况下用它来简化代码。你可以看到它有很多用途,真的很好用,所以请多多练习使用它。以上是我使用过程中的一些想法,大家有什么别的看法可以发在评论区哈。下期再见。原创 2023-04-21 23:15:32 · 905 阅读 · 1 评论 -
018 - C++ 类和结构体中的静态(static)
我希望我把相关的内容都讲清楚了。下期我们看看如何将许多的 static 知识整合了到我们一直在研究的 log 类中,看看那会变成是什么样子。你可以先去看一下如何写一个 C++ 类那期。随着系列的进行,我们会继续增加 log 类的内容,并发掘一些我们可以做的新事情,并在学习新概念的同时不断改进它。好了,记住,static 对于那些静态数据非常有用,这些数据不会在类实例之间发生变化。本期的内容就是这些,下期再见。原创 2023-04-20 09:58:26 · 1769 阅读 · 4 评论 -
017 - C++ 中的静态(static)
那么我们使用 static 的理由是什么呢?你可以参考一下我们为什么要在类中使用 private?如果你不需要变量是全局变量,你就需要尽可能多的使用静态变量。一旦在全局作用域下声明了东西,如果没有设定为static,链接器将会跨编译单元进行链接。这意味着你已经创建了一个完全全局的变量,它可以在任何地方使用,这可能会导致一些非常糟糕的 bug。归根到底,全局变量是不好的。我不太喜欢用全局变量,也不建议你使用。除非你真的需要他们跨转换单元链接。好了,本期的内容就是这些,下期再见。原创 2023-04-18 20:47:38 · 520 阅读 · 0 评论 -
016 - 如何写一个 C++ 类
到目前为止,我们学了类 class,本期我们要尝试着从头开始写一个类。本期不会讲的太深。我们不会写非常复杂的类,我们要会完成一个基本的 log 类,来演示一下我们已经学过的相关知识。接下来的几期,我们会继续学习类。并引入一些新的概念。所以你会看到从一个基本版本的类到一个做同样事情的更高级版本的类的过程和区别。它们是更为完整的代码。让我们来开始写我们的 log 类。原创 2023-04-16 21:14:45 · 785 阅读 · 3 评论 -
015 - C++ 类与结构体对比
今天这期我们主要解决一个问题,就是 C++ 中的类和结构体有什么区别。上一期我们讲类的时候, 我们对类有了一些基本的介绍,在本期的学习开始之前你可以先看看那一期。本期我们有两个术语,结构体,它是 structure 的缩写,以及类 class。它们的用法看起来有点相似,很多人都会困惑他们之间的区别。你是应该使用 struct,还是应该使用一个 class,本期内容我们将搞清楚这些。区别是这样的,——基本上没有区别。真的,它们之间只有一个关于的小区别。原创 2023-04-15 22:17:40 · 486 阅读 · 0 评论 -
014 - C++ 类
本期我们要讲的是 C++ 中的类。我们终于讲到了,这是一种非常流行的编程方式,面向对象编程实际上只是一种你可以采用的编写代码的方式,其他语言例如 C#、Java 这些主要是面向对象的语言,事实上,用这些语言你真的不能写任何其他类型的代码,尽管你也可以尝试这样做,因为最终这些语言都是面向对象的语言,C++ 有点不同,因为它并没有强加给你一种特定的风格。原创 2023-04-14 15:07:24 · 436 阅读 · 0 评论 -
013 - C++引用
本期我们要讲的是 C++ 中的。上期我们讨论了,如果你没有看过那期内容,你一定要回去看看,因为引用实际上只是指针的扩展,你至少需要在基本层面上理解指针是如何工作的,然后才能继续学习本期的内容,本期内容是指针那一期的链接。原创 2023-04-14 09:12:58 · 890 阅读 · 0 评论 -
012 - C++指针
本期我们将学习 C++ 中的指针。指针是一个令很多人都很痛苦的内容,然而指针其实没有大家想象中的那么复杂。另外我先要说明本期我们要讨论的是原始的指针,还有一种常用的指针叫智能指针,这个我们在之后的内容中会接触学习。,对计算机来说内存就是一切,如果非要我说出编程中最重要的一件事,我可能会说是。当你编写了一段程序并启动它时,所有的程序都被载入到内存中,指令告诉计算机在你写的代码中要做什么。所有这些都被加载到内存中,CPU 就是这样访问你的程序并执行它的指令的。原创 2023-04-10 22:40:25 · 610 阅读 · 0 评论 -
011 - C++控制流语句(continue, break, return)
今天我们讲的是控制流语句,本期内容是上期课程的延续。控制流语句一般与循环语句一起工作,它们让我们可以更好的控制这些循环的实际运行。原创 2023-04-07 10:32:41 · 380 阅读 · 0 评论 -
010 - C++循环 (for、while)
以上就是本期的内容了,希望你们喜欢这个对于循环的简单介绍,我们会在整个系列中大量使用循环,它会在你几乎所有能想到的算法中被使用,循环对数组非常有用,我们将来会谈到如何使用循环来处理数组,这些都是紧密相连的,未来我们会深入探讨在汇编及 CPU 指令上的循环。本期就是这些,下期再见。原创 2023-03-31 15:13:15 · 338 阅读 · 0 评论 -
009 - C++条件与分支(if语句)
今天我们来看看条件语句,换句话说,也就是语句、和等等这写语句。我知道大家基本上已经非常了解语句和所有 C++ 中的分支语句,但我还是鼓励你们继续看完这一讲,这里可能包含一些新东西。我们还会深入一点看它如何在 C++ 中工作,这些对你理解程序如何运行是有一些帮助的。原创 2023-03-30 17:04:08 · 502 阅读 · 0 评论 -
008 - 如何在 Visual Studio 中调试代码
本期课程我们学习如何使用 Visual Studio 调试代码,也就是Debug。调试是非常重要的,这是编程的一部分,也是学习的一部分,因为如果你知道如何调试你的代码,你就会明白你的程序是如何工作的,计算机是如何实际运行你的代码的。所以我们应该学习如何调试。不只是 C++,调试的概念几乎适用于所有的 IDE,大部分IDE都支持本期的内容。本期会讲到几个重要的特征,和是调试的两大部分,当然,在实际操作中你会同时使用它们,换句话说,你要设置断点就是为了读取内存。原创 2023-03-24 17:09:50 · 341 阅读 · 0 评论 -
007 - C++头文件
让我们举一个简单的例子。在 log.cpp 中 Ctrl+F7 ,我们会得到一个错误,因为这个 Log 函数在此文件中实际上不存在,这个文件不知道 Log 函数是什么东西。当然,在 main.cpp 中,Log 函数是存在的,如果我尝试编译我的程序按下 Ctrl + F7 你会看到它工作得很好,我们没有任何错误。log.cpp 到底需要怎么处理才能不出错呢?我们怎么知道 Log 函数是确实存在的,它只是在别处定义呢?需要。原创 2023-03-24 17:04:09 · 506 阅读 · 0 评论 -
006 - C++函数
假设我们想把两个数相乘,我们想写出这样的一个函数。我们对上面的代码做一些详细的解释。首先写的是所谓的返回值int,也就是说,这就是这个函数的返回类型,因为是两个整数相乘,这当然会得到一个整数;然后给出函数名multiply,它有两个参数a和b,这些就是我们要乘的数,它们的类型都是int。然后给出函数体,它会返回 a*b。这样你就得到一个函数,它有两个都是整数的参数,该函数的功能是返回两者的乘积。原创 2023-03-20 10:32:42 · 58 阅读 · 0 评论 -
005 - C++变量
本期我们来讨论一下c ++中的变量。在一个 C++ 程序中,我们希望能够使用数据,编程的大部分内容实际上都是在使用数据。我们操作任何类型的数据,我们在程序中使用任何数据,包括我们想要改变、想要修改, 想要读和写。那么我们就需要把数据存储进叫做变量的东西里面。变量允许我们命名我们存储在内存中的数据。原创 2023-03-20 10:15:54 · 98 阅读 · 0 评论 -
004 - C++链接器是如何工作的
今天我们来谈谈链接实际上做什么的?是一个过程, 当我们从源 C++文件转为实际的可执行的二进制文件,第一阶段是编译原文件,有需要的小伙伴可以看上一讲,一旦我们把文件编译好,我们需要通过链接找到每个符号和函数在哪里,并把它们连接起来。我们先要回忆起来,每个文件被编译成一个单独的目标文件,转换单元彼此之间没有关系,这些文件不能交互,所以如果我们决定把我们的程序分割成多个C++文件,我们需要一种方法把这些文件连接在一起成一个项目,而这就是链接器的主要目的和要做的事情,即使你在外部文件中没有函数。原创 2023-03-20 10:03:58 · 277 阅读 · 1 评论 -
003 - C++编译器是如何工作的
今天我们来学C++编译器如何工作。我们先来思考一分钟大概的思路是什么,C++编译器实际上负责什么?我们把 C++ 代码写成文本,它只是一个文本文件,然后我们要一些将文本转换为实际应用程序的方法,我们的计算机可以运行。从文本形式到实际可执行的二进制文件,我们基本上有两个主要的操作需要进行,其中一个叫做编译,另外一个被称为链接。在本期课程中,我们将讨论编译。原创 2023-03-20 09:45:39 · 242 阅读 · 0 评论 -
002 - C++是如何工作的
申明就是说,这个符号、 这个函数是存在的。定义的意思是说,这个函数到底是什么,是函数的函数体。声明与实际的定义很相似,之所以并叫做定义是因为定义操作不仅申明了log 函数名,而且包含了函数体,告诉了这个函数是要干什么。申明与定义很相似,但是它没有函数体,仅仅加了个分号在末尾,实际上,你甚至不用指定参数的名字,因为这不重要,你可以这样写,但是作为经验,还是建议指定参数名字,这样更加清晰,让我们编译看看结果,编译没问题。原创 2023-03-09 10:27:44 · 154 阅读 · 0 评论 -
001 - 欢迎来到C++
解决一个问题,也是第一讲需要解决的最重要的问题,为什么要学习C++?这是不是一种过时的语言?现在学习 C ++有什么好处?原创 2023-03-07 15:54:13 · 105 阅读 · 0 评论