随笔分类 - C++
摘要:1、纯虚拟函数 强制子类实现接口 C++中包含纯虚函数的类,被称为是“抽象类”。抽象类不能使用new出对象,只有实现了这个纯虚函数的子类才能new出对象。 C++中的纯虚函数更像是“只提供申明,没有实现”,是对子类的约束,是“接口继承”。 C++中的纯虚函数也是一种“运行时多态”。 如下面的类包含纯
阅读全文
摘要:1、修饰变量,即常量,初始化后不能改变 2、修饰指针,表示常指针 3、修饰指针指向的变量,表示变量不能改变 4、修饰引用的变量,表示引用绑定的变量不能改变 5、修饰函数的参数,表示函数的内部此量不能改变 6、修饰成员函数,放在参数列表的后边,表示常函数,不能修改成员变量 7、修饰函数返回值,表示不能
阅读全文
摘要:1. 在类的构造函数和析构函数中没有匹配的调用new和delete函数 两种情况下会出现这种内存泄露:一是在堆里创建了对象占用了内存,但是没有显示地释放对象占用的内存;二是在类的构造函数中动态的分配了内存,但是在析构函数中没有释放内存或者没有正确的释放内存 2. 没有正确地清除嵌套的对象指针 3.
阅读全文
摘要:void的字面意思是空类型,void *的意思是空类型指针,void 不是一个真正的类型,我们在声明变量的时候从来不会像下面这样声明: void a; 如果我们写了一行这样的代码,某些编译器会直接报错,有些则不会,但也没有任何意义。 void真正的用途在下面两个方面: 对函数返回值的限定 对函数参数
阅读全文
摘要:先考虑一种情况,对一个已知对象进行拷贝,编译系统会自动调用一种构造函数——拷贝构造函数,如果用户未定义拷贝构造函数,则会调用默认拷贝构造函数。 先看一个例子,有一个学生类,数据成员时学生的人数和名字: #include <iostream> using namespace std; class St
阅读全文
摘要:首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式). 那么显示声明的构造函数和隐式声明的有什么区别呢? 我们
阅读全文
摘要:一、概述 为了实现C++的多态,C++使用了一种动态绑定的技术。这个技术的核心是虚函数表(下文简称虚表)。本文介绍虚函数表是如何实现动态绑定的。 二、类的虚表 每个包含了虚函数的类都包含一个虚表。 我们知道,当一个类(A)继承另一个类(B)时,类A会继承类B的函数的调用权。所以如果一个基类包含了虚函
阅读全文
摘要:2、三者的不同详细 重载(overload):是函数名相同,参数列表不同,override只是在类的内部存在。 重写(override),也叫覆盖。子类重新定义父类中有相同名称和参数的虚函数(virtual)。在继承关系之间。C++利用虚函数实现多态。 重写的特点: 1 被重写的函数不能是stati
阅读全文
摘要:值传递: 形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入, 不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。 指针传递: 形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进
阅读全文
摘要:Boost库是为C++语言标准库提供扩展的一些C++程序库的总称,由Boost社区组织开发、维护。Boost库可以与C++标准库完美共同工作,并且为其提供扩展功能。 目录 1 基本介绍 2 分类 基本介绍 编辑 Boost库是为C++语言标准库提供扩展的一些C++程序库的总称。 Boost库由Boo
阅读全文
摘要:1.nullptr nullptr 出现的目的是为了替代 NULL。 在某种意义上来说,传统 C++ 会把 NULL、0 视为同一种东西,这取决于编译器如何定义 NULL,有些编译器会将 NULL 定义为 ((void*)0),有些则会直接将其定义为 0。 C++ 不允许直接将 void * 隐式转
阅读全文
摘要:1、概述 以STL运用的角度而言,空间配置器是最不需要介绍的,它总是藏在一切组件的背后,默默工作。整个STL的操作对象都存放在容器之中(vertor、list),而容器一定需要配置空间以放置资料,这就是空间配置器的作用。 虽然STL提供了让我们自定义空间配置器的接口,但是不建议自己定义,因为标准提供
阅读全文
摘要:1、基本概念 适配器, 在STL中扮演着转换器的角色,本质上是一种设计模式,用于将一种接口转换成另一种接口,从而是原本不兼容的接口能够很好地一起运作。适配器不提供迭代器。 2、基本类型 根据目标接口的类型,适配器可分为以下几类: (1) 改变容器的接口,称为容器适配器; (2)改变迭代器的接口,称为
阅读全文
摘要:1. 概念 模仿函数的类,使用方式如同函数。本质是类中重载括弧运算符operator()。 2. 场景 不同函数复用相同处理代码。 3. 使用 3.1 C语言的处理方式 使用函数指针和回调函数来实现代码复用。例如qsort() #include <stdio.h> #include <stdlib.
阅读全文
摘要:STL 提供能在各种容器中通用的算法(大约有70种),如插入、删除、查找、排序等。算法就是函数模板。算法通过迭代器来操纵容器中的元素。许多算法操作的是容器上的一个区间(也可以是整个容器),因此需要两个参数,一个是区间起点元素的迭代器,另一个是区间终点元素的后面一个元素的迭代器。例如,排序和查找算法都
阅读全文
摘要:C++迭代器(STL迭代器)iterator详解 要访问顺序容器和关联容器中的元素,需要通过“迭代器(iterator)”进行。迭代器是一个变量,相当于容器和操纵容器的算法之间的中介。迭代器可以指向容器中的某个元素,通过迭代器就可以读写它指向的元素。从这一点上看,迭代器和指针类似。迭代器按照定义方式
阅读全文
摘要:C++容器(STL容器) 容器(container)用于存放数据的类模板。可变长数组、链表、平衡二叉树等数据结构在 STL 中都被实现为容器。程序员使用容器时,即将容器类模板实例化为容器类时,会指明容器中存放的元素是什么类型的。容器中可以存放基本类型的变量,也可以存放对象。对象或基本类型的变量被插入
阅读全文
摘要:STL是什么(STL简介) 本节主要讲述 STL 历史、STL 组件、STL 基本结构以及 STL 编程概述。STL 历史可以追溯到 1972 年 C 语言在 UNIX 计算机上的首次使用。直到 1994 年,STL 才被正式纳入 C++ 标准中。STL 组件主要包括容器,迭代器、算法和仿函数。ST
阅读全文
摘要:在STL中,Memory Allocator 处于最底层的位置,为一切的 Container 提供存储服务,是一切其他组件的基石。对于一般使用 STL 的用户而言,Allocator 是不可见的,如果需要对 STL 进行扩展,如编写自定义的容器,就需要调用 Allocator 的内存分配函数进行空间
阅读全文
摘要:仿函数(functor) 仿函数(functor),就是使一个类的使用看上去像一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了。 仿函数的概念与作用 在我们写代码时有时会发现有些功能实现的代码,会不断的在不同的成员函数中用到,但是又不好将这些代码独
阅读全文