![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 57
We_are_family678
这个作者很懒,什么都没留下…
展开
-
临时变量、引用参数和const
如果实参与引用参数不匹配,C++将生成临时变量。当前,仅当参数为const引用时,C++才允许这么做,但以前不是这样。下面来看看何种情况下,C++将生成临时变量,以及为何对const引用的限制是合理的。首先,什么时候将创建临时变量呢?如果引用参数是const,则编译器将在下面两种情况下生成临时变量:1、实参的类型正确,但不是左值;2、实参的类型不正确,但可以转换为正确的类型左值是什么呢?左值参数是...原创 2018-03-15 10:59:23 · 394 阅读 · 0 评论 -
C++类型兼容规则
类型兼容规则则是指在需要基类对象的任何地方都可以使用公有派生类的对象来替代。类型兼容规则中所指的替代包括一下的情况:1、派生类的对象可以隐含转换为基类对象2、派生类的对象可以初始化基类的引用3、派生类的指针可以隐含转换为基类的指针...原创 2018-05-21 08:48:51 · 773 阅读 · 0 评论 -
派生类的构造和析构函数
派生类的构造函数只负责对派生类新增的成员进行初始化,对所有从基类继承下来的成员,其初始化工作还是由基类的构造函数完成。派生类构造函数执行的一般次序如下:(1)调用基类构造函数,调用顺序按照它们被继承时声明的顺序(从左到右)。(2)对派生类新增的成员对象初始化,调用顺序按照它们在类中声明的顺序。(3)执行派生类的构造函数体中的内容。虚基类:1、将共同基类设置为虚基类,这时从不同的路径继承过来的同名数...原创 2018-05-21 10:56:55 · 396 阅读 · 0 评论 -
多态性
面向对程序设计的真正优势不仅仅在于继承,还在于将派生类对象当基类对象一样处理的功能。支持这种功能的机制就是多态和动态绑定。多态是同样的消息被不同类型的对象接收会导致不同的行为。专用多态1、重载多态普通函数及类的成员函数的重载都属于重载多态,加法运算方别使用于浮点数、整型数之间就是重载的实例。2、强制多态将一个变元的类型加以变化,以符合一个函数或者操作的要求,加法运算在进行浮点数与整型数相加时,首先...原创 2018-05-21 14:51:55 · 3151 阅读 · 0 评论 -
迭代器
迭代器是泛化的指针,STL算法利用迭代器对存储在容器中的元素序列进行遍历,迭代器提供了访问容器中每个元素的方法。虽然指针也是一种迭代器,但迭代器却不仅仅是指针。迭代去更为抽象,它可以指向容器中的一个位置,我们不必关心这个位置对应的真正物理地址,只需要沟通过迭代器访问这个位置的元素。STL中迭代器是算法和容器的中间人。STL的每一个容器类模板中,都定义了一组对应的迭代器类。使用迭代器,算法函数可以访...原创 2018-05-21 18:43:34 · 230 阅读 · 0 评论 -
函数对象基本概念及分类和算法
所谓函数对象其实就是一个行为类似函数的对象,它可以不需参数,也可以带有若干参数,其功能是获取一个值,或者改变操作的状态。在C++程序设计中,任何普通的函数和任何重载了调用运算符operator()的类的对象都满足函数对象的特征,因此都可以作为函数对象传递给算法作为参数使用。常用的函数对象函数适配器STL中定义了大量的函数对象,但是有时候需要对函数返回值进行进一步的简单计算,或者填上多余的参数,不能...原创 2018-05-21 22:19:32 · 717 阅读 · 0 评论 -
C/C++字节对齐
仔细讨论 C/C++ 字节对齐问题字节对齐的原因 为了提高 CPU 的存储速度,编译器会对 struct 和 union的存储进行优化,即进行字节对齐。对齐方式 对于 struct 或 union 中的 struct 或者 union 来说,它们的字节对齐标准就是它的所有成员中字节数最大的数据的字节数。一般情况下 C/C++ 的变量所占用的字节数 char: 1字节...原创 2018-05-16 08:43:41 · 263 阅读 · 0 评论 -
C++ explicit关键字详解
首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式).那么显示声明的构造函数和隐式声明的有什么区别呢? 我们来看下面的例子:class CxString // 没有使用explicit关键字的类声明, 即默认...原创 2018-05-16 09:24:33 · 146 阅读 · 0 评论 -
C++智能指针
auto_ptr1、保证一个对象在某个时间只能被一个该种类型的智能指针所指向,就是通常所说的对象所有权;2、对指向的对象自动释放的作用;3、auto_ptr不能管理数组,因为析构调用的是delete,如果管理数组的话,需要调用delete[];shared_ptr 引用计数的智能指针,用于共享对象的所有权。是C + +标准库中一个聪明的指针,是为多个拥有者管理内存中对象的生命周期而设计的。在你...原创 2018-05-16 09:56:20 · 177 阅读 · 0 评论 -
c++模板特化偏特化
模板为什么要特化,因为编译器认为,对于特定的类型,如果你对某一功能有更好地实现,那么就该听你的。模板分为类模板与函数模板,特化分为全特化与偏特化。全特化就是限定死模板实现的具体类型,偏特化就是模板如果有多个类型,那么就只限定为其中的一部分,其实特化细分为范围上的偏特化与个数上的偏特化。模板的泛化:是指用的时候指定类型。 上面的方框内的内容是指模板的泛化,下面的方框内的内容是指模板的特化。特化的优...原创 2018-06-11 11:14:51 · 317 阅读 · 0 评论 -
C++11常用特性的使用经验总结
C++11已经出来很久了,网上也早有很多优秀的C++11新特性的总结文章,在编写本博客之前,博主在工作和学习中学到的关于C++11方面的知识,也得益于很多其他网友的总结。本博客文章是在学习的基础上,加上博主在日常工作中的使用C++11的一些总结、经验和感悟,整理出来,分享给大家,希望对各位读者有帮助,文章中的总结可能存在很多不完整或有错误的地方,也希望读者指出。大家可以根据如下目录跳到自己需要的章...原创 2018-06-09 22:07:28 · 166 阅读 · 0 评论 -
如何理解“命名空间”?
命名空间是为了解决相同作用域下的命名问题。在C、C++、C#等语言中,都有命名空间的概念,这是为了防止不同人编写类库发生命名冲突而设计的,命名空间可以使变量、函数名称、类名称作用在本空间内,而其他空间可以使用同样的名称。就好比不同的文件夹下可以有相同的文件名一样,但在相同的文件夹下不能有重复的文件名,命名空间就好比这个虚拟的文件夹。C语言的命名空间。C语言也有这一概念,只是命名可将可自定义...原创 2018-07-17 17:30:11 · 461 阅读 · 0 评论 -
c++中string类的详解
通过在网站上的资料搜集,得到了很多关于string类用法的文档,通过对这些资料的整理和加入一些自己的代码,就得出了一份比较完整的关于string类函数有哪些和怎样用的文档了!下面先罗列出string类的函数有哪一些,然后再罗列出函数的原型,最后到代码的实现标准C++中提供的string类得功能也是非常强大的,一般都能满足我们开发项目时使用。现将具体用法的一部分罗列如下,只起一个抛砖引玉的作用吧...原创 2018-09-30 22:31:44 · 271 阅读 · 0 评论 -
C++中重载、覆盖和隐藏的区别
成员函数被重载的特征:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual关键字可有可无。 覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数相同;(4)基类函数必须有virtual关键字。 令人迷惑的隐藏规则 本来仅仅区别重载与覆盖并不算困难,但是C++的隐藏规则使问题复杂...原创 2018-10-02 20:38:16 · 218 阅读 · 0 评论 -
多态的实现原理分析----虚表
实现多态三点:1.必须最少两个类,而且必须是继承2.必须函数是虚函数(同名,同参,同返回类型)3.通过基类的指针或引用来实现一个类里边无论有多少个虚函数,虚表指针__vfptr只会有一个,占四个字节虚表中有两部分内容:1、虚函数的地址;2、虚函数;#include<iostream>using namespace std; class Base{ virt...原创 2018-10-02 20:45:22 · 315 阅读 · 0 评论 -
c++的const和static区别
const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间。static表示的是静态的。类的静态成员函数、静态成员变量是和类相关的,而不是和类的具体对象相关的。即使没有具体对象,也能调用类的静态成员函数和成员变量。一般类的静态函数几乎就是一个全局函数,只不过它的作用域限于包含它的文件中。在C++中,static静态成员变量不能在类的内部...原创 2018-10-04 15:52:12 · 395 阅读 · 0 评论 -
C++继承与派生
继承:以原有类为基础产生新的类,我们就说新类继承了原有类的特征,也可以说是从原有类派生出新类。派生机制优点:代码的重用性和可扩展性。通过继承可以充分利用别人做过的一些类似的研究,和已有的一些分析、解决方案。重用这些代码,便使自己的开发工作可以站在巨人的肩膀上。软件开发完成后,当问题有了新的发展或对问题有了新的认识时,也能高效地改造和扩充已有的软件。继承方式:规定了如何访问从基类继承的成员。系统的默...原创 2018-05-21 08:40:44 · 412 阅读 · 0 评论 -
UML图形标识与泛型程序设计
UML语言是一种典型的面向对象建模语言,而不是一种编程语言,在UML语言中用符号描述概念,概念间的关系描述为连接符号的线。UML类图一个类图是由类和与之相关的各种静态关系共同组成的图形。类图展示的是软件模型的静态结构、类的内部结构以及和其它类的关系。通过类图,完全能够描述本书中介绍的面向对象的相关概念(如类、模板类等),以及它们的相互关系。类图是描述类或对象的图形标识以及描述它们之间的 相互关系的...原创 2018-05-20 22:33:25 · 1812 阅读 · 0 评论 -
C++函数重载的规则
函数的重载的规则:函数名称必须相同。参数列表必须不同(个数不同、类型不同、参数排列顺序不同等)。函数的返回类型可以相同也可以不相同。仅仅返回类型不同不足以成为函数的重载。C++ 是如何做到函数重载的C++代码在编译时会根据参数列表对函数进行重命名,例如void Swap(int a, int b)会被重命名为_Swap_int_int,void Swap(float x, float y)会被重命...原创 2018-03-15 11:11:00 · 1711 阅读 · 0 评论 -
C++ operator new ,operator delete,placement new
一、 operator new的三种形式:operator new有三种形式:throwing (1)void* operator new (std::size_t size) throw (std::bad_alloc);nothrow (2)void* operator new (std::size_t size, const std::nothrow_t& nothrow_valu...原创 2018-03-22 17:56:41 · 265 阅读 · 0 评论 -
C++内存泄露检查的5个方法
一、前言在Linux平台上 有valgrind可以非常方便的帮助我们定位内存泄漏,因为Linux在开发领域的使用场景大多是跑服务器,再加上它的开源属性,相对而言,处理问题容 易形成“统一”的标准。而在Windows平台,服务器和客户端开发人员惯用的调试方法有很大不同。下面结合我的实际经验,整理下常见定位内存泄漏的方 法。注意:我们的分析前提是Release版本,因为在Debug环境下,通过VLD这...原创 2018-03-22 18:40:05 · 14707 阅读 · 2 评论 -
C++标准库里vector的用法
vector容器用法详解vector类称作向量类,它实现了动态数组,用于元素数量变化的对象数组。像数组一样,vector类也用从0开始的下标表示元素的位置;但和数组不同的是,当vector对象创建后,数组的元素个数会随着vector对象元素个数的增大和缩小而自动变化。 vector类常用的函数如下所示: 1.构造函数vector():创建一个空vectorvector(int nSi...原创 2018-03-23 19:11:28 · 1138 阅读 · 0 评论 -
C语言中枚举变量的用法
枚举类型若定义时不赋初值,那么会默认对第一个元素赋0,后面的元素依次+1也可以在定义时给任意的成员赋初值,未赋初值的使用默认值,即比前一元素大1。如:enum test{a=10,b,c=11,d,e}各个枚举变量的值为:a=10,b=11,c=11,d=12,e=13因为a赋了初值10,b没有初值,所以b默认比a大1,即b=11。而c赋了初值11,故c=11。d和e都没有赋初值,故依次加1,d=...原创 2018-03-29 20:47:16 · 9310 阅读 · 2 评论 -
【C++】STL常用容器:string类
13、string类声明string类本不是STL的容器,但是它与STL容器有着很多相似的操作,因此,把string放在这里一起进行介绍。 之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下的需要。我们尽可以把它看成是C++的基本数据类型。 首先,为了在我们...原创 2018-03-30 22:40:00 · 181 阅读 · 0 评论 -
关于sort函数的几种用法
随着练习代码的习题数量的增加,意识到了自己和系统学习c++的人之间还有很大的差距。今天学习的是sort函数,它是STL中可以直接调用的排序类函数,以下是我从另一篇博客中摘取的,自己用起来简单顺手的部分。1.要使用sort函数只需用#include <algorithm> 即可使用,语法描述为:sort(begin,end),表示一个范围,例如:int main(){ int a[10]...原创 2018-04-03 08:14:21 · 638 阅读 · 0 评论 -
vector容器用法详解
vector是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。Vector的数据安排及操作方式与array非常相似,唯一的差别在于array是静态空间,一旦配置了就不能改变;vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。1、vector对象的定义及初始化vector<type> vec1; // v1保存类型为type的对象,默认构造函数,...原创 2018-04-03 16:07:52 · 301 阅读 · 0 评论 -
C语言getline函数
cin.getline(字符数组(或字符指针), 字符个数n, 终止标志字符)1、用getline函数从输入流读字符时,遇到终止标志字符时结束,指针移到该终止标志字符之后,下一个getline函数将从该终止标志的下一个字符开始接着读入。2、 如果在用cin.getline(ch, 20, '/')从输入流读取数据时,遇到回车键("\n"),是否 结束读取?结论是此时"\n"不是结束标志"\n"被作...原创 2018-04-03 17:04:39 · 12975 阅读 · 0 评论 -
C++标准库之substr函数用法
#include<string>#include<iostream>using namespace std;main(){string s("12345asdf");string a=s.substr(0,5); //获得字符串s中 从第0位开始的长度为5的字符串//默认时的长度为从开始位置到尾cout<<a<<endl;...原创 2018-04-03 21:28:54 · 877 阅读 · 0 评论 -
static函数与普通函数有什么区别
static函数与普通函数的区别: 用static修饰的函数,本限定在本源码文件中,不能被本源码文件以外的代码文件调用。而普通的函数,默认是extern的,也就是说,可以被其它代码文件调用该函数。 在函数的返回类型前加上关键字static,函数就被定义成为静态函数。普通 函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。因此定义静态函数有以下...原创 2018-04-03 21:37:59 · 1569 阅读 · 0 评论 -
equal_range用法
equal_range是C++ STL中的一种二分查找的算法,试图在已排序的[first,last)中寻找value,它返回一对迭代器i和j,其中i是在不破坏次序的前提下,value可插入的第一个位置(亦即lower_bound),j则是在不破坏次序的前提下,value可插入的最后一个位置(亦即upper_bound),因此,[i,j)内的每个元素都等同于value,而且[i,j)是[first,...原创 2018-04-05 22:17:44 · 210 阅读 · 0 评论 -
STL之map::find方法的使用小例子
函数原型iterator find (const key_type& k);const_iterator find (const key_type& k) const;An iterator to the element, if an element with specified key is found, or map::end otherwise.If the map o...原创 2018-04-05 22:38:54 · 289 阅读 · 0 评论 -
多态与虚函数
多态性是面向对象程序设计的关键技术之一,若程序设计语言不支持多态,不能称为面向对象的语言,利用多态性技术,可以调用同一个函数名的函数,实现完全不同的功能。C++有两种多态性1.、编译时的多态性,通过函数的重载和运算符的重载来实现的。2、运行时的多态性,是在程序运行前,无法根据函数名和参数来确定该调用那一个函数,必须在程序的执行过程中,根据执行的具体情况来动态地确定。它是通过类继承关系和虚函数来实现...原创 2018-05-04 12:13:04 · 141 阅读 · 0 评论 -
面向对象的基本概念
1、对象面向对象方法中的对象,是系统中用来描述客观事物的一个实体,它是用来构成系统的一个基本单位。对象是一组属性和一组行为构成。属性是用来描述对象静态特征的数据项,行为是用来描述动态特征的操作序列。2、类面向对象方法中的“类”是具有相同属性和服务的一组对象的集合。类与对象的关系犹如模具与铸件的关系,一个属于某类的对象称为该类的一个实例。3、封装封装是面向对象方法的一个重要原则,就是把对象的属性和服...原创 2018-05-20 21:14:02 · 958 阅读 · 0 评论 -
C++基础---string类的构造函数
1. string类的构造函数1.1 default:string();原型: string(); 说明:默认构造函数,构造一个空字符串。 代码示例: #include <iostream>#include <string>using namespace std;int main(){ string s1; cout<&...原创 2018-10-29 21:43:52 · 2710 阅读 · 0 评论