
C++
文章平均质量分 78
Gamal_xin
这个作者很懒,什么都没留下…
展开
-
c++之explicit
C++中, 一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数), 承担了两个角色。 1 是个构造器 ,2 是个默认且隐含的类型转换操作符。转载 2014-09-15 11:34:36 · 617 阅读 · 0 评论 -
C++中 模板Template的使用 (typename)
1、在c++Template中很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢?答:class用于定义类,在模板引入c++后,最初定义模板的方法为:template,这里class关键字表明T是一个类型,后来为了避免class在这两个地方的使用可能给人带来混淆,所以引入了typename这个关键字,它的作用同class一样表明后面的符号为转载 2014-08-10 15:39:27 · 1827 阅读 · 0 评论 -
cin.getline()与getline()
C++中有两个getline函数,这两个函数分别定义在不同的头文件中。1.getline()是定义在中的一个行数,用于输入一行string,以enter结束。 函数原型:getline(cin,str);cin:istream类的输入流对象str:待输入的string对象 example 1:[cpp] view转载 2014-08-10 14:53:44 · 606 阅读 · 0 评论 -
C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
学C++的时候,这几个输入函数弄的有点迷糊;这里做个小结,为了自己复习,也希望对后来者能有所帮助,如果有差错的地方还请各位多多指教(本文所有程序均通过VC 6.0运行)1、cin 2、cin.get() 3、cin.getline() 4、getline() 5、gets() 6、getchar()附:cin.ignore();cin.get()//跳过一个字符转载 2014-08-10 14:43:54 · 396 阅读 · 0 评论 -
STL之set和multiset
一、set和multiset基础set和multiset会根据特定的排序准则,自动将元素进行排序。不同的是后者允许元素重复而前者不允许。需要包含头文件:#include set和multiset都是定义在std空间里的类模板:[cpp] view plaincopyprint?templatecla转载 2014-08-21 11:42:26 · 406 阅读 · 0 评论 -
STL之list
STL中的list就是一双向链表,可高效地进行插入删除元素。现总结一下它的操作。文中所用到两个list对象c1,c2分别有元素c1(10,20,30) c2(40,50,60)。还有一个list::iterator citer用来指向c1或c2元素。list对象的声明构造():A. listc0; //空链表B原创 2014-08-20 20:53:42 · 383 阅读 · 0 评论 -
malloc free 和 new delete 区别
都是在堆(heap)上进行动态的内存操作区别: 用malloc函数需要指定内存分配的字节数并且不能初始化对象; new会自动调用对象的构造函数。 free不会调用对象的destructor;转载 2014-08-09 00:07:32 · 334 阅读 · 0 评论 -
qsort和sort学习与比较
1.qsort函数:原 型: void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *));功 能: 使用快速排序例程进行排序参 数:1 待排序数组首地址2 数组中待排序元素数量3 各元素的占用空间大小4 指向函数的指针,用于确定排序的转载 2014-08-08 23:01:32 · 345 阅读 · 0 评论 -
shared_ptr
shared_ptr是一个最像指针的"智能指针",是boost.smart_ptr库中最有价值、最重要的组成部分,也是最有用的,Boost库的许多组件--甚至还包括其他一些领域的智能指针都使用了shared_ptr。抱歉,我实在想不出什么更恰当的词汇来形容它在软件开发中的重要性。再强调一遍,shared_ptr非常有价值、非常重要、非常有用。 shared_ptr与scoped_p转载 2014-08-08 22:19:28 · 331 阅读 · 0 评论 -
C++学习篇——C++ STL中迭代器介绍
迭代器迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围。迭代器就如同一个指针。事实上,C++的指针也是一种迭代器。但是,迭代器不仅仅是指针,因此你不能认为他们一定具有地址值。例如,一个数组索引,也可以认为是一种迭代器。迭代器有各种不同的创建方法。程序可能把迭代器作为一个变量创建。一个STL容器类可能为了使用一个特定类型的数据而创建一个迭代器。作为指针,必须能够使用*操作符转载 2014-08-08 21:47:50 · 356 阅读 · 0 评论 -
C++中的explicit关键字
在C++程序中很少有人去使用explicit关键字,不可否认,在平时的实践中确实很少能用的上。再说C++的功能强大,往往一个问题可以利用好几种C++特性去解决。但稍微留心一下就会发现现有的MFC库或者C++标准库中的相关类声明中explicit出现的频率是很高的。了解explicit关键字的功能及其使用对于我们阅读使用库是很有帮助的,而且在编写自己的代码时也可以尝试使用。既然C++语言提供这种特性转载 2014-08-08 22:42:53 · 351 阅读 · 0 评论 -
cin.get getline cin.getline 区别以及‘n’是否留在缓冲区中
cin.get(),接收了"123456",同时末尾加'\0','\n'没有读入仍存在于缓冲区中 getline()是C++中的函数,使用方法getline(cin, str)其中str是string类型 同样输入“123456回车”,因为是string类型,所以结尾没有\0,所以getline()也不会吧\n置为\0,缓冲区内也没有数据 cin.getline() cin原创 2014-08-10 14:51:34 · 891 阅读 · 0 评论 -
C++中 string 的用法大全(转)
之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。 首先,为了在我们的程序中使用string类型转载 2014-08-22 16:03:31 · 427 阅读 · 0 评论 -
C/C++的类型安全
什么是类型安全?类型安全很大程度上可以等价于内存安全,类型安全的代码不会试图访问自己没被授权的内存区域。“类型安全”常被用来形容编程语言,其根据在于该门编程语言是否提供保障类型安全的机制;有的时候也用“类型安全”形容某个程序,判别的标准在于该程序是否隐含类型错误。类型安全的编程语言与类型安全的程序之间,没有必然联系。好的程序员可以使用类型不那么安全的语言写出类型相当安全的程序,相反的,差一点儿转载 2014-09-09 18:28:05 · 474 阅读 · 0 评论 -
C++:STL标准入门汇总
学无止境!!!第一部分:(参考百度百科) 一、STL简介STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段转载 2014-08-17 21:53:51 · 382 阅读 · 0 评论 -
C++模板
模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。 模板是一种对类型进行参数化的工具; 通常有两种形式:函数模板和类模板; 函数模板针对仅参数类型不同的函数; 类模板针对仅数据成员和成员函数类型不同的类。 使用模板的目的就是能够让程序员编写与类型无关的代码转载 2014-08-17 13:02:01 · 329 阅读 · 0 评论 -
C++调用C生成的动态库
看下面这个例子,其中add函数是用c编写的代码,而主函数是用c++编写的代码,将c代码编译成动态库,然后用c++调用。add.h #ifndef ADD_FILE_HEADER_INC#define ADD_FILE_HEADER_INC#include #include extern doubleadd (double a, double b)转载 2014-08-29 10:00:18 · 673 阅读 · 0 评论 -
关于C++中的虚拟继承的一些总结(虚拟继承,覆盖,派生,隐藏)
1.为什么要引入虚拟继承虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继承,而A就成了虚拟基类。实现的代码如下:class Aclass B1:public virtual A;class B2:p转载 2014-08-26 12:03:35 · 513 阅读 · 0 评论 -
C++多态的实现原理
1. 用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数。2. 存在虚函数的类都有一个一维的虚函数表叫做虚表。类的对象有一个指向虚表开始的虚指针。虚表是和类对应的,虚表指针是和对象对应的。3. 多态性是一个接口多种实现,是面向对象的核心。分为类的多态性和函数的多态性。4. 多态用虚函数来实现,结合动态绑定。5. 纯虚函数是虚函数再加上= 0。6. 抽象类是指包转载 2014-08-26 10:58:44 · 382 阅读 · 0 评论 -
多线程中的使用共享变量的问题
一组并发线程运行在一个进程的上下文中,每个线程都有它自己独立的线程上下文,例如:栈、程序计数器、线程ID、条件码等,每个线程和其它的线程一起共享除此之外的进程上下文的剩余部分,包括整个用户的虚拟地址空间,当然也共享同样的打开的文件的集合。,这里有一点要特别注意,就是寄存器是从不共享的,而虚拟存储器总是共享的。有了共享就要防止在对共享变量进行操作的过程中得到一个不可知的值,在Linux内核中转载 2014-09-09 22:07:47 · 3684 阅读 · 0 评论 -
C++析构函数为什么要为虚函数
1.为什么基类的析构函数是虚函数? 在实现多态时,当用基类操作派生类,在析构时防止只析构基类而不析构派生类的状况发生。 下面转自网络:源地址 http://blog.sina.com.cn/s/blog_7c773cc50100y9hz.html a.第一段代码 #includeusing namespace std;class转载 2014-08-26 11:38:11 · 370 阅读 · 0 评论 -
C++对象布局及多态实现探索之内存布局(整理的很多链接)
本文通过观察对象的内存布局,跟踪函数调用的汇编代码。分析了C++对象内存的布局情况,虚函数的执行方式,以及虚继承,等等文章链接:http://dev.yesky.com/254/2191254.shtml 论C/C++函数间动态内存的传递 (2005-07-30) 当你涉及到C/C++的核心编程的时候,你会无止境地与内存管理打交道。文章链接:http://dev.yes转载 2014-08-26 11:31:24 · 616 阅读 · 0 评论 -
C语言调用C++库接口的方法概述
最近需要在由纯c语言编写的代码中调用C++的动态库,在网上找了一些资料,现在总结下解决方法。主要的思想就是将C++的动态库再封装一层,在这一层编写C语言的函数api,这API中使用C++动态库提供的类;具体例子如下:1,假如C++动态库包含如下代码://myclass.h#ifndef _MYCLASS_H#define _MYCLASS_Hclass转载 2014-08-29 10:13:50 · 692 阅读 · 0 评论 -
C++ 初始化列表
青春都一饷,忍把浮名,换了代码轻狂。关注DirectX随笔 - 181, 文章 - 65, 评论 - 1528, 引用 - 0C++ 初始化列表何谓初始化列表与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段。在C++中,struct和class的唯转载 2014-09-09 16:15:46 · 409 阅读 · 0 评论 -
【读书笔记】当析构函数遇到多线程 ── C++中线程安全的对象回调
陈硕同学的"当析构函数遇到多线程 ── C++ 中线程安全的对象回调"是一篇非常优秀的文章,下面列举文章中的一些知识点和经验总结以便能细细品味、消化。 对象构造要做到线程安全,惟一的要求是在构造期间不要泄露 this 指针,即不要在构造函数中注册任何回调也不要在构造函数中把 this 传给跨线程的对象即便在构造函数的最后一行也不行之所以这样规定,是因为在构造函数执行转载 2014-08-08 21:45:46 · 450 阅读 · 0 评论 -
C++ enum用法
1、为什么要用enum 写程序时,我们常常需要为某个对象关联一组可选alternative属性.例如,学生的成绩分A,B,C,D等,天气分sunny, cloudy, rainy等等。 更常见的,打开一个文件可能有三种状态:input, output和append. 典型做法是,对应定义3个常数,即: const int input = 1;转载 2014-08-07 22:48:13 · 396 阅读 · 0 评论 -
C++中const用法总结
1. const修饰普通变量和指针const修饰变量,一般有两种写法:const TYPE value;TYPE const value;这两种写法在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的。对于一个非指针的类型TYPE,无论怎么写,都是一个含义,即value只不可变。例如:const int nV转载 2014-08-06 18:48:42 · 284 阅读 · 0 评论 -
cin、cin.get()、cin.getline()、getline()、gets()函数的用法
1、cin>> 用法1:最基本,也是最常用的用法,输入一个数字:#include using namespace std;main (){int a,b;cin>>a>>b;cout}输入:2[回车]3[回车]输出:5用法2:接受一个字符串,遇“空格”、“TAB”、“回车”都结转载 2014-08-06 18:10:00 · 333 阅读 · 0 评论 -
对于拷贝构造函数和赋值构造函数的理解
昨天晚上在看智能指针的时候,我发现自己连一个拷贝构造函数和赋值构造函数都写不出来,自己就尝试写了一个版本,结果发现错误百出,对于拷贝构造函数和赋值构造函数的理解仅仅停留在理论的方面,而不知其中太多的内涵。比如我们都知道拷贝构造函数和赋值构造函数最大的不同在于: 拷贝构造是确确实实构造一个新的对象,并给新对象的私有成员赋上参数对象的私有成员的值,新构造的对象和参数对象地址是不一样转载 2014-08-06 18:06:22 · 312 阅读 · 0 评论 -
New delete 与malloc free 的联系与区别
联系:都是在堆(heap)上进行动态的内存操作区别: 用malloc函数需要指定内存分配的字节数并且不能初始化对象; new会自动调用对象的构造函数。 free不会调用对象的destructor;原创 2014-08-06 23:32:49 · 484 阅读 · 0 评论 -
c++ 构造函数后面加冒号
12345678910111213141516171819202122#include #include using namespace std; class iStack原创 2014-08-06 22:11:24 · 5558 阅读 · 0 评论 -
析构函数为什么一般是虚函数
编译器总是根据类型来调用类成员函数。但是一个派生类的指针可以安全地转化为一个基类的指针。这样删除一个基类的指针的时候,C++不管这个指针指向一个基类对象还是一个派生类的对象,调用的都是基类的析构函数而不是派生类的。如果你依赖于派生类的析构函数的代码来释放资源,而没有重载析构函数,那么会有资源泄漏。所以建议的方式是将析构函数声明为虚函数。如果你使用MFC,并且以CObject或其派生类为基类,那么原创 2014-08-06 21:40:10 · 612 阅读 · 0 评论 -
C++异常处理
引言异常,让一个函数可以在发现自己无法处理的错误时抛出一个异常,希望它的调用者可以直接或者间接处理这个问题。而传统错误处理技术,检查到一个局部无法处理的问题时:1.终止程序(例如atol,atoi,输入NULL,会产生段错误,导致程序异常退出,如果没有core文件,找问题的人一定会发疯)2.返回一个表示错误的值(很多系统函数都是这样,例如malloc,内存不足,分配失败,返转载 2014-08-06 20:53:32 · 368 阅读 · 0 评论 -
关于C++中的友元函数的总结
1.友元函数的简单介绍1.1为什么要使用友元函数在实现类之间数据共享时,减少系统开销,提高效率。如果类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数。具体来说:为了使其他类的成员函数直接访问该类的私有变量。即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数。实际上具体大概有下面两种情况需要使用友元函数:(1)运算转载 2014-08-06 17:42:40 · 360 阅读 · 0 评论 -
C++继承:公有,私有,保护
公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。1. 公有继承(public)公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被这个派生类的子类所访问。2. 私有继承(private)私有继承的特点是基类的公有成员和保护成员都作为派生类的私有转载 2014-08-06 18:03:42 · 314 阅读 · 0 评论 -
C++中static的用法总结
不管是C,C++,还是JAVA,它们中都包含static。当然这其中的用法及作用也是不一样的。下面主要介绍static在C++中的用法:要理解static,就必须要先理解另一个与之相对的关键字,很多人可能都还不知道有这个关键字,那就是auto,其实我们通常声明的不用static修饰的变量,都是auto的,因为它是默认的,就象short和long总是默认为int一样;我们通常声明一个变量:转载 2014-08-07 09:26:37 · 453 阅读 · 0 评论 -
C中的qsort函数
一、简介 原 型: void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *));功 能: 使用快速排序例程进行排序 参 数:1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针,用于确定排序的顺序说明:qsort函数是ANSI转载 2014-08-18 13:08:53 · 393 阅读 · 0 评论 -
STL之map
来源:(http://blog.sina.com.cn/s/blog_61533c9b0100fa7w.html) - C++ map的基本操作和使用_Live_新浪博客 Map是c++的一个标准容器,她提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作!1. map最基本的构造函数; mapmapstri转载 2014-08-20 22:34:57 · 359 阅读 · 0 评论 -
typedef void(*Fun)(void)
这里是定义了一个指向参数为空,返回值为空的函数的指针类型。定义一个函数指针类型。比如你有三个函数:void hello(void) { printf("你好!"); }void bye(void) { printf("再见!"); }void ok(void) { printf("好的!"); }typdef void (*funcptr)(void);原创 2014-08-07 08:49:16 · 578 阅读 · 0 评论 -
STL之vector、list、deque的区别
1 vector 向量 相当于一个数组 在内存中分配一块连续的内存空间进行存储。支持不指定vector大小的存储。STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacituy()函数返回的大小,当超过此分配的空间时再整体重新放分配一块内存存储,这给人以vector可以不指定vector即一个连续内存的大小的感觉。通常此默认的内存分配能完成大部分情况下的存转载 2014-08-21 10:15:38 · 369 阅读 · 0 评论