自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

午后斜阳

无路可走便是最好的路!

  • 博客(33)
  • 资源 (2)
  • 问答 (1)
  • 收藏
  • 关注

转载 图像处理顶级期刊

转自:http://blog.sina.com.cn/s/blog_7dc8863f0100ref1.htmlIEEE Transaction on image processingIEEE Transaction on pattern analysis and machine intelligenceIEEE Transaction on medical imagingIEEE Transa

2015-09-24 17:31:00 2721

转载 了解typename的双重意义(Effective C++_42)

注:转自http://blog.chinaunix.net/uid-26548237-id-3871044.html仅作学习用途当我们声明template类型参数,class和typename的意义完全相同。在C++的角度来看,声明template参数时,不论使用关键字class或typename,意义完全相同。template<class T> class Widget; //使用"clas

2015-09-15 17:57:14 355

转载 了解隐式接口和编译期的多态(Effective C++_41)

注:转自http://www.cnblogs.com/jerry19880126/p/3620004.html仅作学习用途一、隐式接口隐式接口是相对于函数签名所代码的显式接口而言的。当我们看到一个函数签名(即函数声明),比如说: string GetNameByStudentID(int StudentID); 我们就知道这个函数有一个整型的形参,返回值是string。但隐式接口是由有效表达式组成的

2015-09-15 17:44:02 345

转载 绝不要重新定义继承而来的缺省参数值(Effective C++_37)

一、考虑以下代码 代码来源:http://blog.csdn.net/cadcisdhht/article/details/6233170class A{public: virtual void Fun(int number = 10) { std::cout << "A::Fun with number " << number; }};class B:pub

2015-09-15 15:37:47 331

转载 策略模式

一、基本原理 策略模式和 Template 模式要解决的问题是相同(类似)的,都是为了给业务逻辑(算法)具体实现和抽象接口之间的解耦。策略模式将逻辑(算法)封装到一个类(Context)里面,通过组合的方式将具体算法的实现在组合对象中实现,再通过委托的方式将抽象接口的实现委托给组合对象实现。二、基本模式 关键就是将逻辑抽象接口(DoAction)封装到一个类中(Context),再通过委托的方式

2015-09-15 14:59:59 336

原创 绝对不要重新定义继承而来的non-virtual函数(Effective C++_36)

一、对于非虚函数同一个对象调用同一个函数,可能产生了不同的行为class B{public: void mf(){ cout<<"B"<<endl; }};class D:public B{};int main(){ D x; B* pb=&x;//获得一个B类型的指针指向x pb->mf(); D* pD=&x;//获得一个D类型

2015-09-15 10:41:41 752

原创 指针概念

指针小知识回顾 int i, j; //定义整型变量i,j int *pointer_1, *pointer_2; //定义指针变量第2行开头的int是指:所定义的指针变量是指向整型数据的指针变量。也就是说,指针变量pointer_1和pointer_2只能用来指向整型数据(例如i和j),而不能指向浮点型变量a和b。这个int

2015-09-15 10:15:11 332

原创 考虑virtual函数以外的其他选择(Effective C++_35)

一、NVI手法实现模版方法模式(1)NVI手法的基本思想该设计是令客户通过public non-virtual成员函数间接调用private virtual函数,称为non-virtual interface(NVI)手法,它是模板方法设计模式的一个独特表示;相当对virtual函数进行一层的包装,可以称为是virtual函数的外覆器(warpper).注:模板方法设计模式,主要思想是基类提供抽象接

2015-09-15 09:22:35 380

原创 模板方法模式(Template Method)

模板方法模式基本思想对于某一个具体事务在不同的对象中有不同的细节实现,但是逻辑(算法)的框架(或通用的应用算法)是相同的。

2015-09-14 20:32:56 424

转载 区分接口继承和实现继承(Effective C++_34)

一、所谓接口继承,就是派生类只继承函数的接口,也就是声明;而实现继承,就是派生类同时继承函数的接口和实现。二、虚函数、纯虚函数、非虚函数。(1)虚函数: 虚函数是指一个类中你希望重载的成员函数,当你用一个基类指针或引用指向一个继承类对象的时候,你调用一个虚函数,实际调用的是继承类的版本。——MSDN 虚函数用来表现基类和派生类的成员函数之间的一种关系. 虚函数的定义在基类中进行,在需要定义为

2015-09-14 19:40:42 426

原创 避免遮掩继承而来的名称(Effective C++_33)

一、名字覆盖规则名称的遮掩可以分成变量的遮掩与函数的遮掩两类;查找规则:一般先查找局部作用域,然后再查找外围作用域;对于含有继承关系的类,先查找局部作用域,再查找派生类覆盖的作用域,然后再查找基类覆盖的作用域,如果都没有找到,最后查找全局作用域;二、基类成员函数被覆盖 (1)看一段代码:#include <iostream>using namespace std;class Base{pri

2015-09-14 19:25:35 443

原创 Harris角点检测

一、Harris检测原理 参见另外一篇博,是用matlab实现的客:http://blog.csdn.net/zhangchen1003/article/details/48162687二、opencv代码实现#include<opencv2\core\core.hpp>#include<opencv2\imgproc\imgproc.hpp>#include<opencv2\highgui\

2015-09-14 13:21:09 382

原创 确定public继承出来的是Is_a关系(Effective C++_32)

(1)谨记:public继承意味着“is_a”的关系,假如class D:public B,那么可以说每一个D的对象同时也是每一个B的对象,但是反之不成立,比如,学生是人,但并非所有人都是学生 (2)public继承主张,能够适用于基类身上的每一件事情也一定适用于派生类身上,因为每一个派生类对象也都是一个基类对象 (3)注意区分is_a,has_a(见条款38),i_implemented-in

2015-09-08 17:33:02 475

转载 了解inline函数(Effective_C++(30))

1.类似于C中的#define  在C++中,提供了inline函数来代替C中的宏定义。(通常可以使用const来代替单纯变量的宏定义,它可以提供类型检查。对于形似函数的宏,最好改用inline函数来替换宏定义。)  编译器最优化机制通常被设计用来浓缩那些“不含函数调用“的代码,所以当你inline某个函数时,或许编译器就因此有能力对它执行语境相关最优化。2.效率问题  inline函数同#defi

2015-09-08 14:55:14 301

原创 尽可能延后变量定义式的出现时间(Effective_C++(26))

一、定义一个对象,往往意味着必须承担构造成本,离开作用域,必须承担析构成本。即使这个对象没有使用过。二、你可能会认为,不会定义一个不使用的对象。考虑下面的情况下,定义一个对象,执行其他操作,然后使用对象,假如在执行其他操作的时候,出现异常,就导致构造和析构了一个没有使用的对象: std::string encryptPassword(const std::string& password){

2015-09-08 13:59:18 289

原创 若所有参数需类型转换,采用non-member函数(Effective_C++(24))

一、考虑下面问题设计一个class表示有理数,它应该支持隐式类型转换,虽然我们说支持隐式类型转换通常是个不好的主意。这是为了我们设计的类可以和内置类型进行运算。例如和整型:class Rational { pbulic: Rational(int numerator = 0, int denominator = 1); //注意这个构造函数不为explicit int numerator(

2015-09-08 13:29:58 379

原创 将成员变量声明为private和用非成员、非友友提高封装性(Effective C++_22、23))

一、将成员变量声明为private (条款22) ■ 切记将成员变量声明为private.这可赋予客户访问数据的一致性,可细微划分访问控制,允诺约束条件获得保证, 并提供class作者以充分的实现弹性. ■ protected并不比public更具封装性.二、宁以非成员、非友元函数替换成员函数(条款23) (1)之所以这样做,是为了减少能够访问private成员的代码的数量,以此

2015-09-08 13:10:06 1021

原创 为多态基类声明一个虚析构函数(Effective C++_7)

一、声明虚析构函数的原因(1)先考虑没有声明虚析构函数的代码:#include <iostream>using namespace std;class Base{public: Base(int x,int y):a(x),b(y){ cout<<"Base Construction"<<endl; } virtual void display()=0;

2015-09-07 18:00:11 540 1

原创 复制对象时勿忘其每一个成分(Effective C++_12)

一、对于继承的复制控制 (1)一般不含继承时,常见赋值和复制构造函数如下:class Base{public: Base(int x,int y):a(x),b(y){ } Base(const Base& rhs):a(rhs.a),b(rhs.b){ }//复制构造 Base& operator=(const Base& rhs){ a

2015-09-07 17:26:19 477

原创 理解虚函数表

一、虚函数表作用 指向派生类对象的基类指针(或基类引用)能够调用正确的虚函数,这种动态绑定机制使得对象具有了“神奇的”选择能力和自我决定能力,这是通过虚函数表(virtualfunctiontable,vftable)实现的。二、虚函数工作机制 (1)编译器会为含有虚函数的类创建一个虚函数表,并在该表中记录各虚函数的地址。 (2)在生成该类的对象时,通常会在该对象的首地址放置一

2015-09-06 20:48:43 1029

转载 虚函数和抽象类基础知识

一、虚函数作用虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。当把基类的某个成员函数声明为虚函数后,允许在其派生类中对该函数重新定义,赋予它新的功能,并且可以通过指向基类的指针指向同一类族中不同类的对象,从而调用其中的同名函数二、虚函数的使用方法是:(1)在基类用virtual声明成员函数为虚函数。 这样就可以在派生类中重新定义此函数

2015-09-06 18:04:31 853

转载 派生类构造函数和多重继承的二义性问题

一、派生类构造函数的写法(1)冒号前面是派生类构造函数的头部,这和我们以前介绍的构造函数的形式一样,但它的形参列表包括了初始化基类和派生类的成员变量所需的数据;冒号后面是对基类构造函数的调用,这和普通构造函数的参数初始化表非常类似。 (2)需要注意的是:冒号后面是对基类构造函数的调用,而不是声明,所以括号里的参数是实参二、基类构造函数调用规则(1)通过派生类创建对象时必须要调用基类的构造函数,这是

2015-09-06 11:55:55 1541

原创 继承后基类、派生类的访问属性

一、单继承与多继承(1)一个派生类只从一个基类派生,这称为单继承(single inheritance);(2)一个派生类有两个或多个基类的称为多重继承(multiple inheritance);(注意:区分多重继承和多级派生的概念)二、声明派生类的方式(1)声明派生类的一般形式为: class 派生类名:[继承方式] 基类名 { 派生类新增加的成员

2015-09-05 22:28:08 4824

原创 考虑用赋值运算符(op=)取代其单独形式(op)(More Effective C++_22(效率))

大多数程序员认为假如他们能这样写代码:   x = x + y; x = x - y;  那他们也能这样写: x += y; x -= y;  假如x和y是用户定义的类型(user-defined type),就不能确保这样。就C++来说,operator+、operator=和operator+=之间没有任何关系,因此假如你想让这三个operator同时存在并具有你所期望的关系,就必须自己实现它们

2015-09-05 17:10:32 571

转载 利用重载避免隐式类型转换(More Effective C++_21(效率))

class UPInt { // unlimited precision public: // integers 类 UPInt(); UPInt(int value); ...};//有关为什么返回值是const的解释,参见Effective C++ 条款21const UPInt operator+(const UPInt& lhs, const UPInt& rhs);UPInt

2015-09-05 16:37:28 439

原创 返回值优化(More Effective C++_20(效率))

我们知道一个返回对象的函数很难有很高的效率,因为传值会调用对象内的构造函数和析构函数;而一些函数必须要返回对象,这是难以避免的,所以,我们关心的重点,并不是去消除返回对象,而是怎么减少返回对象所用的开销上来; 幸好,编译器支持返回值优化,能让编译器消除临时对象的开销;下面我们考虑简单实现一个有理数的代码:#include <iostream>#include<opencv2\core\core.

2015-09-05 16:26:47 387

原创 理解临时对象的来源(More Effective C++_19(效率))

本文探讨临时对象的来源,怎么避免临时对象,本文并没有深入涉及,在效率中的其他小节,有具体方法去解决一、 区别临时对象和局部对象template<class T>void swap(T& object1, T& object2){ T temp = object1; object1 = object2; object2 = temp;}通常把temp叫做临时变量。不过就C++而言,temp根本不

2015-09-05 14:51:18 425

原创 若不想使用编译器默认生成的函数,就该拒绝(Effective C++_6)

从条款5,我们知道编译器为我们默认生成copy构造函数、copy assignment函数,且是public、inline; 但是,有时我们不想有赋值,和复制构造产生,那我们应该怎么办?解决知道是:将copy构造函数,赋值操作声明为private;但是,对于成员函数和友元,我们还是可以访问private,所以更安全的做法是将其声明为private,且不去实现它,只有声明,没有定义,代码如下:clas

2015-09-05 10:59:46 332

原创 了解编译器默默生成哪些函数(Effective C++_5)

如果没有定义,编译器会为你产生四个函数:(1) 默认构造函数(2) Copy构造函数:将来源对象的每一个non-static成员变量拷贝至目标对象(3) 赋值构造函数:如果你打算在一个“内含reference成员”的class内支持赋值操作,或者内含const成员,你必须自己定义assignment操作(引用和const的特性所决定);如果某个class的base calss的copy ass

2015-09-05 10:01:51 336

转载 确定对象试用前已经初始化(Effective C++_4)

读取未初始化的值会导致不明确的行为。最佳处理办法:永远在使用对象之前将它初始化。区分赋值(assignment)和初始化(initialization)。class Sample{public: Sample(const std::string& name);private: std::string theName; int num;}Sample::Sample(const st

2015-09-05 09:47:10 303

原创 const相关用法(Effective C++_3)

一、构造操作和赋值操作的区别 二、const的用法

2015-09-04 20:01:54 391

原创 Harris角点检测

一、harris角点检测的原理和过程 参考课件:http://wenku.baidu.com/view/46f069453186bceb19e8bbcc二、代码实现clear;clc;I=imread('10.tif');I=double(I);%计算差分Ix和Iysobelx=[-1 0 1;-2 0 2; -1 0 1];sobely=[-1 -2 -1;0 0 0;1 2 1];

2015-09-01 20:03:47 407

原创 阈值分割

一、迭代法 通过迭代法来求出分割的最佳阈值,具有一定的自适应性,这种方法适用于物体的和背景有较大的区分,即其直方图有相当清楚的波谷;具体算法步骤如下: 1.为全局阈值选择一个初始估计值T。 2.用T分割图像。产生两组像素:G1有灰度值大于T的像素组成,G2有小于等于T像素组成。 3.计算G1和G2像素的平均灰度值m1和m2; 4.计算

2015-09-01 12:05:05 5892

Harris角点检测原理与流程

详细介绍了harris角点检测的原理和流程,并给出了原理的证明

2015-09-01

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除