C/C++
文章平均质量分 92
逝水-无痕
这个作者很懒,什么都没留下…
展开
-
vector——序列式容器
vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。为了可以使用vector,必须在你的头文件中包含下面的代码:#include <vector>vect...原创 2015-12-17 08:50:57 · 460 阅读 · 0 评论 -
C++ 模板基础(一)
原文地址:http://www.cnblogs.com/gw811/archive/2012/10/25/2738929.htmlC++模板 模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。 模板是一种对类型进行参数化的工具; 通常有两种形式:函数模板和类模板; 函数模板转载 2017-07-19 09:50:46 · 260 阅读 · 0 评论 -
DCI in C++ 语法糖
DCI框架中的语法糖:DEFINE_ROLE:用于定义role。DEFINE_ROLE的本质是创建一个包含了虚析构函数的抽象类,但是在DCI框架里面使用这个命名更具有语义。DEFINE_ROLE定义的类中需要至少包含一个虚方法或者使用了USE_ROLE声明依赖另外一个role。USE_ROLE:在一个类里面声明自己的实现依赖另外一个role。ROLE:当一个类声明中使用原创 2017-07-18 13:00:48 · 2240 阅读 · 0 评论 -
为什么基类指针(或引用)可以调用派生类的private虚函数
在基类中定义了public虚函数,在派生类中将其重写,但是设置为private,为什么通过基类指针仍然可以发生动态绑定调用派生类中的private虚函数?例子如下:class Base{public: // public虚函数 virtual void Disp() { cout << "base.\n"; }}; class Derived : public B原创 2017-07-18 14:25:38 · 3432 阅读 · 0 评论 -
C++编程好习惯原则
1、类定义中显式声明 构造函数 和 析构函数,在析构函数里对类中分配的内存进行释放;2、在存在继承关系的类声明中,务必将基类的 析构函数 声明为 虚函数;原创 2017-07-16 22:05:09 · 473 阅读 · 0 评论 -
为什么构造函数不能为虚函数
1.从存储空间角度虚函数对应一个vtale,这个表的地址是存储在对象的内存空间的。如果将构造函数设置为虚函数,就需要到vtable中调用,可是对象还没有实例化,没有内存空间分配,如何调用。(悖论)2.从使用角度 虚函数主要用于在信息不全的情况下,能使重载的函数得到对应的调用。构造函数本身就是要初始化实例,使用虚函数也没有实际意义。所以构造函数没有必要是虚函数。虚函数的原创 2017-07-16 22:01:14 · 580 阅读 · 0 评论 -
为什么要将基类的析构函数声明为虚函数
原因是因为多态的存在 我们大家都知道,在C++ 中,当一个对象销毁时,析构函数是用来对类对象和对象成员进行释放内存和做一些其他的cleanup操作。析构函数靠~符号来区分,~ 出现在 析构函数名字的前面, 当我们去定义一个 虚析构函数时,你只需要简单的的在~符号前面 加一个 virtual标志就可以了。 为什么需要将析构函数声明为 虚函数,我们最好用几个例子来验原创 2017-07-16 21:48:38 · 3687 阅读 · 3 评论 -
C++ new的三种用法详细解析
一. 简介new有三种使用方式:plain new,nothrow new和placement new。(1)plain new顾名思义就是普通的new,就是我们惯常使用的new。在C++中是这样定义的: void* operator new(std::size_t) throw(std::bad_alloc); void operator delete(void原创 2017-07-13 19:35:55 · 59907 阅读 · 3 评论 -
C++ auto关键字
C++98 auto早在C++98标准中就存在了auto关键字,那时的auto用于声明变量为自动变量,自动变量意为拥有自动的生命期,这是多余的,因为就算不使用auto声明,变量依旧拥有自动的生命期:int a =10 ; //拥有自动生命期auto int b = 20 ;//拥有自动生命期static int c = 30 ;//延长了生命期C++98中的auto多余且原创 2017-07-13 15:39:00 · 1427 阅读 · 0 评论 -
do{...}while(0)的意义
linux内核和其他一些开源的代码中,经常会遇到这样的代码:do{ ...}while(0)这样的代码一看就不是一个循环,do..while表面上在这里一点意义都没有,那么为什么要这么用呢?实际上,do{...}while(0)的作用远大于美化你的代码。查了些资料,总结起来这样写主要有以下几点好处:1、辅助定义复杂的宏,避免引用的时候出错:举例来说,假设你需原创 2017-07-19 16:17:19 · 272 阅读 · 0 评论 -
C++ const的用法详解
C++作为一种面向对象的经典语言,它是非常的强大,它的每个部分都值得我们去深入了解。const的基本概念: const名叫常量限定符,用来限定特定变量,以通知编译器该变量是不可修改的。习惯性的使用const,可以避免在函数中对某些不应修改的变量造成可能的改动。下面我就const的用法来谈谈:const的用法大致可分为以下几个方面:(1)const修饰原创 2017-08-02 21:42:09 · 35198 阅读 · 4 评论 -
C++ 11 using关键字
一般的using关键子我们都是用来声明当前文件的命名空间,比如标准库的命名空间std-> using namespace std;但在c++11中,它的用处还有几个 1:取代typedef ,2:让父类同名函数在子类中以重载方式使用以下是《深入理解c++11》的对1:的截图以下是自己的实现[cpp] view plain copy //原创 2017-07-26 14:10:56 · 7699 阅读 · 0 评论 -
map——关联式容器
map是一种集合,其中可包含0个或多个不排序的元素对,一个元素是不重复的键值,另一个是与键相关联的值。例如,map集合{(jobs,apple),(gates,microsoft),(ellison,oracle)}包含三对元素。每对元素由第一个键值(如gates)和相关联的值(如microsoft)构成。 STL map是一种关联式的列表,即一种将一个键值与...原创 2015-12-18 10:03:24 · 482 阅读 · 0 评论 -
C++ map用法——关联式容器
1.map最基本的构造函数;map<string ,int>mapstring;map<int,string >mapint;map<sring,char>mapstring;map< char ,string>mapchar;map<char,int>mapchar;map<int ,char>mapint;...原创 2015-12-18 16:44:37 · 421 阅读 · 0 评论 -
pair和make_pair用法
[cpp]view plaincopyprint?//pair简单讲就是将两个数据整合成一个数据 //本质上是有first,second两个成员变量的结构体 externvoidtest_pair() { //pair两种构造的方法 //方法1 std::pair<std::string,double>(...转载 2015-12-18 16:59:42 · 6083 阅读 · 0 评论 -
list——序列式容器
一,概述 List将元素按顺序储存在链表中.与向量(vectors)相比,它允许快速的插入和删除,但是随机访问却比较慢。 list 不仅是一个双向链表,而且是一个环状双向链表二,使用 #include <list> using namespace std; 注意:list是一个“前闭后开”的区...转载 2015-12-23 16:27:13 · 452 阅读 · 0 评论 -
利用STL中的sort算法对向量等容器进行排序
STL中有一个sort函数,可以直接对vector等容器进行排序,使用该算法需要包含头文件#include <algorithm>;并且声明命名空间usingnamespace std; sort函数可以传两个参数或三个参数,第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一个地址(也就是说,排序的区间是[a,b)),第三个参数是比较函数。比较函...原创 2015-12-29 14:48:42 · 6209 阅读 · 0 评论 -
C++学习博客地址
【SINE】自信+自强http://www.cnblogs.com/wintergrass/category/202147.htmlC++中的类型转换static_cast、dynamic_cast、const_cast和reinterpret_cast总结http://www.jb51.net/article/55885.htmprotobuf学习https://blog.csdn.net/ha...原创 2017-08-02 21:46:34 · 361 阅读 · 0 评论 -
C++ function关键字
function是一组函数对象包装类的模板,实现了一个泛型的回调机制。引入头文件#include using namespace std;using namespace std::placeholders; //bind的时候会用`参考:http://www.cnblogs.com/hujian/archive/2012/12/07/2807605.htmlfucti原创 2017-07-28 15:18:14 · 4075 阅读 · 1 评论 -
C++ 11 initializer_list关键字
initializer_list是C++11提供的新类型,定义在头文件中。 用于表示某种特定类型的值的数组,和vector一样,initializer_list也是一种模板类型。templateclass T >class initializer_list;要介绍initializer_list的使用,有必要先谈一谈列表初始化。C++11扩大了初始化列表的适用范围,使其可用于所有原创 2017-07-28 13:50:30 · 2304 阅读 · 0 评论 -
C++强制类型转换操作符 static_cast
static_cast是一个强制类型转换操作符。强制类型转换,也称为显式转换,C++中强制类型转换操作符有static_cast、dynamic_cast、const_cast、reinterpert_cast四个。本节介绍static_cast操作符。 编译器隐式执行的任何类型转换都可以由static_cast来完成,比如int与float、double与char、enum与int之原创 2017-07-13 15:17:30 · 2223 阅读 · 2 评论 -
C++ explicit关键字详解
首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式).那么显示声明的构造函数和隐式声明的有什么区别呢? 我们来看下面的例子:class CxString // 没有使用explicit关键字的原创 2017-07-13 10:39:45 · 492 阅读 · 0 评论 -
抽象基类和纯虚函数
抽象基类抽象基类之所以是抽象的,是因为不能实例化抽象基类的对象,抽象基类可以用来指明某些必须被派生类覆盖的虚函数,如果这些派生类想要拥有对象的话。只有符合下面条件的类才可以称为抽象基类:类必须拥有一个纯虚成员函数在纯虚成员函数声明的结尾加上=0就可以将这个函数定义为纯虚成员函数。class ABC{ //Abstract Base Classpublic: virtual v原创 2015-12-17 19:32:38 · 756 阅读 · 1 评论 -
C++常量指针this
在成员函数内部可以用指针常量this来访问与成员函数的调用相关联的对象(this是一个关键字)。假设我们已经设计了一个File类,它有一个成员函数copy,该函数定义如下:void File::copy(File& dest){ if(this == &dest) //can't copy File to itself return; //otherwise, copy thi原创 2015-12-17 15:33:11 · 1414 阅读 · 0 评论 -
const类型参数的对象引用和const成员函数
const类型参数的对象引用在如下的类声明中:class C{private: string name;public: C(){/*...*/} //default constructor C(int x){/*...*/} //convert constructor void setName(const string& n){name = n;原创 2015-12-16 16:16:59 · 2062 阅读 · 0 评论 -
操作符重载
重载指的是相同的名称或符号具有不同的意义。一个重载的函数就是一个被多次定义的(函数名相同但函数签名不同)函数。操作符重载就是对+、++和[]等这样的操作符进行重新定义,可通过编写一些比较特殊的操作符函数来重载这些操作符。操作符()是函数调用操作符,[]是下标操作符,+、-、*和&的一元、二元形式的操作符,自增操作符++和自减操作符--的前置、后置形式都可以被重载。成员选择操原创 2015-12-16 15:59:30 · 328 阅读 · 0 评论 -
C++中编译期多态机制和运行期多态机制之间的区别
函数由函数名、参数个数、参数类型、返回值和调用方式等组成。函数签名:把函数名去掉之后函数的剩余部分(参数个数、参数类型、返回值和调用方式等)。顶层函数:在类之外声明并定义的函数称为顶层函数。成员函数:在类的声明中声明的函数称为类的成员函数。重载:如果顶层函数有不同的参数,它们的函数名可以相同;在一个类中,成员函数可以有相同的函数名,只要它们的函数签名不同即可,我们将这种情况原创 2015-12-16 15:09:01 · 1261 阅读 · 0 评论 -
C++文件读写详解(ofstream,ifstream,fstream)
原博文地址:http://blog.csdn.net/kingstar158/article/details/6859379在看C++编程思想中,每个练习基本都是使用ofstream,ifstream,fstream,以前粗略知道其用法和含义,在看了几位大牛的博文后,进行整理和总结:这里主要是讨论fstream的内容:[java] view plaincop转载 2015-12-15 10:40:50 · 532 阅读 · 0 评论 -
C++ string类中的字符串处理函数
string 类提供字符串处理函数,利用这些函数,程序员可以在字符串内查找字符,提取连续字符序列(称为子串),以及在字符串中删除和添加。其中比较常用的查找和搜索函数是find()函数、find_first_not_of()函数、find_first_of()函数、find_last_not_of()函数、find_last_of()函数、rfind()函数、insert()函数、substr()函原创 2015-12-29 16:14:00 · 5766 阅读 · 0 评论 -
VS中宏 _T、TEXT,_TEXT、L 的作用:
宏“_T、TEXT,_TEXT、L”都是与字符串相关的宏。1、 在字符串前加一个L的作用: L宏表示将ANSI字符串转换成unicode的字符串,就是每个字符占用两个字节。strlen("asd") = 3; strlen(L"asd") = 6;2、在字符串前加一个_T的作用: _T宏可以把一个引号引起来的字符串,根据你的环境原创 2015-11-12 15:52:08 · 928 阅读 · 0 评论 -
C++类的静态成员
在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。静态成员的定义或声明要加个关键static。静态成员可以通过双冒号来使用即::。 在C++中类的静态成员变量和静态成员函数是个容易出错的地方,本文先通过几个例子来总结静转载 2015-12-01 20:13:31 · 464 阅读 · 0 评论 -
C/C++函数调用的几种方式
我们知道,调用函数时,计算机常用栈来存放函数执行需要的参数,由于栈的空间大小是有限的,在windows下栈是向低地址扩展的数据结构,是一块连续的内存区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,windows下栈的大小是2M(也有的说是1M),如果申请的空间超过栈的剩余空间时,将提示overflow。在函数调用时,第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可执转载 2015-12-02 09:36:43 · 5268 阅读 · 0 评论 -
C++ new创建对象生命周期
c++中的new和c中的malloc类似,如果你不delete掉这段申请的内存的话,它会一直存在直到进程结束后系统会回收掉这段资源;而如果你delete掉这段申请的内存,则这段申请到的内存的生命周期为从你new(申请一段内存)到你delete(释放掉这段内存)这段时间。原创 2015-12-21 09:11:56 · 6179 阅读 · 0 评论 -
C,C++宏中#、##和__VA_ARGS__的理解
文中__FILE__与示例1的可以参见《使用ANSI C and Microsoft C++中常用的预定义宏》宏中的#的功能是将其后面的宏参数进行字符串化操作(Stringizing operator),简单说就是在它引用的宏变量的左右各加上一个双引号。如定义好#define STRING(x) #x之后,下面二条语句就等价。 char *pChar = "hello"原创 2017-07-12 12:56:34 · 3063 阅读 · 0 评论 -
析构函数定义为虚函数原因
先看下面一段程序:#include using namespace std;class Person{public:virtual ~Person() //加了virtual,讲析构函数声明为虚函数{ cout }};class Student : public Person{public:~St原创 2017-07-12 16:49:37 · 438 阅读 · 0 评论 -
C++文件操作——fopen/fseek/ftell/fread/fwrite/fclose等函数用法
1. fopen FILE * fopen(const char * path,const char * mode);函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。 mode有下列几种形态字符串: r 打开只读文件,该文件必须存在。 r+ 打开可读写的文件,该文件必须存在。 rb+ 读写转载 2015-12-23 16:45:30 · 19576 阅读 · 0 评论 -
C++ public,protected,private继承与访问限制
private,public,protected的访问范围: private: 只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问. protected: 可以被该类中的函数、子类的函数、以及其友元函数访问,但不能被该类的对象访问 public: 可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问注:友元函数包括两种:设为友元的原创 2015-12-23 16:17:46 · 1105 阅读 · 0 评论 -
C++ 构造函数初始化列表
在如下的类定义中:class C{private: int x; const int c;public: C(){ x = 0; //OK, x not const c = 0; //***** ERROR: c is const } };类C的构造函数通过赋值语句对该类的两个数据成员进行初始化。但由于数据成员c是const类型的,因此对其作原创 2015-12-23 11:14:01 · 453 阅读 · 0 评论 -
C++ 使用std::getline()拆分字符串
使用std::getline()拆分字符串实例如下:#include #include #include int main() { std::vector strings; std::istringstream f("denmark;sweden;india;us"); std::string s; while (std::getline(f, s, ';')) { st原创 2015-12-23 09:25:44 · 7158 阅读 · 0 评论 -
C++ 使用ifstream和getline读取文件内容
假设有一个叫 data.txt 的文件, 它包含以下内容: Fry: One Jillion dollars.[Everyone gasps.]Auctioneer: Sir, that's not a number.数据读取, 测试 。以下就是基于 data.txt 的数据读取操作:[cpp] view plaincopy转载 2015-12-23 08:54:35 · 1374 阅读 · 0 评论