随笔分类 -  探索C++

摘要:参考《C++ Templates》一书。关于函数模板和类模板,模板参数并不局限于类型,普通值也可以作为模板参数。当要使用基于值的模板时,必须显式地指定这些值,才能够对模板进行实例化,并获得最终代码。详细解释可参考一下代码:stack4.hpp#ifndef _STACK4_H_#define _STACK4_H_#include /*** @class:栈的类模板* @param: typename T: 模板参数,栈存储元素的类型* @param:int MAXSIZE: 栈元素的最大个数* note:模板参数并不局限于类型,普通值也可以作为模板参数*/templatecla... 阅读全文
posted @ 2013-06-26 22:10 阳光守望者 阅读(4298) 评论(0) 推荐(0) 编辑
摘要:最近买了《C++ Templates》来看,书最开始部分阐述了关于此书的一些编程风格。本人感觉非常好,有些地方之前一直容易搞混,这里却讲述的很清楚。例如:关于下面几种风格的代码:void foo(const int &x);void foo(const int& x);void foo(int const &x);void foo(int const& x);对于上面四种用法,差别虽然不是很大,但是我们更倾向于使用int const,而不是const int。主要原因:1、关于“恒定不变部分”指的是const限定符前面的部分。记住这句话,相信诸如此类:int* 阅读全文
posted @ 2013-06-26 20:30 阳光守望者 阅读(1087) 评论(0) 推荐(0) 编辑
摘要:关于C++对象内存布局的资料和书籍也有很多,比如陈皓老师的博客:1、C++对象的内存布局(上)2、C++对象的内存布局(下)白杨:RTTI、虚函数和虚基类的实现方式、开销分析及使用指导左手为你画猜:C++类对象内存模型与成员函数调用分析(上、中、下)关于讲解C++对象内存模型最好的书应该是侯捷老师翻译的《深度探索C++对象内存模型》。这两天在看其他书籍时,对C++中虚拟继承的实现机制不太理解,于是又重新翻回《深度探索C++对象内存模型》一书,并结合C++对象的内存布局(下)一文。在Visual Studio 2010下用“cl”编译器进行测试,查看虚拟多重继承下的C++对象内存模型。总结如下: 阅读全文
posted @ 2013-05-17 18:10 阳光守望者 阅读(2887) 评论(1) 推荐(1) 编辑
摘要:OpenCV(计算机视觉库)2.4.4版本已经发布了,OpenCV发展到现在,由最初的C接口变成现在的C++接口,让开发者写程序越来越简单,接口越来越合理,也不用担心内存释放问题。但要理解内部的一些实现机制,还真要费点功夫,这对开发者的C++基础要求越来越高。本文就是笔者在做项目过程中的一点感悟,由C++泛型句柄类思考OpenCV的Ptr模板类的实现。1、C++泛型句柄类我们知道在包含指针成员的类中,需要特别注意类的复制控制,因为复制指针时只复制指针中的地址,而不会复制指针指向的对象。这将导致当两个指针同时指向同一对象时,很可能一个指针删除了一对象,另一指针的用户还认为基础对象仍然存在,此时就 阅读全文
posted @ 2013-03-24 22:44 阳光守望者 阅读(9816) 评论(5) 推荐(6) 编辑
摘要:1、将指针封装成一个智能指针类,当其他类需要使用指针时,可用智能指针类代替,将智能指针类对象作为类成员;2、智能指针类作为辅助类,包含了引用计数,当主类的对象进行复制、赋值时,智能指针类中引用计数会相应增加或减少,若计数为0时, 则对对象进行析构;计数不为0时,则不对智能指针类对象进行析构(智能指针类需要动态创建),这样,可以防止出现悬垂指针。下面的代码有助于加强对智能指针的理解。 1 #include <iostream> 2 3 4 //定义仅由HasPtr类使用的U_Ptr类,用于封转使用计数和相关指针 5 class U_Ptr 6 { 7 friend cl... 阅读全文
posted @ 2013-03-01 20:35 阳光守望者 阅读(2145) 评论(0) 推荐(0) 编辑
摘要:1、字符串转换成整型数C语言库函数:atoi 实现了此功能。int atoi(const char *nptr);函数说明: 参数nptr字符串,如果第一个非空格字符存在或者不是数字也不是正负号则返回零,否则开始做类型转换,之后检测到非数字(包括结束符 \0) 字符时停止转换,返回整型数。相同功能实现代码如下: 1 /** 2 * 功能:str转int 3 * 注意: 4 * 1、字符串是否为空; 5 * 2、非法输入如何处理; 6 * 3、溢出判断; 7 * 4、输入字符串只有“+”或“-”号时; 8 * 5、如何转换:从字符串中输入一个个字符进行处... 阅读全文
posted @ 2013-02-21 19:50 阳光守望者 阅读(15013) 评论(0) 推荐(0) 编辑
摘要:通过一个实例稍微深入理解C++复制控制过程,参考资料《C++ primer》,介绍点基本知识:1、在C++中类通过特殊的成员函数:复制构造函数、赋值操作符和析构函数来控制复制、赋值和撤销该类的对象时会发生什么。2、复制构造函数(copy constructor)是一种特殊的构造函数,具有单个形参,该形参(常用const)是对该类类型的引用;当定义一个新对象并用一个同类型的对象对它进行初始化时,将显示使用复制构造函数;当将该类的对象传递给函数或从函数返回该类型的对象时,将隐式使用复制构造函数。3、复制构造函数可用于:根据另一个同类型的对象显示或隐式初始化一个对象;复制一个对象,将它作为实参传给一 阅读全文
posted @ 2012-11-02 10:37 阳光守望者 阅读(2503) 评论(0) 推荐(1) 编辑
摘要:总结归纳一点C++类的知识,参考《C++ primer》,温故而知新~构造函数的初始化列表: 没有默认构造函数的类类型的成员,以及const或引用类型的成员,不管是哪种类型,都必须在构造函数初始化列表中进行初始化; 成员初始化的次序是定义成员的次序,不是初始化列表的顺序;显示指定inline函数,可在类定义体内部指定一个成员为inline,或者在类定义体外部的函数定义上指定为inline;在声明和定义处指定inline均为合法。只有当类定义体完成后才能定义类,因此类不能具有自身类型的数据成员。然而,只要类名一出现就可以认为该类已声明。因此,类的数据成员可以是指向自身类型的指针或引用。如:cl. 阅读全文
posted @ 2012-11-01 21:55 阳光守望者 阅读(429) 评论(0) 推荐(0) 编辑