
C++
文章平均质量分 59
JeremiahSu
这个作者很懒,什么都没留下…
展开
-
libcurl库基本使用
首先介绍libcurl中被称为easy interface的api函数,所有这些函数都是有相同的前缀:curl_easy 。当前版本的libcurl也提供了multi interface,关于这些接口的详细使用,在下面的章节中会有介绍。在使用multi interface之前,你首先应该理解如何使用easy interface。要使用easy interface,首先必须创建一个easy handl原创 2015-09-11 13:11:55 · 930 阅读 · 0 评论 -
Cpp_函数重载
什么是函数重载?在同一个作用域中,函数名相同,参数表不同的函数,构成重载关系。 重载与函数的返回类型无关,与参数名也无关,而只与参数的个数、类型和顺序有关。重载解析根据调用函数时所提供的实参,按照类型匹配的原则,找到相应的重载版本的过程叫做重载解析。C++中的换名机制C++编译器在编译C++函数时,会根据该函数的参数表对其名称进行替换,因此同一个作用域中参数表不同的同名函数,在编译成二进制目标模块原创 2016-02-25 21:12:20 · 2309 阅读 · 0 评论 -
Cpp_函数缺省参数
1.在声明函数时可以为函数部分或全部参数指定缺省值,调用该函数时如果某些参数没有提供实参,那么该参数将取缺省值。 2.如果函数的某个参数带有缺省值,那么该参数后面的所有参数必须都带有缺省值。原创 2016-02-25 21:13:18 · 681 阅读 · 0 评论 -
Cpp_内联函数
1.编译器用编译好的函数二进制代码块替换对该函数的调用指令的过程称为内联优化。借助内联优化,避免函数调用的开销,所付出的代价就是增大了可执行文件和进程空间代码区的字节数。2.内联主要针对那些被频繁调用的简单函数。编译器会依据其内置的内联优化策略,根据函数的规模和被调用的频率,自动判断是否需要做内联优化。3.若在函数定义前面,加上inline关键字,则可以显式告诉编译器,该函数希望进行内联优化。编译器原创 2016-02-25 21:15:28 · 419 阅读 · 0 评论 -
Cpp_动态内存分配
1.兼容C语言的动态内存分配函数 malloc/calloc/realloc/free 2.C++增加了专门用于动态内存分配的运算符 1)new: 内存分配 2)delete/delete[]: 内存释放 如果用new分配数组,一定要用delete[]释放。 3)new分配内存失败,不会返回空指针(NULL),而是抛出std::bad_alloc异常。如果程序没有捕获该异常,该异常将被系原创 2016-02-25 21:20:01 · 702 阅读 · 0 评论 -
Cpp_引用
1.引用即别名int a = 10;int& b = a; // b引用了a,b是a的别名,b就是a,a就是b/*int b = a;*/引用必须做初始化,而且一经初始化其所引用的目标就不能更换。引用对临时变量(匿名对象的作用)任何出现字面值常量、计算表达式、类型转换、函数返回值的场合,都会有临时变量(匿名变量)产生。只能用带有常属性(const)的引用引用这样的临时变量,而且一旦通过引用引原创 2016-02-25 22:32:46 · 2666 阅读 · 1 评论 -
Cpp_类型转换
C风格的类型转换C++完全兼容。C++新增了四个显式类型转换运算符。 1)静态类型转换:static_cast<目标类型> A.将基类的指针或引用转换为子类的指针或引用; B.自定义类型转换。它允许子类类型的指针转换为父类类型的指针(这是一个有效的隐式转换),同时,也能够执行相反动作:转换父类为它的子类,但会给出编译警告下面的例子中,被转换的父类没有被检查是否与目的类型相一致。class Ba原创 2016-02-25 22:57:48 · 907 阅读 · 0 评论 -
Cpp_析构函数
1.this指针1)每个类的构造函数和成员函数中都包含一个隐藏的该类类型的指针参数,名为this,该指针指向调用这个成员函数或正在被构造的对象。成员函数和构造函数中对该类其它成员的访问,都是通过this指针进行的。this指针可以在成员函数或构造函数内部直接显式地引用。2)显式使用this的场合A.区分作用域B.从类的内部向外部传递该类对象地址C.从类的内部向外返回该类对象自身——返回自引用D原创 2016-02-28 15:48:54 · 1366 阅读 · 0 评论 -
Cpp_this指针与常函数
1.this指针1)每个类的构造函数和成员函数中都包含一个隐藏的该类类型的指针参数,名为this,该指针指向调用这个成员函数或正在被构造的对象。成员函数和构造函数中对该类其它成员的访问,都是通过this指针进行的。this指针可以在成员函数或构造函数内部直接显式地引用。2)显式使用this的场合A.区分作用域B.从类的内部向外部传递该类对象地址C.从类的内部向外返回该类对象自身——返回自引用D原创 2016-02-28 15:50:21 · 1191 阅读 · 0 评论 -
Cpp_构造函数
构造函数1)函数名与类名相同,且没有返回类型。 2)构造函数在对象被创建时自动被调用。 3)构造函数负责确定对象的初始状态以及分配必要的资源。 4)构造函数在每个对象的整个生命周期内,一定会被调用,且仅被调用一次对象的创建过程:A.首先为对象分配足量的内存空间;B.以构造实参调用构造函数,完成如下任务: a)依次调用各个基类的构造函数,初始化所有基类子对象; b)依次调用类类型成原创 2016-02-25 23:36:19 · 4756 阅读 · 0 评论 -
Cpp_拷贝构造与拷贝赋值
1.深拷贝与浅拷贝如果一个类包含指针形式的成员变量,系统提供的缺省拷贝构造函数,只是复制了指针成员变量本身,而没有复制该变量所指向的内容,这种拷贝方式被称为浅拷贝。浅拷贝将导致不同对象间的数据共享,同时会在析构函数中引发”double free”异常。为此就必须自己定义一个支持复制内容即深拷贝的拷贝构造函数。2.类的缺省拷贝赋值类的缺省拷贝赋值同样对于基本类型成员变量按字节复制,因此和缺省拷贝构造函原创 2016-02-29 21:25:33 · 1036 阅读 · 0 评论 -
Cpp_静态成员
1.静态成员变量1)静态成员变量在类中声明时需要使用static关键字进行修饰; 2)静态成员变量不能在构造函数中被定义及初始化,而必须在类的外部单独进行定义和初始化; 3)静态成员变量每个类只有一份拷贝,并为该类的所有对象所共享; 4)可以通过对象访问其类型中的静态成员变量,也可以通过类直接访问; 5)静态成员变量和全局变量一样,存放在进程空间的静态存储区中; 6)静态成员变量的作用基本原创 2016-02-29 21:27:14 · 986 阅读 · 0 评论 -
Cpp_成员指针
1.成员变量指针Student s1; string* p = &s1.name; // 普通指针,而非成员指针 1)定义:类型 类名::*成员指针变量名 = &类名::成员变量; 2)使用:对象.*成员指针变量名 其中”.*”被称为成员指针解引用运算符 对象指针->*成员指针变量名 其中”->*”被称为间接成原创 2016-02-29 21:32:16 · 526 阅读 · 0 评论 -
Cpp_操作符重载
一、双目操作符的重载1.计算类双目操作符 形如L#R的表达式会被编译器处理为形如L.operator#(R)的成员函数的调用,该函数的返回值即为表达式的值。 形如L#R的表达式也可以被编译器处理为形如::operator#(L,R)的全局函数的调用,该函数的返回值即为表达式的值。 2.赋值类双目操作符 表达式的值是一个左值,而且它就是左操作数本身。 左操作数不能是常量,右操作数可以是常量。原创 2016-02-29 21:36:39 · 1301 阅读 · 0 评论 -
Cpp_继承
一、继承的基本概念第一级抽象:从具体的对象抽象出共同的属性和行为。学生:姓名、年龄、学号、吃饭、睡觉、学习教师:姓名、年龄、工资、吃饭、睡觉、授课第二级抽象:将类型之间共性抽取出来形成超集,将类型之间的个性具体化的不同子集中。人类:姓名、年龄、吃饭、睡觉 - 超集体现共性 - 基类 | 派生 ^ 学生是人类的一部分:学号、学习 \ 子集 - 子类 V原创 2016-02-29 21:47:03 · 2399 阅读 · 0 评论 -
Cpp_多态
一、虚函数、覆盖和多态如果将基类中的某个成员函数声明为虚函数,那么其子类中与该函数具有相同原型的成员函数就也是虚函数,并且对基类中的版本形成覆盖。这时,通过指向子类对象的基类指针,或者引用子类对象的基类引用,调用虚函数,实际被执行的将是子类中的覆盖版本,而非基类中的原始版本,这种语法现象被称为多态。二、虚函数覆盖的条件1.只有类的成员函数才能被声明为虚函数,全局函数和类的静态成员函数都不能被声明为虚原创 2016-02-29 21:51:15 · 2678 阅读 · 2 评论 -
Cpp_异常处理
一、为什么需要异常?1.程序不可能不出错2.传统的错误处理机制存在缺陷 1)通过返回值表示错误 缺点:错误处理流程比较复杂,逐层判断,代码臃肿。 优点:函数调用路径中所有的局部对象(栈对象)都能被右花括号正确地析构,不会内存泄漏。 2)通过远程跳转处理错误优点:不需要逐层判断,一步到位处理错误,代码精炼。 缺点:函数调用路径中的局部对象失去被析构机会,形成内存泄漏。3.C++的异常结合两种原创 2016-02-29 21:55:15 · 2392 阅读 · 0 评论 -
《The Annotated STL Sources》list
list概述list实质上是一个双向环状链表,每次插入或者删除一个数据就会配置或者删除一个元素空间,list迭代器提供递增操作指向下一个节点,递减时指向上一个节点,取值时取的是节点的数据值。list的定义//list节点的定义template <class T>struct __list_node { typedef void* void_pointer; void_pointer nex原创 2016-02-24 22:36:55 · 361 阅读 · 0 评论 -
《The Annotated STL Sources》vector
vector概述vector与array非常类似,它们唯一的区别在于空间运用的灵活性:array是静态空间,配置之后不能改变;vector是动态空间,随着元素的加入,它的内部机制会自动扩充空间以容纳新的元素。vector的定义template <class T, class Alloc = alloc>class vector {public: //一些类型定义 typedef T val原创 2016-02-24 16:15:46 · 573 阅读 · 0 评论 -
C++模板
一、模板的起源1.C/C++语言的静态类型系统,在满足效率与安全性要求的同时,很大程度上也成为阻碍程序员编写通用代码的桎梏。它迫使人们不得不为每一种数据类型编写完全或几乎完全相同的实现,虽然它们在抽象层面上是一致的。2.宏定义只是在预处理器的作用下,针对源代码的文本替换,其本身并不具备函数语义。因此借助于参数宏(又名宏函数)可以在某种程度上是程序的编写者摆脱那些源于类型的约束和限制,但同时也因此丧失原创 2015-09-13 21:50:30 · 536 阅读 · 0 评论 -
C++STL
容器 —— 独立于具体类型的,通用的数据结构,如数组、链表、树等等。 迭代器 —— 抽象容器的内部结构,通过一致且透明的方式访问不同容器中的数据元素。 泛型算法 —— 独立于具体类型的,常用的数据处理方法,如查找、排序、拆分、合并、复制、交换等等。一、vector1.基本特性 1)向量中的元素被存储在一段连续的内存空间中。 2)通过下标访问容器中的元素的效率和数组相当。 3)向量容器支持内原创 2015-09-14 13:04:13 · 441 阅读 · 0 评论 -
C++11
1.auto在C++11之前,auto关键字用来指定存储期。在新标准中,它的功能变为类型推断。auto现在成了一个类型的占位符,通知编译器去根据初始化代码推断所声明变量的真实类型。各种作用域内声明变量都可以用到它。例如,名空间中,程序块中,或是for循环的初始化语句中。auto i = 42; // i is an intauto l = 42LL; // l is an原创 2015-09-14 13:55:47 · 335 阅读 · 0 评论 -
EffectiveC++
01尽量以cosnt、enum、inline替换#define目的是以编译器替代预处理器的工作,宏定义会在编译器处理源码之前被预处理器替换掉,宏并不会进入到符号表内,当运用此常量获得一个编译信息的时候,错误无法被追踪,另外使用常量会产生比较小的代码量另一个普遍的#define指令的用法是用它来实现那些看起来象函数而又不会导致函数调用的宏,这样语句有很多缺陷,可以使用内联函数来代替。有了const和i原创 2015-10-01 20:49:01 · 259 阅读 · 0 评论 -
深度探索C++对象模型——构造函数
一、默认构造函数如果一个类中不存在默认构造函数,那么它会在被编译器需要的时候由编译器生成,且该默认构造函数只能满足编译器所需的行动,是trivial constructor。Tips:类中成员变量的初始化是程序的需要,而不是编译器的需要。1..一个类没有默认构造函数且类中含有带有显示默认构造函数的成员子对象该类被编译器生成的默认构造函数是nontrivial constructor例1class F原创 2015-10-30 11:23:16 · 451 阅读 · 0 评论 -
C++高频面试题
1.++i和i++哪个效率更高?前缀式可以返回对象的引用,而后缀式必须返回对象的值所以导致在大对象产生时产生了较大的复制开销,因此处理自定义类型的时候尽量使用前缀式。2.不使用任何中间变量将a、b的值进行交换。a ^= b;b ^= a;a ^= b;C++与C有什么不同相对于C,C++多了重载、内联函数、异常处理,扩展了面向对象的设计内容:类、继承、虚函数、模板。如何理解C++是面向对象的,而原创 2016-02-20 23:16:39 · 1222 阅读 · 0 评论 -
STL高频面试题
1.具体说明STL如何实现vectorvector的内部是使用动态数组的方式来实现的,如果动态数组的内部实现不够用,就要动态的重新分配内存。然后把原数组的内容拷贝过去。2.vector和list的区别vector和数组类似,拥有连续的内存空间,支持随机的存取,在中间进行元素的插入和删除的操作时间复杂度是O(n)list是由双向链表实现的,只能通过数组指针来进行数据访问,遍历中间的元素,时间的复杂度是原创 2016-02-21 14:50:36 · 8577 阅读 · 0 评论 -
Cpp_类和对象
围绕具体问题对属性和行为进行有意识的选择,使复杂的具体问题得到简化——面向对象的程序设计类的定义与实例化1.类的一般形式class/struct 类名 : 继承方式 基类, … { 访问控制限定符: 类名 (形参表) : 成员变量 (初值), … { // 构造函数 函数体; } ~类名 (void) { // 析构函数 函数体;原创 2016-02-25 23:06:08 · 897 阅读 · 0 评论 -
STL_vector
基本特性1)向量中的元素被存储在一段连续的内存空间中。2)通过下标访问容器中的元素的效率和数组相当。3)向量容器支持内存空间的动态管理,随着新元素的加入,其内存空间可以自动动态扩展。4)如果在设计阶段可以预先估计所可能占用的空间大小,也可以预分配内存,避免动态内存管理的运行时开销。5)向量支持深拷贝,因此向量容器可以直接赋值,传参和返回。实例化#include <vector>vector<int原创 2016-02-23 15:43:29 · 303 阅读 · 0 评论 -
STL_list
基本概念STL中的list就是一双向链表,可高效地进行插入删除元素对象的构造 //整型的默认值是0 list<int>c0; //空链表 list<int>c1(3); //建一个含三个默认值是0的元素的链表 list<int>c2(5,2); //建一个含五个元素的链表,值都是2原创 2016-02-23 20:14:01 · 311 阅读 · 0 评论 -
STL_deque
基本概念deque容器为一个给定类型的元素进行线性处理,像向量一样,它能够快速地随机访问任一个元素,并且能够高效地插入和删除容器的头尾部元素。因此也被叫做双端队列。构造函数1.deque():创建一个空deque2.deque(int nSize):创建一个deque,元素个数为nSize3.deque(int nSize,const T& t):创建一个deque,元素个数为nSize,且值均为t原创 2016-02-23 21:13:57 · 201 阅读 · 0 评论 -
STL_stack
构造函数常用成员函数1.压入数据 void push ( const T& x ); 2.弹出数据 void pop ( ); 3.返回栈顶的数据 value_type& top ( ); const value_type& top ( ) const; 4.计算栈元素个数 size_type size ( ) const;应用实例//栈 stack支持 empty() size(原创 2016-02-23 21:32:47 · 267 阅读 · 0 评论 -
STL_queue
基本概念成员函数1.入队:q.push(x); 将x 接到队列的末端。 2.出队:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。 3.访问队首元素,如例:q.front(),即最早被压入队列的元素。 4.访问队尾元素,如例:q.back(),即最后被压入队列的元素。 5.判断队列空,如例:q.empty(),当队列空时,返回true。 6.访问队列中的元素个数,如原创 2016-02-23 21:37:23 · 380 阅读 · 0 评论 -
STL_set
基本概念Set、multiset都是集合类,差别在与set中不允许有重复元素,multiset中允许有重复元素。构造函数set c(op):以op为排序准则,产生一个空的setset c1(c2):复制c2中的元素到c1中set c(const value_type first, const value_type last):复制[first, last)之间元素构成新集合set c(const v原创 2016-02-23 21:45:33 · 260 阅读 · 0 评论 -
STL_multiset
构造函数1.int size() const:返回容器元素个数 2.bool empty() const:判断容器是否为空,若返回true,表明容器已空 3.insert函数pair<iterator,bool> insert( x):插入元素xiterator insert(iterator it,x):在迭代器it处插入元素xvoid insert(const value_type *fir原创 2016-02-23 21:50:54 · 447 阅读 · 0 评论 -
STL_map
基本概念将key/value当作元素,进行管理。它们可根据key的排序准则自动将元素排序,要修改元素的key必须先删除拥有该key的元素,然后插入拥有新的key/value的元素。构造函数map m:创建空映射,不包含任何元素map m(op):以op为排序准则,产生一个空的mapmap m1(m2):复制c2中的元素到c1中map m(const value_type first, const v原创 2016-02-23 21:57:38 · 263 阅读 · 0 评论 -
Cpp_I/O流
一、主要I/O流类 ios_base | ios _/ | | _ /原创 2016-02-29 22:01:39 · 648 阅读 · 0 评论