c++
文章平均质量分 92
奄奄不息
加油
展开
-
类、作用域、实例化、对象模型、this指针
目录1.类的定义2.类的访问限定符及封装2.1封装2.2访问限定符3.类的作用域4.类的实例化5.类对象模型5.1类对象的大小5.2类对象的存储方式5.3结构体内存对齐规则6.this指针6.1this指针的引出6.2this指针的特性C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,...原创 2018-10-28 15:43:08 · 190 阅读 · 0 评论 -
C++简介以及C++入门基本知识
目录1、C++简介2、C++关键字2.1关键字的改变3、命名空间3.1命名空间的定义3.2命名空间的使用4.C++输入&输出5、缺省参数5.1缺省参数的概念5.2缺省参数分类6、函数重载6.1函数重载概念面试题:为什么需要函数重载?6.2名字修饰编译器如何解决命名冲突重载函数的调用匹配编译器解析重载函数调用步骤:重载解...原创 2018-10-23 16:22:24 · 1138 阅读 · 0 评论 -
C++类的六个默认构造函数和const成员
目录1.类的六个默认成员函数2.构造函数3.析构函数4.拷贝构造函数5.赋值运算符重载6.const成员7.取地址重载及const取地址操作符重载1.类的六个默认成员函数空类class Date{};空类中并不是什么都没有,编译器自动生成六个默认成员函数。2.构造函数构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译...原创 2018-10-29 17:24:49 · 933 阅读 · 0 评论 -
C++ explicit关键字、static成员、友元、内部类
目录1.再谈构造函数2.static成员4.友元5.内部类6. 再次理解封装1.再谈构造函数1.1构造函数体赋值在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。虽然调用构造函数后,对象中已经有了一个初始值,但是不能将其称作为类对象成员的初始化,构造函数体中的语句只能将其称作为赋初值,而不呢吧个称作初始化。因为初始化只能初始化一次,而构...原创 2018-10-30 16:54:35 · 196 阅读 · 0 评论 -
c++类型转换
目录C语言中有两种类型转换C++强制类型转换1.static_cast2.reinterpret_cast3.const_cast4.dynamic_castexplicitRTTIC语言中有两种类型转换隐式类型转换(相近类型) 显示类型转换缺陷:(隐式)转换的可视性比较差,所有的转换形式都是以一种相同形式书写,难以跟踪错误的转换C++强制类型转换...原创 2019-04-08 16:07:34 · 239 阅读 · 0 评论 -
关联式容器之map、multimap、set、multiset、unordered_map、unordered_set
树形结构的关联式容器 map,multimap,set,multiset都是树形结构,使用平衡搜索树(红黑树)作为其底层结构,容器中的元素是一个有序的序列。mapmap是关联容器,它按照特定的次序(按照key来比较)存储由键值key和值value组合而成的元素。 在map中,键值key通常用于排序和惟一地标识元素,而值value中存储与此键值key关联的内容。键值 key和...原创 2019-04-21 13:49:02 · 340 阅读 · 0 评论 -
AVL数和红黑树
二叉树二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值 它的左右子树也分别为二叉搜索树template<class T> struct BSTNode { BSTNode(const T& data = T()...原创 2019-04-21 16:09:31 · 286 阅读 · 0 评论 -
vector扩容方式
一:元素添加时扩容,VS1.5倍,Linux2倍二:reserve(int new_size) //只改变capacity(new_size),size不变,空间内不真正创建元素对象resize(int new_size /*, int init_value*/) //改变capacity(比new_size大)和size(new_size),创建对象...原创 2019-06-22 19:46:15 · 1263 阅读 · 0 评论 -
泛型编程思想、模板思想
泛型编程思想 泛型编程与C++ templates和STL不该混为一谈,模板是泛型编程的基础,而STL是泛型编程思想的实现,是以泛型编程为指导而产生的。STL是泛型编程的第一份重要实现品。可以这样理解,STL是泛型编程思想的产物,是以泛型编程为指导而产生的。因此,在介绍STL之前,先了解泛型编程的思想是必要的。 《泛型编程与STL》的前言中指出,泛型编程和模型对象编程...原创 2019-06-28 16:31:36 · 549 阅读 · 0 评论 -
单例模式之懒汉、饿汉以及C++11中的单例模式
文章目录单例模式分为两种懒汉模式一:双检索+自动回收懒汉模式二:静态局部变量,避免自己回收资源饿汉模式一饿汉模式二(boost实现)C++11中借助可变参数模板实现的单例单例模式分为两种懒汉模式:第一次调用时才初始化,有延迟加载的效果,以时间换空间优点:第一次使用实例对象时,创建对象。进程启动无负载。多个单例实例启动顺序自由控制。缺点:复杂饿汉模式:程序开始就初始化,以空间换时...原创 2019-08-09 18:06:42 · 1623 阅读 · 0 评论 -
C++中的异常
目录1、C语言传统的处理错误方式2、C++异常3、异常的使用异常的抛出和捕获在函数调用链中异常栈展开匹配原则异常的重新抛出异常安全异常规范4、自定义异常体系5、C++标准库的异常体系6、异常的优缺点优点:缺点:1、C语言传统的处理错误方式终止程序,如assert 返回错误码,缺陷:需要程序员自己去查找对应的错误。如系统的很多库的接口函...原创 2019-03-12 19:16:33 · 186 阅读 · 0 评论 -
智能指针
目录智能指针的原理:C++98提供了auto_ptr的智能指针c++11提供更靠谱的unique_ptrC++11提供更靠谱的并且支持拷贝的shared_ptrstd::shared_ptr的线程安全问题循环引用C++11和boost中智能指针的关系守卫锁智能指针是一种预防型的内存泄漏的解决方案。智能指针在C++没有垃圾回收器的环境下,可以很好的解决异常安全等带...原创 2019-03-12 22:22:23 · 302 阅读 · 0 评论 -
什么是继承?
关于继承的博客,之前写过一次,但是操作出了问题,没有保存上,此处补上博客。1.继承的概念以前我们接触到的复用都是函数复用,继承是类设计层面的复用,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称为派生类。2.继承关系和访问限定符继承方式有三种:public继承,protected继承,private继承类成员/继承方式 public继承 p...原创 2019-03-09 16:32:58 · 511 阅读 · 0 评论 -
static关键字详解
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。一、面向过程程序设计中的static1、修饰全局变量该变量成为一个静态全局变量; 该变量在全局数据区分配内存; 未经初始化的静态全局变量会被程序自动初始化为0; 该变量在声明它的整个文件都是可见的,而在文件之...原创 2019-02-17 16:16:36 · 154 阅读 · 0 评论 -
什么是多态?
概念多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。条件在继承体系中,构成多态还必须满足两个条件调用函数的对象必须是基类的指针或者引用;多态是:不需要知道对象的实际类型,也能够调用正确的功能。而如果直接操作对象,它的类型就已经被编译器知道了,看似多态,实则不是。 被调用的函数必须是虚函数,且完成了虚函数的重写。子类对象调用这些函数时就会调用子类的函数。虚函数和重...原创 2019-02-16 21:32:37 · 3041 阅读 · 0 评论 -
c++容器之string简介及其模拟实现
s1.push_back('a')//只能插入一个字符s1.append("asdf")//能插入字符串s1+=字符/字符串s2.push_back('c') / s2.append(1,c) / s+='c'三种方式差不多,一般用string+=操作比较多,既可以加蛋哥字符,又可以加字符串。管理动态增长字符串数组的类,与字符串相关的东西都封装在里面typedef ba...原创 2018-12-23 20:15:40 · 241 阅读 · 0 评论 -
STL简介
STL是C++标准模板库的重要组成部分,是一个可服用的组件库,包含数据结构与算法的软件框架。STL六大组件:仿函数,算法,迭代器,空间配置器,容器,配置器STL缺陷:跟新慢,C++11出来13年了,STL才跟新一步 不支持线程安全 STL追求效率,导致内部比较复杂,比如类型萃取,迭代器萃取 代码膨胀,模板语法本身导致的。...原创 2018-12-22 21:14:27 · 194 阅读 · 0 评论 -
C++泛型编程与模板
目录一.泛型编程二.函数模板2.1 函数模板格式2.2 函数模板的原理2.3 函数模板的实例化2.4 模板参数的匹配原则一篇博客关于临时变量、引用参数和const三.类模板3.1 类模板的定义格式3.2 类模板的实例化一.泛型编程使用同一个函数处理不同参数类型时,我们可以使用函数重载来实现这个功能。函数重载给了我们很大的便利,但是函数重载可能也会...原创 2018-11-19 16:21:12 · 436 阅读 · 0 评论 -
临时变量、引用参数和const
目录知识点概要情形一:实参的类型正确,但不是左值。非左值包括字面常量和包含多项式的表达式。情形二:实参类型不正确,但可以转换为正确的类型。知识点概要如果实参与引用参数(形参)不匹配,C++将生成临时变量。当前,仅当参数为const引用时,C++才允许这样做。临时变量使函数在可处理的参数种类方面更通用,这些临时变量只在函数调用期间存在,此后编译器可以随意将其删除。因此,尽可能...转载 2018-11-19 16:26:05 · 430 阅读 · 0 评论 -
头文件中只有声明,没有定义
前言:头文件中只有声明,而没有定义。这是为什么呢?刚看到这个问题我也比较纳闷。因为我学C++之前一直是这样的,直到学习了C++中的内联函数,内联函数的声明和定义分别在不同的源文件中,出现了链接错误。这个时候又接触到了这个问题:头文件中只有声明而没有定义。在本篇博客中,我会分析这方面的内容,同时也会讲到内联函数。目录前言:头文件声明和定义《高质量C/C++编程指南》说明内联...原创 2018-11-15 20:59:30 · 13673 阅读 · 3 评论 -
C++内存管理
C/C++内存分布:每次一提到内存管理,就会想到程序的虚拟地址空间,也就是程序内存区域划分。这里再次回顾一下这个重要的知识点。内核空间所占的内存大小大概在1G左右,我们真正能使用到的内存,只有3G。栈向下增长,是指栈的建立,是一层一层往低地址建立,所以栈是向下增长的。堆向上增长,是指开辟空间的时候,后开辟的地址会比原来开辟的空间的地址高。但是堆可能前面有释放的空间,此时就会使用...原创 2018-11-09 14:50:36 · 190 阅读 · 0 评论 -
迭代器失效
原创 2019-08-29 22:41:54 · 113 阅读 · 0 评论