
c++
coolnut12138
加油
展开
-
c++基础知识
简介 本文将介绍c++相关基础知识,包括关键字、命名空间、c++输入输出、缺省参数、函数重载、引用、内联函数、auto关键字、基于范围的 for 循环、指针空值—nullptr等知识点。正文 首先我们要知道 c++ 和 c 语言的区别,两者都是高级语言。而 c语言是面向过程,是基于函数编程的;c++是基于面向对象的,它是对 c语言中的一些不合理的地方进行了改进。 那么现在开始了解一...原创 2019-03-15 19:28:25 · 561 阅读 · 0 评论 -
堆排序(排升序为啥建大堆,排降序为啥建小堆)
简介: 之前对堆排序认识的不是很透彻,今天回过头来再把堆排序的知识整理整理!以及排升序为什么要建大堆,排降序要建小堆。正文: 首先我们要知道: ①堆的逻辑是一颗完全二叉树; ②它使用的是顺序存储(也就是数组); ③它的作用:一般都是用于找最值。排序也就是对数组的元素按照大小规则进行摆放。堆排序的过程:1、建堆2、对建好的堆进行向下调整。可能有人会疑问?堆已经建立好了...原创 2019-06-13 11:25:19 · 18323 阅读 · 12 评论 -
重载、重写、隐藏是什么?
重载:构成重载的条件:1、在同一作用域下; 2、函数的函数名相同、参数个数不同 或 参数类型不同 或 参数顺序不同。 函数重载是在编译期间对函数的参数类型进行推演,根据合适的类型去调用不同的函数,所以函数重载也叫静态多态(或者静态绑定)。重写(覆写):构成重写的条件:1、两个函数分别在基类和派生类的作用域; 2、函数名相同、参数相同、返回值相同(协变除外);...原创 2019-06-19 11:28:41 · 633 阅读 · 0 评论 -
生产者消费者模型
1、什么是生产者消费者模型? 答:生产者与消费者其实在我们生活中很常见,比如工厂生产商品,我们购买商品,那么这里工厂就是生产者,我们就是消费者。还有一个仓库,当生产者生产出货物,将货物放入仓库,我们消费时货物从仓库发出。这三者共同组成生产者和消费者模型。2、生产者和消费者模型的特点? 答:一个场所,两个角色,三种关系,这句话就可以描述出生产者与消费者模型,那么我们来解读一下: 一个...原创 2019-06-03 17:45:35 · 371 阅读 · 0 评论 -
写时拷贝技术(COW)
文章目录写时拷贝技术写时拷贝技术原理举个例子写时拷贝技术 写时拷贝技术实际上是一种拖延战术,是为了提高效率而产生的技术,这怎么提高效率呢?实际上就是在需要开辟空间时,假装开了空间,实际上用的还是原来的空间,减少开辟空间的时间,等到真正要使用新空间的时候才去真正开辟空间。 举一个例子理解写时拷贝技术:我们小时候经常会遇到这种情况:家里面有哥哥姐姐的,大人们经常会让我们穿哥哥姐姐穿剩的衣服,...原创 2019-06-19 17:08:59 · 3306 阅读 · 0 评论 -
C/C++中的static关键字
static的用法主要分为两大类,一种是在c语言中的用法,还有就是c++在类中的用法。文章目录1. 在C语言中1.1 修饰全局变量1.2 修饰局部变量1.3 修饰函数2. 在C++中2.1 修饰类中成员变量2.2 修饰类中成员函数两个问题:1. 在C语言中1.1 修饰全局变量定义静态全局变量就是在全局变量前加上 static 关键字#include <iostream>st...原创 2019-06-16 00:36:29 · 369 阅读 · 1 评论 -
STL之list的模拟实现
实现的功能:迭代器、反向迭代器、以及list的各种接口list.hnamespace myList{ ////List的结点类 template<class T> class ListNode { public: ListNode(const T& val = T()) :_data(val) , _next(nullptr) , _pre...原创 2019-06-11 09:33:09 · 350 阅读 · 0 评论 -
STL之vector模拟实现
vector的模拟实现:注意在 Insert 和 Erase 的时候,迭代器会失效,Insert:有可能会引发扩容,但是迭代器还指向原来的空间Erase:删除当前位置,当前位置已经没有了,指向当前位置的迭代器也会失效所以这两种情况都要考虑更新迭代器的指向。#define _CRT_SECURE_NO_WARNINGS 1#include <iostream>#includ...原创 2019-06-11 09:32:46 · 303 阅读 · 0 评论 -
STL之string模拟实现
啥都不说了,都在注释里#include <iostream>#include <assert.h>using namespace std;class String{public: typedef char* iterator; typedef const char* const_iterator; String(char* str = "") { ...原创 2019-06-11 09:33:00 · 370 阅读 · 0 评论 -
C++之继承
继承是什么?在原有的类的基础上建立的新的类,称为继承。就像家产的继承一样,被继承的类称为基类(父类),新生成的类称为派生类(子类)。原创 2019-06-21 14:10:52 · 317 阅读 · 0 评论 -
菱形继承和菱形虚拟继承(原理:虚基表)
在继承体系中有单继承、多继承、和菱形继承,(菱形继承其实是多继承的一种特殊情况)。单继承:一个子类只有一个直接父类时称这个继承关系为单继承多继承:一个子类有两个及以上个直接父类称这个继承关系为多继承菱形继承:多继承的一种特殊情况。一个子类有多个直接父类并且这些直接父类的父类是同一个父类菱形继承带来的问题:拿上面菱形继承的图中的例子来看:因为有子类 Assistant 是继承自多个父...原创 2019-07-10 21:48:51 · 825 阅读 · 0 评论 -
C++之多态
文章目录一、多态的概念二、多态的定义和实现三、多态的原理四、静态多态和动态多态1、静态多态2、动态多态一、多态的概念 多态用一句话说就是执行一个事物会发生不同的情况。 在代码中就是不同继承关系的类对象对一个函数进行操作,会有不同的结果产生。 举个生活中的例子:比如相亲这件事,① 长得好看并且有钱的人相亲可能百战百胜;② 长得不好看并且又没钱的人可能就会遭到别人的冷眼且相亲失败(职...原创 2019-07-16 12:58:18 · 516 阅读 · 0 评论 -
C++模板初了解
模板是编写与类型无关的通用代码,是泛型编程的基础1. 泛型编程2. 函数模板3. 类模板1、泛型编程泛型编程顾名思义:可以通泛的使用,比如我们要使用一个Add加法函数,void Add(int& a, int& b){ return a + b;}void Add(double& a, double& b){ return a + b;}...原创 2019-05-04 23:44:43 · 244 阅读 · 0 评论 -
C/C++动态内存管理
首先我们看看 c 语言是如何进行动态内存分配的;c 语言主要是使用malloc / calloc / realloc 来进行内存申请的。malloc / realloc / calloc三者的共同点与不同点:共同点1、都是从堆上进行动态内存分配2、释放内存都是需要使用free函数来释放3、三者的返回值都是void*4、都需要强制类型转换5、都需要对申...原创 2019-04-28 00:44:15 · 2977 阅读 · 7 评论 -
浅谈C/C++中extern关键字
简介 extern 是一个关键字,可以放置于变量或函数前,以表示变量或函数的定义在别的文件中。提示编译器遇到此变量或函数时,在其他模块中寻找其定义。extern 也可以来进行链接指定。 简言之,extern 有以下特点:当变量或函数具有外部链接时使用 extern 声明符。extern 是声明并非定义,可以用于声明变量、函数。extern “C” 用于 C++ 中,用于将 C++...原创 2019-03-20 11:14:39 · 453 阅读 · 0 评论 -
c++类和对象知识点总结
c++类和对象相关知识点总结,各取所需。原创 2019-04-06 16:54:07 · 466 阅读 · 0 评论 -
c++单例模式
一、设计模式 设计模式是前人大佬们经过分类的、代码设计经验的总结,是能被人们反复使用,多数人知晓的套路。就像古时候人们打仗打多了发现打仗起始也是有套路的,前人经过总结写出孙子兵法这种书一样。 设计模式总的算下来共有23中,单例模式就是其中一种,也是最为常用的一种。接下来详细介绍下单例模式。二、单例模式 当我们想要让一个类只能有一个对象被实例化,这就是单例模式的应用场景了。 单例模...原创 2019-04-06 22:09:54 · 252 阅读 · 0 评论 -
结构体内存对齐良心讲解
本文将介绍以下内容:一、什么是内存对齐?二、结构体大小如何计算?三、为什么存在内存对齐?四、如何修改默认对齐数?五、笔试题练习正文一、什么是内存对齐? 首先,内存对齐是属于编译器的“管辖”范围,编译器为程序中的每个数据单元安排在适当的位置上。但是在 c 语言中我们是被允许干预内存对齐的,也就是说我们可以一定程度上的控制如何内存对齐。内存对齐是为了硬件计算起来效率更高而设计的...原创 2019-04-10 23:57:32 · 487 阅读 · 1 评论 -
c++万年历
#define _CRT_SECURE_NO_WARNINGS 1#include <iostream>using namespace std;class Date { friend ostream& operator<<(ostream& _cout, const Date& d);public: //构造 Date(int...原创 2019-04-11 23:16:38 · 614 阅读 · 0 评论 -
设计一个只能在堆上创建对象的类
如何定义一个只能在堆上创建对象的类? 首先我们要知道堆上和栈上存放的内容是什么?栈上面放的是形参和局部变量,对于堆,动态内存分配一般都是堆上的空间,比如malloc/calloc/realloc/free new/delete都是在分配堆上的空间。 那么我们现在只能在堆上创建对象,也就意味着不能在栈上创建对象,也就是说不能出现局部变量,那么应该怎么做呢? 1、那就是不能在类外使用构造...原创 2019-04-09 08:11:33 · 335 阅读 · 0 评论 -
设计一个只能在栈上创建对象的类
观看本篇文章前可以先看看这篇文章,可以帮助理解本文的内容。//todo 超链接 在栈上创建对象也就是说不能使用 new 来创建对象,在类外是用 StackOnly p = new StackOnly; 这种方法来在堆上创建对象的,那么我们可以将构造函数设为私有成员,此处可以不用将拷贝构造也设为私有成员,因为我们使用拷贝构造出来的对象只会出现在栈上。 同样的我们要提供一个静态的公有的成员函...原创 2019-04-09 08:12:46 · 276 阅读 · 0 评论 -
c++引用
引用:引用不是新定义一个变量,而是给已存在的变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。定义引用变量的格式:类型& 名字 = 实体;int a = 10;int& ra = a;ra = 20; //ra 是 a 的引用,将 ra 的值改变,a 的值也会随之改变 要注意的是:1、引用变量的类型必须与其实体的类型一致,否则会...原创 2019-04-08 21:14:48 · 202 阅读 · 0 评论 -
c++引用和指针
引用相关知识参见此文章:c++引用那么引用和指针到底有什么区别呢?答:看下面这段代码!!int main(){ int a = 10; int *pa = &a; *pa = 20; int& ra = a; ra = 20; return 0;}汇编代码及执行过程如下:因此,两者在底层处理方式:一模一样...原创 2019-04-08 21:21:29 · 217 阅读 · 0 评论 -
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
本题利用了类的属性,在类内实现一个内部类,让这个内部类的构造函数只做累加,那么我们通过调用内部类的构造函数即可完成累加注意:使用静态变量才能完成累加。 class Solution {public: class Sum //实现一个内部类 { public: //内部类的构造函数一定设为public,因为class中默认是private的 ...原创 2019-04-18 09:49:38 · 1010 阅读 · 0 评论 -
C/C++内存布局
下图是c/c++的进程的内存分布布局图,搞清楚内存布局对于理解一个程序是非常重要的。 一个程序运行起来,操作系统会给每个进程分配一个 4G 的程序地址空间,当然这都是虚拟地址空间,因为如果一个进程分 4G 的内存,那么就算有再多的内存也不够分。 这些虚拟地址空间中的内存分段都是什么意思呢?下面进行讲解:一、首先进程地址空间的 1G 内核空间是给操作系统使用的,我们用户是没有操作...原创 2019-04-27 22:34:01 · 4504 阅读 · 1 评论 -
C++之智能指针
遇到的问题: 在编写C++程序时,我们最常遇到的问题也就是内存方面的问题了。申请内存后未释放,打开文件后未关闭,这些都属于内存泄漏的问题。 举个栗子:如果我们在申请内存之后,程序抛了一个异常,并且我们的catch代码段也没有去做对应的处理,那么这个时候就会发生内存泄漏。如下程序:int Division(int a, int b){ if (b == 0) { throw "D...原创 2019-07-25 22:42:55 · 215 阅读 · 0 评论