![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++ 学习记录
文章平均质量分 92
wenzi嵌入式软件
这个作者很懒,什么都没留下…
展开
-
适合具备 C 语言基础的 C++ 入门教程(十五)
前言 在上一则教程中,叙述了当处于多线程环境下时,智能指针所指向的引用计数可能会因为此导致引用计数出问题,因此,引入了原子操作的相关概念,换句话说,这种操作也被称之为是轻量级指针,那对于这种轻量型指针又会存在什么问题呢?本节内容将着重叙述这个问题。另外需要注意的是,关于最近几次的内容互相之间都是息息相关的,需要结合上下文进行理解,同时,因为涉及到的代码比较多,如果哪里没有说明白的地方,需要下载对应的源代码进行对照分析。好了,接下来,进入本次内容的分享。 强指针 在说明强指针这个概念之前,我们先从代码的角度慢原创 2021-03-13 15:15:35 · 255 阅读 · 0 评论 -
适合具备 C 语言基础的 C++ 入门教程(十四)
前言 在上一则教程中,我们引入了智能指针的相关概念,并详细地说明了智能指针的用法,而且我们也对智能指针进行了一些完善,使其更加具备普适性,在前一则教程中,我们也提到了说虽然已经完善了很多,但是仍然存在着问题,这个问题是什么呢?我们本节教程将着重叙述这个内容。 多线程下存在的问题 在讲述多线程下存在的问题之前,我们需要了解一下在一个系统中,当要对一个变量进行操作的时候,需要经历哪些步骤,步骤如下: 由上述示意图可知,如果要进行 count++,那么这个时候要进行读入,+1,写入三个操作。而正是因为这个操作,原创 2021-03-07 14:31:22 · 230 阅读 · 0 评论 -
适合具备 C 语言基础的 C++ 入门教程(十三)
前言 无论是在C还是C++中,指针都是在使用的时候需要非常谨慎的一个点,而在C++中,我们引入一个智能指针的概念,以此来规避在使用指针时可能出现的问题。 智能指针的引入 我们以之前的一个程序为例子,也就是Person类,如下是Person类的代码: class Person { public: Person() { cout <<"Pserson()"<<endl; } ~Person() { cout << "~Person()"原创 2021-03-02 19:06:40 · 251 阅读 · 0 评论 -
适合具备 C 语言基础的 C++ 入门教程(十二)
引言 在前面的教程中,叙述了模板函数以及模板类的相关概念,在本节教程中,笔者将着重叙述 C++中的异常机制,所谓异常,是程序在执行期间产生的问题,异常提供一种转移程序控制权的方式。而且异常处理主要涉及到三个关键字:try、catch、throw,下面将对异常这个概念进行详细叙述。 异常的引入 为什么要引入异常这个机制呢,假设有如下一个调用关系: A ----> B ----> C 那如果说是,C函数中出现了一个问题,那要将这个问题找到,就需要在 C函数里返回一个值,然后根据这个值一级一级地向上原创 2021-02-28 16:10:45 · 229 阅读 · 0 评论 -
适合具备 C 语言基础的 C++ 入门教程(十一)
前言 在上一则教程中,着重叙述了抽象类界面以及函数模板的相关内容,在本节教程中,笔者将详细阐述函数模板重载的概念,将从具体的实例中阐述函数模板重载要注意的内容。 函数模板重载 函数重载是在教程最开始就阐述过的概念,那么函数模板重载又该如何理解呢,我们以上一节教程中比大小的函数模板为背景,具体阐述函数模板重载的概念,代码如下所示: template<typename T> const T& mymax(const T& a, const T& b) { cout<&原创 2021-02-26 10:45:34 · 238 阅读 · 0 评论 -
适合具备 C 语言基础的 C++ 入门教程(十)
前言 在上一则教程中,叙述了抽象类以及动态链接库的相关内容,本节来叙述一下抽象类界面的相关内容,以及本节即将引入一个新的概念,模板。 抽象类界面 何为抽象类界面呢?要说清楚这个概念,需要回顾上一则教程中所述的类编程和应用编程两个概念,为了实现应用编程和类编程,引入了动态链接库的概念,要达到的效果就是当更改类的代码的时候,而不更改应用程序的代码的时候,只需要重新生成动态链接库,而不需要重新生成可执行文件。那么我们回顾之前的代码,看应用编程里面的内容,也就是主函数里面的内容: #include "Human.h原创 2021-02-24 23:14:04 · 426 阅读 · 0 评论 -
适合具备 C 语言基础的 C++ 入门教程(九)
前言 在上一则教程中,叙述了关于C++类型转换的相关内容,在本节教程中,将叙述 C++的另一个内容,也就是抽象,这也是 C++相对于 C语言来说独特的一点,下面我们就来着重叙述这一点。 纯虚函数 在介绍抽象类之前,需要弄明白何为纯虚函数,下面假定我们有这样一个需求: 做一个“各个国家的人的调查”,调查各个国家的人的:饮食、穿衣、开车 要完成这样一个事情,那我们现在就需要实现这样几个类,一个是 Human类,其他国家的人从 Human类里派生而来,就比如说是Chinese和Englishman,我们再回过原创 2021-02-24 16:58:48 · 255 阅读 · 0 评论 -
适合具备 C 语言基础的 C++ 入门教程(八)
前言 在前一则教程中,我们阐述了多态的相关概念,其中就包括实现多态所必须的虚函数,以及使用多态这个性质时一些限制的内容,本节教程将着重讲解 C++中的类型转换问题,其中就包括:dynamic_cast、static_cast、reinterpret_cast以及const_cast。 C语言的类型转换 隐式类型转换 我们在使用C语言进行编程的时候,时常会涉及到类型转换的问题,我们首先就隐式的类型转换进行阐述,话不多说,我们来看一段代码: #include <stdio.h> int main(原创 2021-02-22 14:43:16 · 376 阅读 · 0 评论 -
适合具备 C 语言基础的 C++ 入门教程(七)
前言 在前面的教程中,阐述了继承的相关内容,其中就包括继承之后数据成员的访问控制以及多重继承,虚拟继承等内容,本节的内容即将阐述另外一个面向对象的特性:多态,多态是面向对象编程三大特性之一。 定义 如何通俗的话来解释多态呢?我们印出来这样一个例子:首先,我们说:人类用手吃饭是本能,而英国人是用刀叉吃饭,中国人则是用筷子吃饭,那现在有一个问题了,当我们问这个人是怎么吃饭的,就不能简单地回答说用筷子或者是用刀叉吃饭,应该根据其所在地国别不同而采用不同的吃饭方式,这就是多态。 代码实现 上述用通俗的话解释了一下,原创 2021-02-21 11:05:13 · 317 阅读 · 0 评论 -
适合具备 C 语言基础的 C++ 入门教程(六)
前言 再上一则教程中,着重讲述了派生类继承于父类之后的一些访问控制,在本次教程中,将介绍如下几个点:派生类扩展父类功能,派生类的空间分布,以及多重继承的相关概念。 派生类扩展父类的功能 在前文所述的 Father类我们通常也称之为父类或者说称之为基类,而 Son类我们则称之为子类或者是派生类,我们知道通过public继承的方式Son类可以继承到父类的 it_skill,那么我们可不可以将这个继承得到的 it_skill发扬光大呢?实际上是可以的,用更加专业的话来讲就是覆写,也就是 override,代码如下原创 2021-02-20 10:08:06 · 296 阅读 · 4 评论 -
适合具备 C 语言基础的 C++ 入门教程(五)
前言 在上述教程中,我们已经完成了 C++相对于 C语言来说独特的语法部分,在接下来的教程中,我们将叙述 C++中面向对象的语法特性。我们在学习面向对象的这种编程方法的时候,常常会听到这三个词,封装、继承、派生,这也是面向对象编程的三大特性,在本节我们将依次阐述封装、继承、派生的具体用法,在这里,我们先叙述的是封装这个属性的的相关内容。下图是关于 封装 这个特性所包含的一些内容。 封装 下图就是封装所具备的相关特性: 那么上图所示的抽象出数据成员以及成员函数具体的含义是什么呢,正如前面教程所述,在前面的教原创 2021-02-12 20:58:53 · 304 阅读 · 1 评论 -
适合具备 C 语言基础的 C++ 入门教程(四)
前言 在上一则教程中,我们讲述了重载运算符中前 ++和后++的重载函数的实现,阐述了在 C++中可以将运算符进行重载的方法,这种方法大大地便利了程序员编写代码,在接下来地叙述中,我们将着重讲述运算发重载时地一些更为细致地内容,其中就包括当重载地运算符返回值为引用和非引用两种状态时,代码执行效率地高低以及采用在类内实现运算符重载函数的方法。 返回值为引用和非引用的区别 在上述所示的类当中,增加一部分代码,加入析构函数以及拷贝构造函数,代码如下所示: class Point { private: int x;原创 2021-02-11 09:05:47 · 250 阅读 · 0 评论 -
适合具备 C 语言基础的 C++ 入门教程(三)
前言 在上一则教程中,着重地阐述了构造函数以及析构函数地相关概念,这也是C++中非常重要地两个概念之一。在今天地教程中,笔者将继续叙述 C++相对于 C语言来说不同的点,将详细叙述命名空间,静态成员,友元函数以及运算符重载这几个知识点。 C++ 命名空间 命名空间的存在是为了区分不同库的相同的函数名,用一个简单的例子来说明这个问题就是在 windows的文件系统中,不同文件夹下可以有相同名字的文件,相同文件夹下因为这相同文件处在不同的范围内,用 C++ 说白了也就是处在不同的命名空间中。文件系统的一个结构图原创 2021-02-10 09:42:42 · 299 阅读 · 1 评论 -
适合具备 C 语言基础的 C++ 入门教程(二)
前言 在上一则教程中,通过与 C 语言相比较引出了 C++ 的相关特性,其中就包括函数重载,引用,this 指针,以及在脱离 IDE 编写 C++ 程序时,所要用到的 Makefile的相关语法。本节所要叙述的是 C++的另外两个重要的特性,也就是构造函数和析构函数的相关内容,这两部分内容也是有别于 c语言而存在的,也是 c++的一个重要特性。 构造函数 类的构造函数是类的一种特殊的成员函数,它会在每次创建新的对象的时候执行,构造函数的名称和类的名称是完全相同的,并不会返回任何的类型,也不会返回 void。原创 2021-02-09 10:44:51 · 313 阅读 · 0 评论 -
适合具备 C 语言基础的 C++ 入门教程(一)
引言 C 语言通常被认为是一种面向过程的语言,因为其本身的特性更容易编写面向过程的代码,当然也不排除使用 C 语言编写面向过程的代码,比如 Linux 的源代码以及现在很火的国产物联网操作系统 RT-Thread,其内核的实现方式都是使用 C 语言实现的面向对象的代码。相比于 C 语言来说,C++ 更能够实现面向对象的程序设计,其具有的特性也要比 C 语言要多的多。下面假设有这样一个需求。 现要描述两个人的信息,姓名,职业,年龄,并输出。 我们首先先使用 C 语言的设计思路实现这个功能。 C语言描述原创 2021-02-08 14:31:35 · 913 阅读 · 2 评论