文章分类 -  c++

函数模板与类模板的偏特化和全特化
摘要:全特化:完全限定类型偏特化:部分限定类型类模板两种特化都有template class Test { public: Test(T1 i,T2 j):a(i),b(j){cout class Test { public: Test(int i, char j):a(i... 阅读全文

posted @ 2015-11-26 08:47 菜鸟基地 阅读(518) 评论(0) 推荐(0)

异常安全的函数
摘要:异常安全的函数必须满足两个条件1)不泄露任何资源:当异常发生中断函数时,不会内存泄露,以及其他资源泄露(可以使用资源管理类处理泄露问题)2)不允许数据破坏。异常安全强烈保证函数可以使用copy and swap技术:对需要修改的对象做一个副本,然后在副本上做修改,修改后调用swap函数。缺点是为每个... 阅读全文

posted @ 2015-11-26 00:13 菜鸟基地 阅读(161) 评论(0) 推荐(0)

PIMPL(private pointer)桥接模式的一种
摘要:PIMPL是前向声明的利用,具体含义是利用类的的私有数据类指针隐藏主类的实现细节。缺点:1)增加指针,暂用过多的内存2)需要较多的指针跳转优点1:1)降低模块的耦合。因为隐藏了类的实现,被隐藏的类相当于原类不可见,对隐藏的类进行修改,不需要重新编译原类。2)降低编译依赖,提高编译速度。指针的大小为(... 阅读全文

posted @ 2015-11-25 10:04 菜鸟基地 阅读(353) 评论(0) 推荐(0)

赋值构造函数以及赋值构造函数
摘要:当对于类base编造自己的构造函数时,如果存在派生类drive,那么在派生类的构造函数以及赋值构造函数中,需要显示调用基类的相关构造函数,并且传递drive对象。如果不显示调用base的相关构造函数,编译器会调用base的默认赋值构造函数和赋值构造函数(没有参数的,保证了基类的相关变量不会改变)cl... 阅读全文

posted @ 2015-11-22 19:38 菜鸟基地 阅读(258) 评论(0) 推荐(0)

关于operator=中自我复制以及异常安全的处理
摘要:赋值构造函数主要遇到问题有有自我赋值的可能,因为赋值过程中可能要删除原来对象存储的指针数据,所以需要先检查是否是自我赋值,然后再删除;但是再赋值过程中可能出现异常,比如new分配新的空间过程class Widget{ public: Widget& operator=(const Wid... 阅读全文

posted @ 2015-11-22 19:04 菜鸟基地 阅读(166) 评论(0) 推荐(0)

关于类中的辅助函数设置为static函数
摘要:类成员函数为static,函数中使用的类数据成员必须是static类型,这样防止了使用类中尚未定义的成员变量。在继承体系中,对基类的构造函数传递参数值,往往使用辅助喊出传递比较方便易读。辅助函数一般声明为pirvate以及staticclass Transaction{public: expl... 阅读全文

posted @ 2015-11-22 16:16 菜鸟基地 阅读(172) 评论(0) 推荐(0)

防止对象被复制以及赋值
摘要:把复制构造函数以及赋值构造函数声明为private,并且不实现只是声明,可以防止复制以及赋值,不实现是防止友元函数以及成员函数调用。对于不可复制以及赋值的对象,把错误可以转到编译期而不是链接期class Uncopy{ private: Uncopy(Uncopy&); ... 阅读全文

posted @ 2015-11-22 10:55 菜鸟基地 阅读(301) 评论(0) 推荐(0)

singleton 单例程模式
摘要:实际运用:在不同编译实例中存在non-local static 对象,对象的实例化顺序无法确定class FileSystem{ public: };extern FileSystem tfs;class Directory{ public: Direct... 阅读全文

posted @ 2015-11-22 10:23 菜鸟基地 阅读(148) 评论(0) 推荐(0)

STL简单算法
摘要:1.查找算法find(beg,end,elem)find_if()find_first_of(beg1,end1,beg2,end2)2写容器算法fill(beg,end,elem)fill_n(beg,n,elem)//不能对空容器写,如果需要对空容器写可以使用容器迭代器例如back_insert... 阅读全文

posted @ 2015-11-19 17:42 菜鸟基地 阅读(88) 评论(0) 推荐(0)

STL算法中的写入操作
摘要:对于写入算法,比如fill_n,对容器做操作时,不能对空容器做写入操作比如vector vec;fill_n(vec.begin(),10,0);//错误操作,因为vec为空,写入的元素存到未知空间。 阅读全文

posted @ 2015-11-19 15:05 菜鸟基地 阅读(93) 评论(0) 推荐(0)

关于string类型的加法操作
摘要:string类型加法为连接字符串生成新的string类型。但是加法操作的左右操作数必须有一个是string类型,不然会产生编译错误string str2="myword";string str1=str2+"hellow";string str3=str1+"bill"+str2;string st... 阅读全文

posted @ 2015-11-19 14:52 菜鸟基地 阅读(2794) 评论(0) 推荐(0)

extern "c" 的用法
摘要:extern "C"主要是用于c++中代码应用c的代码可以有以下几种情况:1 在C的头文件中使用#ifdef __cpluscplus extern "C" { #endif //some code #ifdef __cplusplus } #endif 这样,C++代码中可以... 阅读全文

posted @ 2015-07-27 16:49 菜鸟基地 阅读(402) 评论(0) 推荐(0)

命名空间以及作用域
摘要:1 重载和命名空间: 1)候选函数与命名空间的关系,有一个或多个类类型形参的函数的名字查找包括定义每个形参类型的命名空间,所以对候选函数集的查找柏阔定义行程呢累得每个命名空间。 2)使用using声明函数的时候只能声明函数名,不能声明某个特定函数,比如using NS:print;而不能声明... 阅读全文

posted @ 2015-07-27 10:15 菜鸟基地 阅读(110) 评论(0) 推荐(0)

虚函数表,以及虚函数指针
摘要:1)每个有虚函数的类都有自己的虚函数表,每个包含虚函数的类对象都有虚函数表指针。2)对于多重继承,如果多个基类都有虚函数,则继承类中包含多个基类虚函数表,子类的虚函数地址放在声明的第一个基类虚函数表后面。3)计算类对象的内存大小的时候,需要计算有多少个虚函数指针。一般继承(无虚函数覆盖)假设有如下所... 阅读全文

posted @ 2015-06-08 16:41 菜鸟基地 阅读(2901) 评论(1) 推荐(3)

关于类或者结构体中的内存布局
摘要:结构体或者类的内存布局一般一局两个规则1)成员变量从内存地址0开始,每个变量都认为是按照自己的类型大小来分配内存,所以每个变量的起始地址都应该是自身类型的整数倍2)这个内存大小应该是最大的成员变量类型的整数倍特殊情况:1:如果类没有任何成员变量则大小为12:类的static成员变量不在类对象内,他们... 阅读全文

posted @ 2015-06-08 15:24 菜鸟基地 阅读(207) 评论(0) 推荐(0)

指针函数,函数指针,数组指针,指针数组
摘要:指针函数:int * fuc(int a,int b)函数指针:int (*p)(int a ,int b)指针数组:int * p[10]素组指针:int(*p)[10],这个可用于多维数组的 阅读全文

posted @ 2015-06-07 14:57 菜鸟基地 阅读(77) 评论(0) 推荐(0)

派生相关
摘要:1)基类成员的protect,主要是方便派生类调用该成员。但是派生类中的成员函数只能调用本对象的protect成员或者通过派生类对象调用,不能通过基类对象调用该成员假定基类Item_base一个一个protect成员price,派生类函数Bulk_item中成员函数const Bulk_item& ... 阅读全文

posted @ 2015-06-07 10:27 菜鸟基地 阅读(115) 评论(0) 推荐(0)

继承,封装,多态
摘要:C++三个最基本面向对象的的特征封装:主要是对数据以及操作封装为一个整体,提供统一的接口操作,隐藏细节实现。防止破坏数据以及方便代码重用。继承:即从一般都特殊,保留现有的功能的基础上对原有类进行功能和属性的扩展多态:具体分为两种 1)重载:主要是函数名相同而参数个数,类型不同进行重载 2... 阅读全文

posted @ 2015-06-06 16:32 菜鸟基地 阅读(426) 评论(0) 推荐(0)

构造函数相关
摘要:1)默认构造函数如果类中没有定义自己的构造函数,编译器为构造一个默认构造函数,如果自定义了任何一个构造函数,编译器都不会再构造默认构造函数。默认构造函数分为两种:一种是A(),不带任何参数的默认构造函数。第二种是A(a=1,b=2)带了默认实参的默认构造函数。2)关于复制构造函数对象的初始化分为直接... 阅读全文

posted @ 2015-06-05 20:43 菜鸟基地 阅读(117) 评论(0) 推荐(0)

static的使用,以及全局变量和局部变量
摘要:static主要有2个用法:1)用于修饰函数定义的变量或者类成员变量,称为静态变量。静态变量存储在静态存储区,全局变量也存在与静态存储区,二者存储位置相同,但是作用范围不同。前者只能声明该变量的头文件使用,后者包含该头文件的源文件都可以使用。 外部变量(全局变量)虽属于静态存储方式,但不一定是静态变... 阅读全文

posted @ 2014-05-08 14:28 菜鸟基地 阅读(318) 评论(0) 推荐(0)

导航