
C++
星光不负赶路人_
这个作者很懒,什么都没留下…
展开
-
C++中的四种类型转换解析
C++中按照不同作用的转换类型将其细分为四个显示类型转换符号static_cast, const_cast, reinterpret_cast,dynamic_cast。相对于C语言强制转换的优点:这种新类型的强制转换可以提供更好的控制强制转换过程,允许控制各种不同种类的强制转换。能更清晰的表明它们要干什么。1.static_cast(用于基本类型的强制转换)能用于执行类型定义的显式的换...原创 2020-04-14 12:14:53 · 315 阅读 · 0 评论 -
C++中的lambda表达式及底层实现原理
什么是lamber表达式表达式格式[ 捕捉列表 ](参数列表)mutable -> 返回值 { 函数体 };捕捉列表:处于lamber函数开始位置,编译器根据[]来判断接下来的代码是否为lamber表达式...原创 2020-04-08 15:12:20 · 4896 阅读 · 0 评论 -
C++11中的右值引用与移动语义
什么是右值?什么是左值?简单的来说左值就是能放在=左边的,可以被取地址的就是左值;能放在=右边的,不能取地址的就是右值,但这样来定义并不准确:int main(){ int a=10;//a是左值,10是右值 int b=a;//a,b都是右值,可a放在=的左边 //说明:左值可以放在=的左边,也可以放在=的右边 const int c=30; ...原创 2020-04-05 18:51:56 · 253 阅读 · 0 评论 -
C++中的AVL树
AVL树概念二叉搜索树遗留的问题:当数据接近有序或接近有序,二叉搜索树就会退化成单支树,查找元素就相当于在顺序表中搜索元素,效率低。解决方法:当向二叉搜索树中插入新结点的后,若能保证每个结点的左右子树高度差的绝对值不超过1(需要对树中的结点进行调整),即可降低树的高度,从而减少平均搜索的长度,提高效率。一颗具有以下性质的二叉搜索树或一颗AVL树:左右子树高度差(平衡因子)的绝...原创 2020-03-21 15:59:50 · 381 阅读 · 0 评论 -
C++中的二叉搜索树
二叉搜索树的概念二叉搜索树又称二叉排序树,可以是一颗空树,或者是具有一下性质的二叉树:左子树不为空时,则左子树的所有节点都小于根节点。右子树不为空时,则右子树的所有节点都大于根节点。所有左右子树也为二叉搜索树。二叉搜索树的相关操作插入、删除、销毁、中序遍历等。//创建二叉树节点template<class T>struct BSTNode{ BSTNode(co...原创 2020-03-19 16:54:20 · 336 阅读 · 0 评论 -
C++中重载、重定义(隐藏)、重写(覆盖)的区分
重载两个函数必须在同一作用域。函数名必须相同。函数的参数列表必须不同(参数的个数、次序、类型)。与返回值类型无关。int add(int a, int b){ cout << "int_int_int" << endl; return a + b;}double add(double a, double b){ cout << "dou...原创 2020-03-16 11:23:51 · 238 阅读 · 0 评论 -
C++中的虚函数表解析
虚函数表含有虚函数的类实例化出的对象内存会多出四个字节,前四个字节存储一个指针,叫虚表指针,这个指针指向一张表,这张表按顺序存储了重写的虚函数,叫虚(函数)表。基类虚表的构建原则将基类虚函数按照其在类中声明的先后顺序一次存放在虚表中。派生类虚表构建原则只要基类中有虚函数,即使派生类没有重写基类的虚函数,派生类也会有自己的虚表指针,这个指针指向的虚表与基类的虚表内容完全相同,而是...原创 2020-03-15 18:42:56 · 320 阅读 · 0 评论 -
C++中的多态以及多态的调用原理
概念当不同的对象去完成某一个行为会产生不同的状态。多态的前提在继承体系中,基类中必须具有虚函数,派生类必须对基类的虚函数进行重写。必须通过基类的指针或引用调用虚函数。虚函数被virtual修饰的成员函数重写虚函数的重写(覆盖),就是在派生类中有一个跟基类完全一样的虚函数(函数的返回值类型、函数的名字、函数的参数列表完全相同),这样的派生类的虚函数就重写了基类的虚函数。注意...原创 2020-03-14 11:07:12 · 1324 阅读 · 0 评论 -
C++中引用与指针的区别
引用引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。类型& 引用变量名(对象名) = 引用实体;void TestRef() { int a = 10; int& ra = a;//定义引用类型 printf("%p\n", &a); ...原创 2020-03-13 13:23:53 · 164 阅读 · 0 评论 -
C++中的继承
概念及定义1.概念继承可以实现代码复用,可以在保持原有类(基类)特性的基础上进行扩展,增加功能,产生新类(派生类)。继承是类设计上层次的复用。#include<iostream>#include<string>using namespace std;class Person{public: void Print() { cout << ...原创 2020-03-13 13:19:46 · 192 阅读 · 0 评论 -
C++中的this指针
this指针的引出class Date{public: void Display(){ cout<<_year<<"-"<<_month<<"-"<<_day<<endl; } void SetDay(int year,int month,int day){ ...原创 2020-02-23 10:59:10 · 189 阅读 · 0 评论 -
项目—高并发内存池
优点在多核多线程的开发环境下申请内存,必然存在锁竞争问题。所以实现的高并发内存池需考虑以下问题:内存碎片问题性能问题多核多线程环境下的锁竞争问题结构高并发内存池主要又以下三个部分构成:ThreadCacheCentralCachePageCache...原创 2020-02-12 18:44:34 · 371 阅读 · 0 评论 -
C++中string类的模拟实现
标准库中的string类1.string类string是表示字符串的字符串类。该类的接口与容器的常规接口基本相同,再添加一些专门用来操作string的常规操作。string在底层实际是:basic_string类模板的别名,typedef basic_string<char, char_traits, allocator> string;不能操作多字节或变长字符...原创 2019-11-04 13:40:20 · 228 阅读 · 0 评论 -
C++中的Date类
代码实现:原创 2019-10-10 18:08:50 · 498 阅读 · 0 评论 -
C/C++中const限定符用法解析
const限定符常变量:const 数据类型 变量名称=常量值const int a=10;数据类型 const 变量名称=常量值int const a=10;注意:const常量要赋初始值;const int a=10;//okconst int a;//errrorconst常量不可修改值。const int a=10;a=20;//error指针和cons...原创 2019-08-01 18:29:43 · 477 阅读 · 0 评论 -
C++中类的6个默认成员函数(构造函数、析构函数、拷贝构造函数、赋值重载等)
1.类的6个默认成员函数如果一个类中什么成员都没有,简称为空类。任何一个类在我们不写的情 况下,都会自动生成下面6个默认成员函数。2. 构造函数2.1 概念对于以下的日期类:class Date{ public: void SetDate(int year,int month,int day ){ _year=year; _mon...原创 2019-07-31 17:39:06 · 453 阅读 · 0 评论 -
C与C++的区别
1. 命名空间在C/C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称将都存在于全局作 用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。1.1 命名空间定义定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名 空间的成员 ...原创 2019-07-25 18:36:01 · 286 阅读 · 0 评论 -
C++中类与对象
1.类与对象的初步认知C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。2.类的引入C语言中,结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。struct Student{ void SetStudentInfo(const...原创 2019-07-29 14:02:09 · 238 阅读 · 0 评论