代码改变世界

随笔分类 -  《C++远征》系列视频讲解

白话C++系列(35) -- C++标准模板库

2016-07-09 22:03 by Keiven_LY, 908 阅读, 收藏, 编辑
摘要: C++标准模板库,简称为STL:Standard Template Lib。关于STL涉及的部分比较多,我们这里只选具有代表性和最常用的部分给大家进行分享。 vector向量 vector的本质就是:对数组的封装。大家可以将其看作是一个数组,只不过对于vector这个数组来说,相对于我们之前所学的传 阅读全文

白话C++系列(34)-- 类模板

2016-07-05 20:47 by Keiven_LY, 659 阅读, 收藏, 编辑
摘要: 类模板 为什么会有类模板呢?这和函数模板的道理是一样的,是因为在很多使用场合下,一个类会用到很多次,而在用的时候发现很多重复的地方,只有它的数据类型不同,所以这个时候我们就要用到类模板。我们看下面一个例子: 在这里,我们定义了一个类:MyArray,其中,我们用T这种数据类型来定义了它的数据成员的指 阅读全文

白话C++系列(33) -- 函数模板

2016-07-05 20:38 by Keiven_LY, 812 阅读, 收藏, 编辑
摘要: 思考:为什么要引入模板呢? 对于这个问题,我们通过一个例子让大家切实体会一下,模板给我们带来的好处。 当我们要写一个比较大小的函数时,如果我们要比较的两个数是整数,那么,我们往往会这样来定义: 首先,传入两个int类型的参数a和b,然后去比较a和b的大小,将较大的数通过return返回出来,使它成为 阅读全文

白话C++系列(32) -- 运算符重载

2016-07-03 21:47 by Keiven_LY, 1014 阅读, 收藏, 编辑
摘要: 运算符重载 什么是运算符重载呢?所谓运算符重载,就是给原有运算符赋予新的功能。比如说,加好(+)是用来做两个数字相加操作的(如:1+1=2),但是,我们往往用加号来让两个字符串作拼接(如:慕+课=慕课),那么,这个时候就是给加号做了运算符的重载。我们来看一个常见的例子: 在这个例子当中,我们就使用了 阅读全文

白话C++系列(31) -- static

2016-06-28 21:01 by Keiven_LY, 660 阅读, 收藏, 编辑
摘要: static 前面的课程我们介绍了:普通的数据成员和普通的成员函数的定义方法,又介绍了const关键字,并且讲解了用const关键字来修饰数据成员和成员函数,我们把这样的数据成员和成员函数称之为常数据成员和常成员函数。 这节课,我们再为大家介绍一个关键字:static(静态的)。在C++中提到静态, 阅读全文

白话C++系列(30) -- 友元类

2016-06-28 20:43 by Keiven_LY, 508 阅读, 收藏, 编辑
摘要: 友元类 友元类的定义与友元函数的定义非常相似,也是使用关键字friend,后面跟一个类的类名即可。需要大家特别注意的是,如果我们要声明一个友元类的时候,需要在当前这个类的前面先声明这个类,如下所示: 上面我们声明了Circle类为Coordinate类的友元类,而且在Coordinate类前面也声明 阅读全文

白话C++系列(29) -- 友元函数

2016-06-28 20:34 by Keiven_LY, 648 阅读, 收藏, 编辑
摘要: C++远征之模板篇 C++中的模板体现在函数上叫做模板函数,体现在类上就叫做模板类。由于模板用途广泛,经过前辈们不断的归纳总结,最终发展成一套使用规范,功能强大,性能优良的标准模板类。 在前面的课程中,我们提到过C++中存在一种朋友关系,这种朋友关系如果体现在函数上,那么我们就称之为友元函数;如果体 阅读全文

白话C++系列(28) -- 异常处理

2016-06-28 20:20 by Keiven_LY, 514 阅读, 收藏, 编辑
摘要: 异常处理 所谓异常:程序运行期出现的错误 异常处理:对有可能发生异常的地方做出预见性的安排 如果我们做出的安排合理,并且能够给出人性化的提示,那么使用者就不会觉得突兀,使用者就会根据我们给出的提示做相应的操作。比如说,告诉使用者网线没有插,待插上网线才可以使用,否则没法联网;再比如,告诉使用者内存太 阅读全文

白话C++系列(27) -- RTTI:运行时类型识别

2016-06-20 20:43 by Keiven_LY, 673 阅读, 收藏, 编辑
摘要: RTTI—运行时类型识别 RTTI:Run-Time Type Identification。 那么RTTI如何来体现呢?这就要涉及到typeid和dynamic_cast这两个知识点了。为了更好的去理解,那么我们就通过一个例子来说明。这个例子大家已经非常熟悉了,如下: 首先定义一个Flyable类 阅读全文

白话C++系列(26) -- 接口类

2016-06-20 20:27 by Keiven_LY, 856 阅读, 收藏, 编辑
摘要: 接口类 问题:什么是接口类?? 如果在一个抽象类中,仅含有纯虚函数,而不含有其他的任何东西,那么我们就称之为接口类。即:仅含有纯虚函数的类称为接口类。 那么,我们如何理解接口类的定义呢? 也就是说,在类当中,没有任何的数据成员,只有成员函数,而这仅有的成员函数当中,其又都是纯虚函数,此时,我们就把这 阅读全文

白话C++系列(25) -- 纯虚函数和抽象类

2016-06-13 19:48 by Keiven_LY, 704 阅读, 收藏, 编辑
摘要: 下面通过一个例子来说明纯虚函数的定义方法 在这个类当中,我们定义了一个普通的虚函数,并且也定义了一个纯虚函数。那么,纯虚函数是什么呢??从上面的定义可以看到,纯虚函数就是没有函数体,同时在定义的时候,其函数名后面要加上“= 0”。 纯虚函数的实现原理 本节从虚函数表的角度来说明纯虚函数的实现原理。 阅读全文

白话C++系列(24) -- 虚函数与虚析构函数实现原理

2016-06-06 21:47 by Keiven_LY, 1729 阅读, 收藏, 编辑
摘要: 虚函数与虚析构函数原理 前面我们学习了虚函数和虚析构函数,大家一定觉得很神奇,也很想知道,到底什么原因,采用了什么方法实现了虚函数和虚析构函数。这节课就为大家来揭晓虚函数和虚析构函数的实现原理。 关于实现原理的部分,因为涉及到函数指针,所以先给大家介绍一下函数指针的相关内容。 函数指针 我们在前面的 阅读全文

白话C++系列(23) -- 虚析构函数

2016-06-06 21:24 by Keiven_LY, 1010 阅读, 收藏, 编辑
摘要: 虚析构函数 之前我们已经重点学习了动态多态,那么在动态多态中还存在着问题 内存泄漏。那么,怎么来解决多态中的内存泄漏问题呢?我们来通过一个例子来说明。 在这里我们定义了一个Shape的类,又定义了一个Circle的类,并且Circle类以public的方式继承Shape类。但是这个Circle类与我 阅读全文

白话C++系列(22) -- 虚函数

2016-06-01 14:49 by Keiven_LY, 824 阅读, 收藏, 编辑
摘要: C++远征之多态篇 多态概述 讲到多态,那什么是多态呢? 所谓多态,简单来说就是,当发出一条命令的时候,不同的对象接收到同样的命令之后,所做出的动作是不同的,那么我们就把这种情况称之为多态。 虚函数及其实现原理 上一小节,我们笼统了解释了什么是多态,现在,我们来看一看书本上是如何来定义多态的,如下: 阅读全文

白话C++系列(21) -- 虚继承

2016-05-29 19:07 by Keiven_LY, 877 阅读, 收藏, 编辑
摘要: 虚继承 多继承+多重继承的烦扰 先来看一个例子,在这个例子中,类A是父类,类B和类C继承了类A,而类D既继承类B又继承类C(如下图所示),我们称这种继承关系又称之为菱形继承。在菱形继承中我们发现,既有多继承,也有多重继承 那么,现在问题来了…… 当我们要实例化D的对象的时候呢,我们发现,D是从B继承 阅读全文

白话C++系列(20) -- 多继承和多重继承

2016-05-22 22:11 by Keiven_LY, 1052 阅读, 收藏, 编辑
摘要: 多继承和多重继承 多重继承 什么是多重继承呢?如果有这样三个类:人类、士兵类、步兵类。其中,士兵类继承了人类,步兵类继承了士兵类,我们就称这三个类之间存在多重继承的关系(如下所示)。 如果这三个类在继承的时候,都使用的是public方式,那么它们也存在着以下关系:士兵是一个人,步兵是一个士兵,步兵也 阅读全文

白话C++系列(19) -- is-a

2016-05-20 14:12 by Keiven_LY, 774 阅读, 收藏, 编辑
摘要: is-a 什么是is-a? 我们看下面两个例子: 隐形眼镜也是眼镜。如果眼镜是基类,那么隐形眼镜就可以是眼镜的派生类。于是,对于任何一个隐形眼镜的对象来说,我们都可以称之为眼镜,这是没有错误的。在C++中,我们就把这种关系称之为is-a。 再比如,我们定义一个人的类,再定义一个工人的类,再定义一个士 阅读全文

白话C++系列(18) -- 继承方式、隐藏

2016-05-16 21:53 by Keiven_LY, 731 阅读, 收藏, 编辑
摘要: 继承方式 这节课来学习继承的方式。既然有继承的关系,就一定会有以某种方式来继承的问题。C++中有三种继承方式,如下: 公有继承 当两个类具有继承关系,并且是以公有继承的方式来继承的话,那么基类中的public成员将会被继承到派生类中的public下面;基类中的protected成员也会被继承到派生类 阅读全文

白话C++系列(17) -- 继承

2016-05-09 20:26 by Keiven_LY, 792 阅读, 收藏, 编辑
摘要: C++远征之继承篇 为什么要有继承? 我们先从下面这个例子开始讲起。 我们在这里定义了一个人的类(Person),其中有数据成员:姓名和年龄,还有一个成员函数吃饭(eat)。我们还定义了一个工人的类(Worker),我们知道工人是人类的一种,所以其肯定也有自己的姓名和年龄,肯定也要吃饭。当然,对于工 阅读全文

白话C++系列(16) -- 常指针和常引用

2016-05-03 22:34 by Keiven_LY, 2807 阅读, 收藏, 编辑
摘要: 常指针与常引用 对象的引用和对象的指针 为了说明对象指针与对象引用的相关知识,我们来看一下下面的例子 在这个类中,我们定义了两个数据成员(一个横坐标一个纵坐标),另外,还定义了一个构造函数,还有三个成员函数,其中printInfo()函数是一个常成员函数。那么在实现的时候,也需要在printInfo 阅读全文