摘要: 在C++中,调用拷贝构造函数有三种情况:1.一个对象作为函数参数,以值传递的方式传入函数体.2.一个对象作为函数返回值,以值传递的方式从函数返回.3.一个对象用于给另外一个对象进行初始化(复制初始化).拷贝构造函数必须以引用的形式传递(参数为引用值).其原因如下:当一个对象以传递值的方式传一个函数的时候,拷贝构造函数自动的调用来生成函数中的对象.这样会导致无限循环地调用拷贝构造函数,直至栈溢出.以前,一直有个误解,以为以同类型的对象调用"="时,就会调用赋值符.参看以下的例子: 1 class CTest { 2 public: 3 CTest(); 4 CTest(con 阅读全文
posted @ 2012-07-17 11:46 一点心青 阅读(5580) 评论(2) 推荐(1) 编辑
摘要: 有时候,进行类体设计时,会发现某个类的对象是独一无二的,没有完全相同的对象,也就是对该类对象做副本没有任何意义.因此,需要限制编译器自动生动的拷贝构造函数和赋值构造函数.一般参用下面的宏定义的方式进行限制,代码如下:// A macro to disallow the copy constructor and operator= functions // This should be used in the priavte:declarations for a class#define DISALLOW_COPY_AND_ASSIGN(TypeName) \ TypeName(co... 阅读全文
posted @ 2012-07-16 19:58 一点心青 阅读(13580) 评论(0) 推荐(2) 编辑
摘要: 程序开发时,经常遇到根据变量获取其类型信息的需求.例如,某一个函数针对不同的类型参取了不同的优化策略,因而要获取相应的类型信息调用对应的函数.template //将迭代器向前移动d单位void advance(IterT& iter,DistT d); //如果d void advance(IterT& iter,DistT d){ if(iter is a random access iterator) { iter += d; //针对random access 迭代器使用迭代器算术运算 } else{ //针对其... 阅读全文
posted @ 2012-07-16 10:10 一点心青 阅读(1624) 评论(0) 推荐(0) 编辑
摘要: 利用public继承基类,可以将继承的结果分为两类:函数接口继承和函数实现继承. 声明一个纯函数的目的是为了让派生类只继承函数接口.纯虚函数有两个突出的特性: 它们必须被任何"继承了它们"的具体类重新声明,而且它们在抽象类中通常没有定义. 声明非纯虚函数的目的,是让派生类继承该函数的接口和缺省实现. 声明非虚函数的目的,是为了令派生类继承函数的接口及一份强制性实现. 对class进行设计时,声明成员函数,要谨慎选择,不同类型的声明意味根本意义不相同的事情. 下面是经验不足的设计者最常犯的错误: 1.将所有函数声明为非虚函数,相当派生类继承了函数接口和强制性实现,让派生类没有 阅读全文
posted @ 2012-07-16 09:23 一点心青 阅读(1939) 评论(0) 推荐(0) 编辑
摘要: 假设你正在写一个视频游戏软件,游戏里有各种各样的人物,每个人物都有健康状态,而且不同的人物可能以不同的方式计算他们的健康指数.该如何设计游戏里的人物,主要如何提供一个返回人物健康指数的接口. 方法一,基于虚函数的方法. 在人物角色的基类增加一个成员函数heathValue,返回一个整数,表示人物的健康程度,并将声明为virtual.1 class GameCharacter {2 public:3 virtual int healthValue() const;4 ...5 }; heathValue声明为虚函数,因而派生类可以重新定义它,从而获得达到不同... 阅读全文
posted @ 2012-07-12 19:07 一点心青 阅读(1005) 评论(0) 推荐(0) 编辑
摘要: >其中的与众不同主要强调心理学与大众接受的媒体宣传和自身自以为的心理学的不同.从科学角度,逐步阐述心理学的科学性,并在书中以案例的方式解释人们对心理学产生误解的原因.其主要目的,让人们更清楚的认识心理学,从而不被媒体宣传的心理学所误导,不被自身内心的心理学所误导,正确地使用心理学的知识改善自己的生活. 心理学是一门科学,其研究方法遵循其他自然科学的一般研究方法,但其研究对象主要是涉及人类行为,而且许多研究都是基础理论研究,其结果一般是以概率统计的方式展现.因而一般的大众对其研究成果,并没有明确的认识,他们只希望给自己的行为以及自己遇到的行为一种合理的解释.这种鸿沟就导致,一些图利的人们利 阅读全文
posted @ 2012-07-12 09:25 一点心青 阅读(1733) 评论(0) 推荐(0) 编辑
摘要: >以心理学,认知科学和神经科学为主要角度,对学习心理学的意义,日常生活中人们如何进行思考,不同的思维方式会带来怎样的价值,何种学习方法才是有效的,以及在数学和计算机科学学习过程中如何分析问题并解决问题做了详细的阐述,强调人们需要主动训练自身的反思能力并掌握有效的思考方法. (PS:上述总结性文字来自网上) 下面主要谈谈自己读完之后的感受: 1.人脑的思维和活动,可以抽象为冯诺依曼体系结构(个人感觉). 冯诺依曼体系结构主要特点是计算机按照人预先存储在存储器的指令和代码来解决各种计算问题,其智慧仍然在于存储指令的人,计算机自身还不具备智慧. 人脑的记忆区域存储着各种指令和代码,相当... 阅读全文
posted @ 2012-07-02 18:32 一点心青 阅读(352) 评论(0) 推荐(0) 编辑
摘要: 主要介绍利用library injection方法检测内存泄露.library injection就是重载库里面对应的函数,让程序调用library里的函数,而不是调用库函数里的函数.内存泄露主要是重载malloc和free函数,重载后,程序中调用malloc和free分配和释放内存时,就是利用自己编写的malloc和free函数.1.library injection如何完成?在linux环境下,可以利用LD_PRELOAD来指定编译好的重载库.具体的方法如下:1) g++ -shared -fPIC leakfinder.cpp -o leakfinder.so -ldl //编译得到重载 阅读全文
posted @ 2012-07-02 11:05 一点心青 阅读(2127) 评论(0) 推荐(1) 编辑
摘要: 最近在学习,利用CUDA加速图像处理方面知识.下面主要介绍codeproject上的一个项目例子.利用cuda进行图像滤波处理.网址:http://www.codeproject.com/Articles/206036/Image-Filters-using-CPU-and-GPU其处理流程如下:其中,也可以从视频文件中读取数据,进行处理.主要类图如下所示:ISingleImageFilter是抽象类,提供接口,SingleImageFilter实现抽象类的基类,增加一些属性成员变量.利用虚函数实现多态,通过指向基类的指针调用不同子类的函数实现.思考点:1).其类体的设计,以及类之间的继承关系 阅读全文
posted @ 2012-06-08 10:45 一点心青 阅读(2060) 评论(0) 推荐(1) 编辑
摘要: 单源点最短路径问题 dijkstra算法伪代码算法思路如下:1).标记设定算法,将点集合分为S,U,集合S中是已标记的点集合,集合U中是未标记的点集合.2).初始状态,集合S中包含源点v0,集合U为V-v0.每次从U中选取源点到该点路径最小值加入集合S中,加入集合S后,更新v0到集合U中各点的路径值,并保存相应的路径信息.3).循环执行步骤2),直到集合U为空则算法结束.算法时间复杂度为O(n2),主要在求未标记的集合U中最小路径的点,需要遍历集合U中的元素.基于Dijkstra的改进方法,都是集中于此处,如何更快地求出未标记集合中的最小路径的点.改进方法,利用二叉堆或者斐波那契构建优先队列. 阅读全文
posted @ 2012-06-06 22:58 一点心青 阅读(997) 评论(0) 推荐(0) 编辑