C/C++
文章平均质量分 75
fnxiao
这个作者很懒,什么都没留下…
展开
-
同步函数与异步函数
文章出处:http://blog.163.com/lyzaily@126/blog/static/42438837200952751954922/ 1. 同步函数与异步函数 什么是同步函数? 什么是异步函数? 它们在线程中执行时会对线程有何影响? 一个线程如何与一个异步执行的函数进行同步?转载 2013-05-06 21:38:41 · 826 阅读 · 0 评论 -
C++变量的存储类别(动态存储、静态存储、自动变量、寄存器变量、外部变量)
动态存储方式与静态存储方式我们已经了解了变量的作用域。作用域是从空间的角度来分析的,分为全局变量和局部变量。 变量还有另一种属性——存储期(storage duration,也称生命期)。存储期是指变量在内存中的存在期间。这是从变量值存在的时间角度来分析的。存储期可以分为静态存储期(static storage duration)和动态存储期(dynamic storage dur原创 2014-12-10 15:12:54 · 2090 阅读 · 0 评论 -
C++变量属性小结
一个变量除了数据类型以外,还有3种属性:存储类别 C++允许使用auto,static,register和extern 4种存储类别。作用域指程序中可以引用该变量的区域。存储期指变量在内存的存储期限。 以上3种属性是有联系的,程序设计者只能声明变量的存储类别,通过存储类别可以确定变量的作用域和存储期。 要注意存储类别的用法。auto, static和register 3原创 2014-12-10 17:02:31 · 925 阅读 · 1 评论 -
C++析构函数
析构函数(destructor)也是一个特殊的成员函数,它的作用与构造函数相反,它的名字是类名的前面加一个“~”符号。 在C++中“~”是位取反运算符,从这点也可以想到,析构函数是与构造函数作用相反的函数。当对象的生命期结束时,会自动执行析构函数。 具体地说如果出现以下几种情况,程序就会执行析构函数:1.如果在一个函数中定义了一个对象(它是自动局部对象),当这个函数被调用结束时原创 2014-12-11 11:27:33 · 743 阅读 · 0 评论 -
C++成员函数的存储方式
用类去定义对象时,系统会为每一个对象分配存储空间。如果一个类包括了数据和函数,要分别为数据和函数的代码分配存储空间。 按理说,如果用同一个类定义了10个对象,那么就需要分别为10个对象的数据和函数代码分配存储单元,如图8.4所示。 图8.4 能否只用一段空间来存放这个共同的函数代码段,在调用各对象的函数时,都去调用这个公用的函数代码。如图8.5所示。 图8.5原创 2014-12-11 09:54:24 · 717 阅读 · 0 评论 -
C++函数模板
C++提供了函数模板(functiontemplate)。所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。看下面的例子就清楚了。 #includeu原创 2014-12-10 13:56:25 · 588 阅读 · 0 评论 -
C++函数的默认参数
一般情况下,在函数调用时形参从实参那里取得值,因此实参的个数应与形参相同。有时多次调用同一函数时用同样的实参,C++提供简单的处理办法,给形参一个默认值,这样形参就不必一定要从实参取值了。如有一函数声明: floatarea(float r=6.5);指定r的默认值为6.5,如果在调用此函数时,确认r的值为6.5,则可以不必给出实参的值,如: area(); //相当于ar原创 2014-12-10 14:27:42 · 661 阅读 · 0 评论 -
C++类模板 template <class T>
类模板与函数模板的定义和使用类似,我们已经进行了介绍,如果您对函数模板也感兴趣,请查看:。有时,有两个或多个类,其功能是相同的,仅仅是数据类型不同,如下面语句声明了一个类:class Compare_int{public : Compare(int a,int b) { x=a; y=b; } int max( ) { retu转载 2015-02-04 17:38:38 · 22889 阅读 · 2 评论 -
C++ this指针详解
每个对象中的数据成员都分别占有存储空间,如果对同一个类定义了n个对象,则有n组同样大小的空间以存放n个对象中的数据成员。但是,不同对象都调用同一个函数代码段。 那么,当不同对象的成员函数引用数据成员时,怎么能保证引用的是所指定的对象的数据成员呢? 假如,对于例9.6程序中定义的Box类,定义了3个同类对象a,b,c。如果有a.volume( ) ,应该是引用对象a中的height,原创 2014-12-11 13:22:12 · 554 阅读 · 0 评论 -
C++静态成员(静态数据成员和静态成员函数)
一般情况下,如果有n个同类的对象,那么每一个对象都分别有自己的数据成员,不同对象的数据成员各自有值,互不相干。但是有时人们希望有某一个或几个数据成员为所有对象所共有,这样可以实现数据共享。 可以使用全局变量来达到共享数据的目的。例如在一个程序文件中有多个函数,每一个函数都可以改变全局变量的值,全局变量的值为各函数共享。但是用全局变量的安全性得不到保证,由于在各处都可以自由地修改全局变量的值原创 2014-12-12 10:14:34 · 2288 阅读 · 0 评论 -
C++ 类的 复制构造函数 和 赋值构造函数
class Demo{public: Demo() { } Demo(int j) { cout<<"Demo int: "<<j<<endl; this->i = j; } Demo(const Demo& d) { cout<<"复制构造函数"<<endl; }原创 2015-02-05 10:28:37 · 1118 阅读 · 0 评论 -
C++对象的常引用
我们知道,一个变量的引用就是变量的别名。实质上,变量名和引用名都指向同一段内存单元。 如果形参为变量的引用名,实参为变量名,则在调用函数进行虚实结合时,并不是为形参另外开辟一个存储空间(常称为建立实参的一个拷贝), 而是把实参变量的地址传给形参(引用名),这样引用名也指向实参变量。 对象的常引用。#include using namespace std;class Time原创 2014-12-12 10:15:28 · 1220 阅读 · 0 评论 -
vector的四种遍历方式
std::vector users;void printUser(User *u){ coutgetNickname()->getCString()<<"--"<<send;}// 方式一 cout<<"方式一"<<"\n"<<send; for (size_t i =0; i users.size(); i ++) { User *原创 2014-12-29 22:39:31 · 1992 阅读 · 0 评论 -
C++ 创建对象的两种方法 new和不new
http://blog.csdn.net/cscmaker/article/details/7019977http://www1390042640.blog.163.com/blog/static/2148331132013327118163/转载 2014-12-15 09:23:54 · 1108 阅读 · 0 评论 -
C++ 关键字typeid
转载网址:http://www.cppblog.com/smagle/archive/2010/05/14/115286.aspx在揭开typeid神秘面纱之前,我们先来了解一下RTTI(Run-Time Type Identification,运行时类型识别),它使程序能够获取由基指针或引用所指向的对象的实际派生类型,即允许“用指向基类的指针或引用来操作对象”的程序能够获取到“这些指转载 2015-01-19 15:36:01 · 557 阅读 · 0 评论 -
static_cast
static_cast ( expression )该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:①用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。进行上行转换(把派生类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态原创 2014-12-16 11:18:55 · 608 阅读 · 0 评论 -
C++ -- string分割
#include "cocos2d.h"#include #include using namespace std;std::vector split2(std::string str, std::string pattern){ std::string::size_type pos; std::vector result; //扩展字符串以方便操作 s原创 2015-02-04 13:56:32 · 824 阅读 · 0 评论 -
C++指向对象的常指针
将指针变量声明为const型,这样指针值始终保持为其初值,不能改变。如: Time t1(10,12,15),t2; //定义对象 Time * const ptr1; //const位置在指针变量名前面,规定ptr1的值是常值 ptr1=&t1; //ptr1指向对象t1,此后不能再改变指向 ptr1=&t2; //错误,ptr1不能改变指向原创 2014-12-11 13:46:14 · 1184 阅读 · 0 评论 -
Assert(断言实现机制剖析)
分类: 你不知道的C秘密2013-05-28 10:40 203人阅读 评论(1) 收藏 举报本文Doc文档已上传,下载地址断言(assert)的作用是用来判断程序运行的正确性,确保程序运行的行为与我们理解的一致。其调用形式为assert(logic expression),如果逻辑表达式为假,则调用abort()终止程序的运行。查看MSDN帮助文档,可以得到assert的转载 2013-05-29 14:28:15 · 2068 阅读 · 0 评论 -
C++语法
1.#include using namespace std;C++标准库中的类和函数是在命名空间std中声明的,因此程序中如果需要用到C++标准库(此时就需要用#include命令行),就需要用“using namespace std; ”作声明,表示要用到命名空间std中的内容。在初学C++时,对这两行可以不必深究,只需知道:如果程序有输入或输出时,必须使用“#in原创 2014-10-27 13:53:58 · 734 阅读 · 0 评论 -
C宏定义中的 # 和 ##
#在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量 通过替换后在其左右各加上一个双引号。比如下面代码中的宏:原创 2014-11-07 10:34:35 · 579 阅读 · 0 评论 -
dynamic_cast
dynamic_cast (expression)该运算符把expression转换成type-id类型的对象。Type-id 必须是类的指针、类的引用或者void*;如果 type-id 是类指针类型,那么expression也必须是一个指针,如果 type-id 是一个引用,那么 expression 也必须是一个引用。dynamic_cast运算符可以在执行期决原创 2014-12-16 11:17:01 · 595 阅读 · 0 评论 -
C++引用
什么是变量的引用对一个数据可以使用“引用(reference)”,这是C++对C的一个重要扩充,引用是一种新的变量类型,它的作用是为一个变量起一个别名。假如有一个变量a,想给它起一个别名b,可以这样写: inta; //定义a是整型变量 int&b=a; //声明b是a的引用以上语句声明了b是a的引用,即b是a的别名。经过这样的声明后,a或b的作用相同,都代原创 2014-12-10 17:37:04 · 672 阅读 · 0 评论 -
STL之vector容器详解
http://www.cnblogs.com/scandy-yuan/archive/2013/01/07/2849735.htmlhttp://www.360doc.com/content/13/0203/14/7802291_264021556.shtml转载 2014-12-16 17:28:09 · 635 阅读 · 0 评论 -
C++内存管理
在C++中,动态内存分配是一把双刃剑,一方面,直接访问内存地址提高了应用程序的性能,与使用内存的灵活性;另一方面,由于程序没有正确地分配与释放造成的例如野指针,重复释放,内存泄漏等问题又严重影响着应用程序的稳定性。人们尝试着不同的方案去避免这个问题,比较常用的如智能指针,自动垃圾回收等,这些要么影响了应用程序的性能,要么仍然需要依赖于开发者注意一些规则,要么给开发者带来了另外一些很丑陋转载 2015-01-27 11:49:46 · 674 阅读 · 0 评论 -
C++指向常对象的指针变量
为了更容易理解指向常对象的指针变量的概念和使用,首先了解指向常变量的指针变量,然后再进一步研究指向常对象的指针变量。下面定义了一个指向常变量的指针变量ptr: const char *ptr;注意const的位置在最左侧,它与类型名char紧连,表示指针变量ptr指向的char变量是常变量,不能通过ptr来改变其值的。 定义指向常变量的指针变量的一般形式为: const原创 2014-12-11 13:54:31 · 1397 阅读 · 0 评论 -
C--文件读写
1、“文件(file)”:所谓“文件”是指一组相关数据的有序集合。数据以文件的形式存放在外部介质(一般是磁盘、磁带、光盘等)上,在操作系统中是以文件为单位对数据进行管理的。以文件名作为访问文件的标识。2、C语言把文件看作一个字节序列,即由一连串的字节组成。根据文件中的数据组织形式,数据文件可分为ASCII码文件和二进制文件。ASCII码文件,又称为“文本文件”(text),其每一个转载 2015-02-02 10:43:13 · 1163 阅读 · 0 评论 -
关于C++变量的声明和定义
我们已经知道,一个函数一般由两部分组成:声明部分和执行语句。 声明部分的作用是对有关的标识符(如变量、函数、结构体、共用体等)的属性进行说明。对于函数,声明和定义的区别是明显的,前边已说明,函数的声明是函数的原型,而函数的定义是函数功能的确立。对函数的声明是可以放在声明部分中的,而函数的定义显然不在函数的声明部分范围内,它是一个文件中的独立模块。 对变量而言,声明与定义的关系稍微复原创 2014-12-10 17:09:50 · 701 阅读 · 0 评论 -
C++类的成员函数(在类外定义成员函数、inline成员函数)
在类外定义成员函数成员函数可以在类体中直接定义。也可以在类体中只写成员函数的声明,而在类的外面进行函数定义。如:class Student{public : void display( ); //公用成员函数原型声明private : int num; string name; char sex; //以上3行是私有数据成员};void Student::d原创 2014-12-11 09:47:00 · 6481 阅读 · 1 评论 -
C++常对象及其成员
C++虽然采取了不少有效的措施(如设private保护)以增加数据的安全性,但是有些数据却往往是共享的,人们可以在不同的场合通过不同的途径访问同一个数据对象。有时在无意之中的误操作会改变有关数据的状况,而这是人们所不希望出现的。 既要使数据能在一定范围内共享,又要保证它不被任意修改,这时可以使用const,即把有关的数据定义为常量。常对象在定义对象时指定对象为常对象。常对象必须要有原创 2014-12-11 13:38:38 · 2332 阅读 · 0 评论 -
C++ 引用对象成员的三种方式
在程序中经常需要访问对象中的成员。访问对象中的成员可以有3种方法:1.通过对象名和成员运算符访问对象中的成员;2.通过指向对象的指针访问对象中的成员;3.通过对象的引用变量访问对象中的成员。通过对象名和成员运算符访问对象中的成员例如在程序中可以写出以下语句: stud1.num=1001; //假设num已定义为公用的整型数据成员表示将整数1001赋给对象stud原创 2014-12-11 10:13:49 · 4858 阅读 · 0 评论 -
C++对象指针
指向对象的指针在建立对象时,编译系统会为每一个对象分配一定的存储空间,以存放其成员。对象空间的起始地址就是对象的指针。可以定义一个指针变量,用来存放对象的指针。 如果有一个类:class Time{ public : int hour; int minute; int sec; void get_time( );};void Time::g原创 2014-12-11 11:57:14 · 647 阅读 · 0 评论 -
C++内置函数(内嵌函数,内联函数)
调用函数时需要一定的时间和空间的开销。 C++提供一种提高效率的方法,即在编译时将所调用函数的代码直接嵌入到主调函数中,而不是将流程转出去。这种嵌入到主调函数中的函数称为内置函数(inline function),又称内嵌函数。在有些书中把它译成内联函数。指定内置函数的方法很简单,只需在函数首行的左端加一个关键字inline即可。#include using namespace std;i原创 2014-12-10 11:56:32 · 3152 阅读 · 0 评论 -
如何解读返回函数指针的函数声明
准确地讲,本文所涉及的内容是C++中较难理解的,本文的目的不是在于将它们解释清楚,因为这需要你循序渐进地做很多练习才可以。看下面一个例子:int (*func(bool real))(int, int)你觉得它的返回值是什么?这里就涉及到了如何理解指向函数的指针的问题了。一些来自C++教材的建议是从里向外解读这个表达式,这里所谓的里面就是func(bool real),那么剩下转载 2015-03-04 21:06:45 · 785 阅读 · 0 评论