C++进阶之战
文章平均质量分 95
本专栏参考了“C++17从入门到精通”这本书籍,这本书籍有他的好处,好处就是内容丰富适合进阶人士,覆盖了“游戏编程,算法实现,等C++衍生的基础知识”,缺点也很明显就是难度层次没有逻辑,如果你没有入门学期这本书来是有些困难的。
肥肥胖胖是太阳
我的人生格言:不积跬步无以至千里。
展开
-
C++常用异常处理以及原理解析
C++常用异常处理以及原理解析C++中异常机制的实现机制详解函数的调用和返回要理解C++异常机制实现之前,首先要了解一个函数的调用和返回机制,这里面就要涉及到ESP和EBP寄存器。我们先看一下函数调用和返回的流程:下面是按调用约定__stdcall调用函数test(intp1,intp2)的汇编代码假设执行函数前堆栈指针ESP为NNpushp2;参数2入栈,ESP-=4h,ESP=NN-4hpushp1;参数1入栈,ESP-=4h...原创 2021-01-12 20:17:23 · 1758 阅读 · 2 评论 -
类中成员的分布:成员变量指针和成员函数指针(静态/非静态)超详解
类中成员的分布:成员变量指针和成员函数指针成员变量指针① 成员变量指针是什么?成员变量指针顾名思义就是“指向类类型中公有成员变量的指针”;② 成员变量指针的注意事项:⑴ 成员变量指针不可以使用cout进行输出,只能使用printf这个万能打印函数来进行输出,主要原因是cout这个输出流对象的重载版本不支持输出“绑定了类类型的成员变量指针”;代码示例:#include<iostream>usingnamespacestd;classA...原创 2021-02-01 13:18:43 · 1352 阅读 · 0 评论 -
C++中面向对象和面向过程中constexpr的使用
C++中的constexpr之美面向过程中的constexpr① constexpr作用于编译期常量⑴ constexpr的作用:我们常常会遇到这种困惑:我们有时需要使用变量的值去作为数组初始化的维度信息,但是在C++编译器中数组的维度设计内存分配因此数组分配内存的操作必须在编译期间就完成,同样变量的内存分配也是编译期间完成但是在此时变量分配的内存空间并没有被赋值,只有在运行期间我们才可以确定变量的值,此时给数组分配内存的时间已过,因此当我们使用变量作为数组定义时的维度时编译器会报错。像原创 2021-01-31 18:59:18 · 593 阅读 · 0 评论 -
模板参数传递的区别(针对于函数模板的自动类型推导)
模板参数传递的区别(针对于函数模板的自动类型推导)按值传递按值传递的后果是:导致函数模板的自动类型推导退化(decay),何为退化,下面就让我仔细的说一下:① 按值传递会导致传入参数失去const和volatile属性:#include<iostream>usingnamespacestd;template<typenameT>voidShowInf(Tobj){cout<<typeid(T...原创 2020-12-29 23:07:33 · 693 阅读 · 0 评论 -
虚函数表底层剖析
虚函数表底层剖析类的组成结构虚函数表的结构代码展示#include<iostream>usingnamespacestd;classBase{public:virtualvoidShowInf(){cout<<"Base"<<endl;}virtualvoidShowName(){...原创 2020-12-25 00:13:28 · 160 阅读 · 0 评论 -
如何给友元类设置访问权限?
如何给友元类设置访问权限?友元类无限制地访问所在类的所有元素#include<iostream>#include<string>#include<algorithm>usingnamespacestd;classStudent;classPerson{friendclassStudent;//显然友元类可以访问Person类中的所有成员(public,private...原创 2020-12-22 23:59:54 · 790 阅读 · 0 评论 -
简单剖析C++右值引用和左值引用
简单剖析C++右值引用和左值引用左值与右值的区别左值可以有固定的名字,可以在声明所在的作用域内被任意调用;右值没有固定的名称,匿名变量就是很好的例子,并且由于右值在作用域内没有固定的地址,因此不可以被访问。右值和左值应用实例#include<iostream>usingnamespacestd;#include<algorithm>voidShowInf(int&&var){cout<<...原创 2020-12-20 22:56:49 · 727 阅读 · 0 评论 -
C++之Lambda表达式详细解释
Lambda表达式Lambda表达式格式C++ 11 中的 Lambda 表达式用于定义并创建匿名的函数对象,以简化编程工作。Lambda 的语法形式如下:[函数对象参数](操作符重载函数参数)mutable或exception声明->返回值类型{函数体}代码格式:#include<iostream>usingnamespacestd;#include<algorithm>#include&...原创 2020-12-18 21:04:34 · 1405 阅读 · 2 评论 -
String容器的用法大全
String容器的用法大全String容器的简介本质:string是C++风格的字符串,而string本质上是一个类;string和char * 区别:① char * 是一个指针;② string是一个类,类内部封装了char*,管理这个字符串,是一个char*型的容器。String容器的初始化#include<iostream>usingnamespacestd;#include<string>intmain()...原创 2020-12-01 21:20:16 · 1098 阅读 · 0 评论 -
C++中模板类型(下)
C++中模板类型(下)类模板的继承类模板成员函数类内实现在类模板的继承中,我们必须像如下程序一样,在子类中给予父类模板数据类型,使得当定义子类对象时,从父类继承过来的拿一部分可以给予确定的内存空间。#include<iostream>#include<string>usingnamespacestd;template<classT1>classPerson{public:T1age;...原创 2020-11-14 21:59:14 · 1066 阅读 · 0 评论 -
C++中模板的应用(上)
C++中模板的应用(上)模板简介① C++另一种编程思想称为 泛型编程 ,主要利用的技术就是模板;② C++提供两种模板机制:函数模板和类模板。函数模板函数模板的意义:建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表。函数模板-自动数据类型推导#include<iostream>usingnamespacestd;template<typenameT1,typenameT2>voidC...原创 2020-11-14 16:38:43 · 190 阅读 · 0 评论 -
基于C++实现的职工信息管理系统
调用命令的cpp文件Main.cpp#include<iostream>#include"Operation.h"usingnamespacestd;intmain(){OperationAction;while(true){Action.ShowMenu();intStep=0;cout<&...原创 2020-11-13 17:23:01 · 2280 阅读 · 0 评论 -
文件的输入输出流详解
文件的输入输出流详解文本文件的写操作C++中文件打开方式 C++中的文件的打开方式 解释 Ios::in 以只读方式打开文件 Ios::out 以写文件的方式打开文件 Ios::ate(at the end的简写) 文件的初始操作位置:文件尾部 Ios::app(append的简写,相当于ios::in+ios::ate)原创 2020-11-01 09:03:52 · 1671 阅读 · 0 评论 -
包含自定义数据类型的union联合体的使用规范
包含自定义数据类型的union联合体的使用当我们运行如下代码:#include<iostream>usingnamespacestd;classPerson{private:intage;floatheight;public:Person(intage,floatheight){this->age=age;this->...原创 2020-10-30 15:29:50 · 516 阅读 · 0 评论 -
C/C++语言中union联合体存在的意义以及应用实例
C语言中union联合体存在的意义共用体是什么?如上图所示,共用体正如“共有”关键字所描述的一样,共用体所占的数据空间是共用体中最大的数据类型成员所占用的空间,这些成员并不是随意放置,而是用有相同的首地址。因此,我们在任意时刻只可以按照一个数据类型对共用体进行赋值,共用体中这些成员的关系是“或”,即“不是你死就是我活”。其实我们可以这样说“共用体其实可以在任意时刻被当作其任意一个数据成员来赋值使用”。共用体的出现基本上实现了我们追求的“万能数据类型”。共用体与结构体的区别..原创 2020-10-29 16:41:18 · 2167 阅读 · 0 评论 -
浅谈“C语言链表的使用及其注意事项”
C语言中链表的使用什么是链表?在C语言中,我们无法使用向C++中的STL标准库中的vector等动态数组,但是我们可以用maclloc不断地申请在空间上不连续的内存段供我们使用,我们想“如果将这些零零散散的内存段通过一定方式连接起来,是不是可以当作连续的存储空间使用呢?”,此时“链表”的概念就问世了,我们所用的数组在内存空间上是连续的:这种内存空间的申请方式非常有利于我们顺序访问,可问题来了“哪有那么多连续的存储空间供我们使用呢?”,因此,我们的链表采用如下方式来将零零散散的内存段整合.原创 2020-10-29 10:33:15 · 744 阅读 · 0 评论 -
友元成员函数使用时的注意事项
友元成员函数的注意事项友元的概念“友元”的概念其实是针对于类的私有成员来说的,一个类的由于封装的缘故,类体中私有成员是不可以被外界访问的,无论是继承也好,都是无法访问类内私有成员的。但是正是有那么一些人,愿意打破陈规破例访问类体内的私有成员,此时“友元”的概念闪亮登场。其实我们的普通函数是可以访问类体中的public,但是自从来了“友元”,protected和private类型的变量都被尽收眼底,无处可藏。友元成员函数中的注意事项友元成员函数声明和定义的顺序必须满足一定要求,否则VS2017原创 2020-10-27 08:33:29 · 809 阅读 · 1 评论 -
C++类的链式编程思想
链式编程思想一般的程序#include<iostream>#include<string>usingnamespacestd;classPerson{private:stringname;intage;public:voidShowInf(){cout<<this->name<<"的年龄为"<...原创 2020-10-26 17:38:08 · 2289 阅读 · 1 评论 -
“内存对齐(只针对于自定义数据类型,基本数据类型无内存对齐概念)”详解
内存对齐(只针对于自定义数据类型,基本数据类型无内存对齐概念)为什么要内存对齐?① 平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。② 性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。C语言和C++语言中空结构体所占的空间在C++中规定了空结构体和空类的内存所占大小为1字节,因为c++中规定,任何原创 2020-10-26 17:01:51 · 250 阅读 · 0 评论 -
函数重载的注意事项(必看)
函数重载的注意事项问题一#include"iostream"usingnamespacestd;voidfunc(constint&a){cout<<"调用func(constint&a)函数"<<endl;}voidfunc(int&a){cout<<"调用func(int&a)函数"<<endl;...原创 2020-10-24 16:19:08 · 545 阅读 · 0 评论 -
Const注意事项(在函数传参时的注意事项)
Const注意事项当传入参数是const类型,而函数形参不是const类型,此时行不通:#include<iostream>usingnamespacestd;voidfun(int&a){cout<<a<<endl;}intmain(){constinta=10;fun(a);}注:以上代码行不通。当传入参数...原创 2020-10-24 15:52:56 · 582 阅读 · 0 评论 -
C语言与C++语言中Const的特性剖析
Const的本质对于C++中的变量来说#include<iostream>usingnamespacestd;intmain(){constintvar2=10;int*p=(int*)&var2;*p=20;cout<<var2<<endl;//不可以通过*p来修改a的值}我们看到了,C++中的const限制了来...原创 2020-10-24 15:29:12 · 107 阅读 · 0 评论 -
C++中变量存储区域的解析
C++中变量的四区内存的四个区域• 代码区:存放函数体的二进制代码,由操作系统进行管理的• 全局区:存放全局变量和静态变量以及常量• 栈区:由编译器自动分配释放, 存放函数的参数值,局部变量等• 堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收内存分区的意义不同区域存放的数据,赋予不同的生命周期, 给我们更大的灵活编程。变量的类型 按变量存储地址划分 全局区 变量 静态局部变量原创 2020-10-22 11:05:59 · 162 阅读 · 0 评论 -
Static在C++/C中的应用
Static在C++/C中的应用Static类型的变量Static类型变量的属性 变量类型 变量地址 变量寿命 作用域 static类型的局部变量 全局区 全部程序运行结束 局部 static类型的全局变量 全局区 全部程序运行结束 全局(项目文件中变量声原创 2020-10-22 10:09:53 · 115 阅读 · 0 评论 -
Rand随机数函数的使用
Rand随机数函数的使用Rand()函数简介 Rand函数返回值 0~C++中所能表示的无穷大 Rand函数返回值类型 Unsigned int型无符号整型变量 Rand函数的参数 无 Rand()函数如何产生指定范围内的随机数?#include<iostream>usingnamespacestd;intmain(){...原创 2020-10-20 18:00:03 · 435 阅读 · 0 评论 -
用最简单的方法实现“通信录管理系统”
#include <iostream>#include <string>using namespace std;const int MAX = 1000;struct SinglePerson { string name; string PhoneNumber; string sex; int age;};struct PhoneBook { SinglePerson Member[MAX]; int Sequence;};// 1. 显示菜单.原创 2020-10-20 17:32:54 · 174 阅读 · 0 评论 -
函数指针的详细介绍与举例说明
函数指针函数指针的声明形式数据类型(*函数名)(形参列表)函数指针的作用我们知道函数与函数形参是两个不太一样的概念: 函数体 动作 函数形参 数据 在内存中,不管是动作还是数据都使用16进制的数据存储在内存当中,用地址来访问。其实将函数作为一个地址来进行访问就相当于“将动作数据化”。这样的话,我们就做到了“一切皆可使用地址来访问”。这样做给我们带来的优势如下:内存中的数据均有其对应的地...原创 2020-10-06 15:40:29 · 232 阅读 · 0 评论 -
递归思想的应用
递归思想的应用递归思想简介递归思想适用于求解“一个问题可以一步一步进行分解,并且分解成的子问题与问题有相同的解题方法”,但是递归思想并不是无限制的迭代下去,而是需要我们指定一个“基问题”,基问题顾名思义就是说“我们需要将问题分解到什么程度”。斐波那契数列斐波那契数列的原理斐波那契数列的代码实现#include<iostream>usingnamespacestd;intfibonacci(intn){if(n...原创 2020-09-21 18:08:10 · 516 阅读 · 0 评论 -
数组作为函数形参的实质&C++风格的可变形参函数格式
数组作为函数形参参数为数组的函数体的错误实现#include<iostream>usingnamespacestd;voidShowInf(intarr[2],intn){for(intvar:arr){cout<<var<<endl;}}intmain(){intarr[]={1,2,3,4}...原创 2020-09-20 22:06:46 · 237 阅读 · 0 评论 -
危险操作:C++中返回引用的函数
C++中返回引用的函数#include<iostream>usingnamespacestd;int&fun(){intx=10;returnx;}intmain(){fun()=30;cout<<fun();return0;}这个程序很危险,为什么呢?因为fun函数返回的是x的引用,这没有错,我们...原创 2020-09-19 19:05:45 · 153 阅读 · 0 评论 -
If/switch的新用法&如何用new申请多维数组的内存?&Const变量的操作的实质以及注意事项
If/switch的新用法代码示例#include<iostream>#include<string>usingnamespacestd;intmain(){conststrings="helloworld!";if(size_tit=s.find("hello");it!=s.npos){cout<<it<<en...原创 2020-09-12 21:15:54 · 173 阅读 · 0 评论 -
C++复合类型的使用:void*指针,bool变量与指针,指针数组与数组指针,C风格字符串的处理,多维数组的多种遍历方式
目录Void类型的指针Void指针的重要性质Void*的用法神奇的bool型变量指针的隐式转换指针的显式转换如何创建指针的引用?指针的引用与引用的指针代码示例数组指针与指针数组的区别区别说明代码示例C风格字符数组的操作C风格字符串处理函数简介代码示例轻松访问数组的开头与结尾易错点解析代码示例For函数的新用法For函数中参数的不同类型代码示例多维数组多维数组简介三种多维数组遍历方式重点:指针遍历解析重点:原创 2020-09-11 18:13:12 · 1943 阅读 · 4 评论