![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++基础
askunix_hjh
这个作者很懒,什么都没留下…
展开
-
C++/java设计模式汇总
一、概述二、创建型1. 单例(Singleton)2. 简单工厂(Simple Factory)3. 工厂方法(Factory Method)4. 抽象工厂(Abstract Factory)5. 生成器(Builder)6. 原型模式(Prototype)三、行为型1. 责任链(Chain Of Responsibility)2. 命令(Command)3. 解...原创 2019-11-09 20:15:39 · 974 阅读 · 0 评论 -
C、CPP文件是怎样运行起来的?
C、CPP文件是怎样运行起来的?这个问题就是编译、运行的问题,在很多面试中都会遇到。(今日头条的研发岗面试题就问到cpp文件是怎样运行起来的?)在此,详细说明C语言的编译运行过程,CPP参考一下也就很容易明白了。C语言是怎么运行的?首先放一张图,说明C语言的运行过程。 C语言要想运行就要经过翻译环境,将 .c/.h 文件翻译成机器可以识别的机器码;这个翻译过程可以分为编译...原创 2018-07-04 09:45:45 · 26222 阅读 · 0 评论 -
【STL】算法使用篇
一、概述STL提供了大约100个实现算法的模版函数,比如算法for_each将为指定序列中的每一个元素调用指定的函数,stable_sort以你所指定的规则对序列进行稳定性排序等等。这样一来,只要我们熟悉了STL之后,许多代码可以被大大的化简,只需要通过调用一两个算法模板,就可以完成所需要的功能并大大地提升效率。“algorithm” 是所有STL头文件中最大的一个(尽管它很好理解),...原创 2018-07-26 17:36:24 · 741 阅读 · 0 评论 -
C++类的六个默认成员函数
类的六个默认成员函数: 1、构造函数概念:(1)构造函数是用于构造新对象,并将初始值赋给对象的数据成员。(2)类型转化,适用于单参的构造函数。用explicit修饰构造函数,抑制由构造函数定义的隐式转换,erplicit关键字类内部的构建声明上,在类的定义体外部的定义上不再重复。特征:(1)构造函数的函数名与类名相同;(2)构造函数无返回值;(3)...原创 2018-07-30 12:41:10 · 1290 阅读 · 0 评论 -
回炉重造——虚函数和纯虚函数
写在前面C++中的虚函数的作用主要是实现了多态的机制。多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用相同的代码来实现可变的算法。C++虚函数 概念用virtual关键字修饰的函数就叫虚函数。虚函数实现机制:C++编译阶段,没办法...原创 2018-08-03 16:13:45 · 1043 阅读 · 0 评论 -
构造函数能不能声明为虚函数,析构函数呢?为什么?
一:构造函数不能声明为虚函数的原因?构造一个对象时,必须知道对象实际类型,而虚函数是在运行期间确定实际类型的。而在构造一个对象时,由于对象还未构造成功,编译器就无法知道对象的实际类型,是该类本身,还是派生类,还是其他。虚函数的执行依赖于虚函数表,而虚函数表是在构造函数中进行初始化的,即初始化虚表指针(vptr),使得正确指向虚函数表。而在构造对象期间,虚函数表(vtable)还没有被初始化...原创 2018-08-04 18:08:51 · 3079 阅读 · 1 评论 -
static作用 & const作用
static作用:面试题:static有什么作用?答:在C语言中,static主要定义全局静态变量,定义局部静态变量,定义静态函数。一、 定义全局静态变量 :在全局变量前面加上关键字static,该全局变量变成了全局静态变量。全局静态变量有以下特点:(1) 在全局数据区内分配内存(2) 如果没有初始化,其默认值为0(3) 该变...原创 2018-08-04 22:46:41 · 1190 阅读 · 0 评论 -
this指针能否为空指针?
首先我们知道,this指针指向的是当前对象。测试代码: 空指针p同时访问了 test() 函数和 change() 函数,在 test() 函数调用过程中没有报错,但是在 change() 函数中报错了。实际上这两个类是这样的:void test(person *const this){}void change(person *const this){ c...原创 2018-08-04 23:55:51 · 2579 阅读 · 0 评论 -
C++内存模型
以下内容,大部分整理自网络C分为四个区:堆,栈,静态全局变量区,常量区。详情阅读:C语言内存模型C++内存分为5个区域(堆栈全常代 ):(1)堆 heap : 由new分配的内存块,其释放编译器不去管,由我们程序自己控制(一个new对应一个delete)。如果程序员没有释放掉,在程序结束时OS会自动回收。涉及的问题:“缓冲区溢出”、“内存泄露”(2)栈 sta...原创 2018-08-05 13:32:41 · 2173 阅读 · 2 评论 -
C++11 智能指针
本文介绍三个智能指针:unique_ptr、shared_ptr、weak_ptr。auto_ptr已经被C++11丢弃了。C++的内存管理中,当我们写一个new语句时,一般立即跟一个delete,但是也很难保证没有运行到delete就返回了。申请的资源没有释放,就会造成内存泄露。智能指针解决了哪些问题:1、忘记调用delete释放内存。2、程序异常的进入catch块忘记释...原创 2018-08-05 22:42:16 · 1133 阅读 · 0 评论 -
STL:vector扩容、销毁、与list和deque的区别
1、vector是怎么扩容的?reserve()是容器预留空间,但并不真正创建元素对象。resize()是改变容器的大小,并且创建对象。两个函数的形式是有区别的,reserve函数之后一个参数,即需要预留的容器的空间;resize函数可以有两个参数,第一个参数是容器新的大小,第二个参数是要加入容器中的新元素,如果这个参数被省略,那么就调用元素对象的默认构造函数。vector<in...原创 2018-10-18 22:04:36 · 1584 阅读 · 0 评论 -
迭代器与指针的区别
迭代器与指针的差别:迭代器:(1)迭代器不是指针,是类模板,表现的像指针。他只是模拟了指针的一些功能,通过重载了指针的一些操作符,->, * ,++, --等封装了指针,是一个“可遍历STL( Standard Template Library)容器内全部或部分元素”的对象, 本质是封装了原生指针,是指针概念的一种提升(lift),提供了比指针更高级的行为,相当于一种智能指针,他可以根据...原创 2018-10-18 22:04:18 · 2097 阅读 · 2 评论 -
四种强制类型转换
四种强制类型转换在实际开发中使用场景比较较多,做以下总结:(一)用法:static_cast <类型说明符> (变量或表达式)它主要有如下几种用法:(1)用于类层次结构中基类和派生类之间指针或引用的转换进行上行转换(把派生类的指针或引用转换成基类表示)是安全的进行下行转换(把基类的指针或引用转换为派生类表示),由于没有动态类型检查,所以是不安全的(2)用于基本数据类型之间的...原创 2018-12-08 17:14:54 · 7040 阅读 · 0 评论 -
分析Perm()函数功能、代码、时间复杂度
Perm()函数功能: Perm函数的功能是将传递过来的数组的后size - N 位进行全排列,将排列的每一组数都输出。代码实现:#include<iostream>#include<String>using namespace std;void Perm(int* array, int size, int N) //全排列{ i...原创 2018-04-01 13:34:37 · 13942 阅读 · 0 评论 -
C/C++关键字 asm、inline、register、virtual、volatile 详解
asm:asm允许你在你的代码中直接插入汇编语言指令, 各种不同的编译器为这一个指令允许不一致形式, 比如: asm { instruction-sequence }or asm( instruction );inline:inline这个关键字请求编译器扩张一个给定的函数。它向这个函数发出一条插入代码的call。函数里面有静态变量,...原创 2018-02-28 11:05:07 · 3237 阅读 · 0 评论 -
详解地址和引用的区别
★ 相同点: 1. 都是地址的概念; 指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。 ★ 区别: 1. 指针是一个实体,而引用仅是个别名; 2. 引用使用时无需解引用(*),指针需要解引用; 3. 引用只能在定义时被初始化一次,之后不可变;指针可变; 引用“从一而终” ^_^ 4. 引用没有 const,指针有 const,con...原创 2018-02-14 14:24:17 · 7738 阅读 · 0 评论 -
类模板——深入浅出
类模板就是Class的模板,和之前写过的函数模板大同小异。函数模板概念以及实现原理学习链接:点击打开链接一、那么什么是类模板?有什么作用呢?类模板也是对数据类型进行参数化处理,奖类模板实例化就是指定具体数据,将得到一个具体的、可定义对象的类。一般写法比较单一,如果要处理多种数据类型就要定义多个类,会带来大量的代码冗余,造成不必要的工作量。普通类如下:class Stack{pu原创 2017-11-29 17:11:15 · 409 阅读 · 0 评论 -
函数模板概念及实现原理
函数模板概念及实现原理C++为我们提供了函数模板机制。所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。 换一种说法:模板是对类型的参数化,对函数类型(包括返回类型和参数类型)进行参数化,就可以使用函数处理某个类型范围的若干种类型的对象,而函数体则不需要改变。 凡是函数体相同的函数都可以用这个模板来代替,原创 2017-11-25 21:30:45 · 1940 阅读 · 1 评论 -
C++多态总结(一)
函数多态其实就是函数重载。函数被重载之后,各个函数的函数名相同,但参数列表和定义不同。在调用函数时,一个函数名可以接受不同的参数列表,执行不同的代码,所以具有多态性。原创 2017-11-20 12:07:40 · 344 阅读 · 0 评论 -
C++ 图解单继承&多继承&菱形继承
一:重点概念1> 继承概念继承是面向对象的重要特征。继承一方面使基类和派生类之间建立逻辑上的层次关系,另一方面使一个派生类获得其基类的属性和行为。2> 继承作用3> 继承权限如果不写继承方式,则默认为私有继承。二:继单继承&多继承&菱形继承1> 一个子类只有一个直接父类时称这个继承关系为单继承。2> 一个子类有两个或以原创 2017-11-15 13:12:31 · 650 阅读 · 0 评论 -
C++函数重载
一:初识1.在C++中程序中不允许相同的函数出现,否则调用时无法区分函数;2.区分函数靠的不仅是函数名,还有函数的参数列表,如果多个函数拥有相同的函数名,但参数列表不同,则称为函数重载。int fun();int fun(int,double);int fun(float);函数的返回值不能用来区别函数。二:示例代码#include#includeusing原创 2017-11-06 14:25:19 · 342 阅读 · 0 评论 -
C++的命名空间 namespace
C++的命名空间:c++中不仅各种库函数和类使用名称空间来界定,用户还可以自定义命名空间。命名空间是一种描述逻辑分组的机制,可以将在逻辑上属于同一集团的标识符放在同一个名称空间中。1.讲代码 -> 认识命名空间:#includeusing namespace::std;namespace One { int M = 200; int inf = 10;}names原创 2017-11-05 18:09:04 · 514 阅读 · 0 评论 -
C++指针和引用总结 & 之间的区别
一:指针指针是一种数据类型,具有指针类型的变量称为指针变量。1.初识: int *pi; //pi是一个int类型的指针float *pl;char *pc;char (*pa)[3]; //pa是一个指向一维数组的指针int (*pf)(); //pf是一个指向函数的指针,该函数的返回值为int类型int **pp...原创 2017-11-05 13:56:15 · 511 阅读 · 0 评论 -
C++~无头单链表基础操作
单链表是一种数据存储结构,是一种链式存储的线性表,用一组任意的存储单元存放线性表的元素,称存储单元为一个节点。 1.单链表结构:typedef int DataType; //int类型重命名typedef struct Node{ DataType data; struct Node* pNext;}Node, *PNode; /原创 2017-10-09 22:41:36 · 758 阅读 · 0 评论 -
this指针详解
对于C++的this指针作者根据自己理解,作以详解: 首先,this指针是一种隐含指针,隐含在每个类的成员函数中,是每个成员函数具有的默认参数,也就是每个成员函数都有一个this指针。this指针指向该函数所属类的对象,因此,成员函数访问类中数据成员的格式可写成: ...原创 2017-10-24 20:42:19 · 2132 阅读 · 0 评论 -
只此一文、道破C++赋值运算符重载玄机(operator)
赋值运算符重载是C++重点难点内容,什么是赋值运算符?什么是赋值运算符重载?两者有什么联系?怎么学习?怎么理解?怎么应用?初学者往往容易一头雾水,作者总结这篇文章就是为了解决C++初学者的疑惑。赋值运算符我的理解:赋值运算符和变量赋值一样,变量之间可以赋值,那么对象也应该具有这样的特性。赋值运算符(=)可以用来将一个对象拷贝给另一个已经存在的对象。 注意:对象之间的赋值是将成员变量依次拷贝,原创 2017-12-06 21:01:16 · 420 阅读 · 0 评论 -
main函数的三个参数(argc、argc、envp)详解
函数原型: int main( int argc, char *argv[], char *envp[] ) The main function marks the beginning and end of program execution. A C or C++ program must have one function named main. If your code原创 2018-01-01 00:54:44 · 7871 阅读 · 0 评论 -
三角形的类型判断和面积计算
在一些图形计算以及运用当中,常常需要对三角形做计算和处理,这些计算和处理也已转化成为针对这个三角形的结构体的处理。程序设计: 要求用户输入三角形的三条边长,判断三角形的类型,并求出三角形的面积。#include<iostream>#include<cstdlib>using namespace std;typedef struct Triangle...原创 2018-02-14 13:20:23 · 860 阅读 · 0 评论 -
C++ ~ Time类实例研究
Time类的定义: 类中的定义包含成员函数Time、setTime、printUniversal、printStandard的函数原型,以及private unsigned int成员hour、minute、second。只能通过Time类的成员函数访问它的private数据成员。下面的例子是我的简单Time类演示代码:time.h文件#ifndef __TIME_H__#原创 2017-11-04 22:43:31 · 1859 阅读 · 0 评论