自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 资源 (6)
  • 收藏
  • 关注

原创 模板方法模式:C++实现

模板方法模式的主要思想:在一个方法中定义一个算法的骨架,将一些步骤延伸子类中,子类在不改变算法结构的基础上,重新定义算法中的某些步骤。当子类中必须使用算法中的某个方法或者步骤的实现时,就是用纯虚函数,要求继承基类的子类必须覆盖该方法;当算法的某个部分是可选时,就使用“钩子”,子类可选择是否实现钩子,但并不像纯虚函数那样必须覆盖,因此,钩子使用虚函数实现,可在基类中提供默认的实现。下面是使用模板方法...

2018-05-22 16:21:54 444

原创 stub与mock的理解

1.    stub:伪造一个方法,阻断对原来方法的调用。2.    mock:像stub一样伪造方法,阻断对原来方法的调用,并且期望程序执行必须调用这个伪造的方法,如果没有被调用到,测试就失败了。mock的好处:1. 团队可以并行工作有了Mock,前后端人员只需要定义好接口文档就可以开始并行工作,互不影响,只在最后的联调阶段往来密切;后端与后端之间如果有接口耦合,也同样能被Mock解决;测试过程...

2018-05-09 20:04:32 3007

原创 TDD(Test-Driven Develoment)的理解:

TDD的核心是:先写测试,并使用它帮助开发人员t来驱动软件开发。首先是先写测试,这里的测试并不只是单元测试,也不是说一定要使用mock和stub来做测试。这里的测试就是指软件测试本身,可以是基于代码单元的单元测试,可以是基于业务需求的功能测试,也可以是基于特定验收条件的验收测试。其次是帮助开发人员,主要是帮助开发人员理解软件的功能需求和验收条件,帮助其思考和设计代码,从而达到驱动开发的目的,所以T...

2018-05-09 19:27:20 384

原创 CmokeryC++开源项目学习

1. Cmockery简介:   Cmockery是Google发布的用于C单元测试的一个轻量级框架,该框架有以下几个特点:免费且开源,google提供技术支持;轻量级的框架,测试快速简单;避免使用复杂的编译器特性,对老版本的编译器的兼容性好;不强制要求待测代码必须依赖C99标准,对许多嵌入式系统的开发很有用;2. Linux下编译:  cd 到Cmockery目录下,执行下面命令:sudo ./...

2018-05-09 11:25:15 848

原创 CJSON介绍及使用

1. JSON简介JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,可以把JSON的结构理解成无序的、可嵌套的key-value键值对集合,这些key-value键值对以结构体或数组的形式来组织的。同一级的key-value键值对之间用一个,(逗号)隔开,每个key-value键值对是由一个key后面紧接一个:(冒号),冒号后面是这个key对应的value...

2018-05-08 22:24:25 2032

原创 超轻量型HTTP Server: Tinyhttpd

程序流程:服务器启动,  如果没有指定端口则随机选取端口建立套接字监听客户端连接accept()会一直阻塞等待客户端连接, 如果客户端连接上, 则创建一个新线程处理该客户端连接.在accetp_request() 主要处理客户端连接,  首先解析HTTP请求报文. 只支持GET/POST请求, 否则返回HTTP501错误.  如果有请求参数的话, 记录在query_string中.  将请求的路径...

2018-05-08 21:33:43 1697

原创 web性能压力测试工具:WebBench详解

1.Webbench官方主页:http://home.tiscali.cz/~cz210552/webbench.htmlWebbench的官方介绍:Web Bench is very simple tool for benchmarking WWW or proxy servers. Uses fork() for simulating multiple clients and can use ...

2018-05-08 20:03:41 2322

原创 深拷贝和浅拷贝

1.浅拷贝:指的是在对象复制时,只对对象中的数据成员进行简单的赋值,默认拷贝构造函数执行的也是浅拷贝。 如果没有自定义拷贝构造函数,编译器会自动创建默认的拷贝构造函数,但编译器创建的拷贝构造函数只能执行“浅 拷贝”,将被拷贝对象的数据成员的值赋值给新创建的对象。 2.深拷贝:对于对象中的动态成员,重新动态分配空间,创建对象的各个成员。 ...

2018-05-02 17:27:42 142

原创 Effective C++ Item 11:在operator= 中处理“自我赋值”

1.普通的operator=函数的实现给定以下的operator=的实现代码,我们可以对operator=重载的代码进行分析:class Bitmap {};class Widget {public: Widget & operator=(const Widget& cw) { delete pb; //删除当前对象 ...

2018-04-28 11:01:04 165

原创 Effective C++ Item10: 令operator= 返回一个reference to *this

如何为自定义的class重载赋值操作符?对于操作符的重载,可以内置类型作为基准,内置类型操作符的使用习惯也应适用于自定义的class。关于赋值操作符,以int内置类型的操作习惯来分析:int x, y, z;x = y = z = 15; //连锁赋值形式为了实现像int内置类型的“连锁赋值”,赋值操作符必须返回一个reference指向操作符的左侧实参。因此,在自定义的...

2018-04-28 09:35:54 147

原创 Effective C++ Item9 :绝不在构造和析构过程中调用virtual函数

1.在构造函数中调用virtual函数的后果:设想下面的场景:假设有个处理时是继承体系,用来模拟故事交易:买进、卖出的订单等等。这样的订单一定要经过审计,所以每当创建一个交易对象,在审计日志中也要创建一笔记录。于是,有下面的设计:class Transaction { //所有交易的抽象基类public: Transaction(); virtu...

2018-04-28 08:58:29 162

原创 Effective C++ Item 08:别让异常逃离析构函数

1.C++不禁止析构函数抛出异常,但不鼓励在析构函数中抛出异常通过以下代码分析:class Widget {public: ... ~Widget(){...} //假设这个析构函数会抛出异常};void dosomething() { std::vector<Widget>v; //v在函数结束后被自动销毁 ...}上述代码中,函数dosomethin...

2018-04-27 11:18:28 149

原创 Effective C++ Item7:为多态基类声明virtual析构函数

1. 为作为基类的类声明virtual析构函数:在C++中,当子类对象由一个基类指针来删除,而该基类带有非虚析构函数,实际执行过程中通常子类对象的Derived成分没有被销毁。可以通过以下代码分析,在代码中,基类的析构函数为非虚函数,main函数中通过基类指针指向子类对象,并通过基类指针来删除子类对象:class Base{public: Base() { cout << "ba...

2018-04-26 16:17:33 164

原创 Effective C++ Item30:inline函数

1.inline函数:本质:对inline函数的调用都以函数本体替换;inline函数通常一定被置于头文件内,因为大多数环境在编译期进行inlining,将“函数调用”替换为“被调用函数的本体”;优点:动作像函数,可以调用而避免函数调用的额外开销;编译器有能力对inline函数执行语境相关最优化(编译器的最优化机制被设计用来浓缩“不含函数调用”的代码);缺点:可能增加目标码的大小:造成代码膨胀会导...

2018-04-25 21:40:51 147

原创 Exceptional C++ Item46:转交函数(forwarding function)

1.转交函数:对于将任务传递给其他函数或对象时很有用,尤其当转交函数被设计的很高效时。那么问题来了,如何设计高效的转交函数呢?2. 如何设计高效的转交函数有转交函数如下:bool f(X x) { return g(x);}改进一:传参时使用传const的引用代替原值(总被采用):编译器能确保参数x除了传递给g()外没有被其他地方使用,编译器可以使x完全优化掉。例如:X my_x;f(my_...

2018-04-25 17:38:09 796

原创 Effective C++ Item33:避免遮掩继承而来的名称

这个主题和继承关系不大,主要是对作用域的理解和把握。还是通过代码来看:class Base {private: int x;public: virtual void mf1() = 0; virtual void mf1(int); virtual void mf2(); void mf3(); void mf3(double);};class Derived : public...

2018-04-25 16:41:16 130

原创 Effective C++ Item34 的思考:区分接口继承和实现继承

我们有一个shape类,在该类中有三种不同类型的函数:class Shape {   public:       virtual void draw() const = 0;             //纯虚函数      virtual void error(const string& msg);     //普通虚函数      int objectID() const;       ...

2018-04-25 15:42:05 147

原创 More Effective C++ Item3的思考:不要对数组使用多态

1.类的多态:对于这个话题,可以先说说类的多态的实现。类继承的最重要的性质是可以通过基类的指针或引用来操作派生类,在动态绑定技术的基础上,在程序运行时期确定指针或对象的真正指向的对象,调用该对象所对应的方法体执行。我们可以使用基类的指针或引用来操作子类的对象,但是却不能使用基类的指针或引用来操作子类的数组。尽管我们可以看到C++的编译器很宽容地通过了我们的代码,但却会承担运行时期程序崩溃的风险。2...

2018-04-25 10:18:14 140

C学习经典书籍

C学习和编程的经典书籍,有助于C的学习开发者更好的理解C相关的概念和技术的实施

2018-04-25

Android 个人记账程序源码

个人记账程序源码,适合于初学Android的用户学习简单的记账程序的书写和设计

2015-12-24

安卓手机wifi传送文件源码

安卓手机wifi传送文件源码,适合初学者学习如何使用wifi进行文件的传送

2015-12-21

个人日程管理

个人日程管理的Android源码,适合日志管理开发的简单程序

2015-12-21

Androidmp3播放器源码

Androidmp3播放器源码,适合初级编程Android的同学学习学习

2015-12-21

Android闹钟源代码

Android闹钟实现的源码,有利于学习Android代码设计闹钟的程序

2015-12-21

空空如也

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

TA关注的人

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