自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

OPEN_GIS

“I hear, I forget; I see, I remember; I do, I understand"

  • 博客(69)
  • 资源 (4)
  • 收藏
  • 关注

原创 代码整洁之道摘录

本书观念:代码质量与其整洁度成正比。干净的代码,既在质量上较为可靠,也为后期维护、升级奠定了良好的基础。一系列的整洁代码操作实践总结为一条条的规则,只要遵循这些规则,就能写出干净的代码,从而有效提高代码质量。神在细节代码猴子(Code Monkey)->童子军规阐述了命名、函数、注释、代码格式、对象和数据结构、错误处理、边界问题、单元测试、类、系统、并发编程等方面如何做到整洁的经验

2013-08-31 16:16:43 780

翻译 派生类的基本函数的实现

基类的构造函数、析构函数、赋值函数都不能被派生类继承。如果类之间存在继承关系,在编写上述基本函数应注意以下事项:(1)派生类的构造函数应在其初始化列表里显式地调用基类的构造函数(除非基类的构造函数不可访问);(2)如果基类是多态,那么必须把基类的析构函数定义为虚函数,这样就可以像其他虚函数一样实现动态绑定;否则有可能造成内存泄漏,示例如下:#include

2013-08-30 15:00:32 783

翻译 怎样偷懒处理拷贝构造函数和拷贝赋值函数???

如果我们不想编写拷贝构造函数和拷贝赋值函数,又不允许别人使用编译器自动生成的默认函数,怎么做??偷懒方法是:将拷贝构造函数和赋值函数声明为private,并且不实现它们,但是不能像虚函数那样置为0(它只能用来初始化纯函数)。由于显式声明的这两个函数会阻止编译器自动生成默认函数,因此这样做不仅可以防止用户直接调用他们,而且也防止用户通过其他成员函数或友元函数来间接地调用它们。例如:class

2013-08-30 11:03:09 534

转载 风雨20年:我所积累的20条编程经验

译者按:原文作者乔纳森·丹尼可(Jonathan Danylko)是一位自由职业的web架构师和程序员,编程经验已超过20年,涉足领域有电子商务、生物技术、房地产、医疗、保险和公用事业。正如乔纳森在文中所言,本文适合刚毕业的大学生和刚入门的程序员。如果你已是高级开发人员,或许你能在本文中看到自己的身影。从11岁时,我就一直在编程,并且一直都很喜欢技术和编程。这些年来,我积累了一些艰难又

2013-08-29 13:15:03 465

转载 如何在linux下检测内存泄漏

简介: 本文针对 linux 下的 C++ 程序的内存泄漏的检测方法及其实现进行探讨。其中包括 C++ 中的 new 和 delete 的基本原理,内存检测子系统的实现原理和具体方法,以及内存泄漏检测的高级话题。作为内存检测子系统实现的一部分,提供了一个具有更好的使用特性的互斥体(Mutex)类。1.开发背景在 windows 下使用 VC 编程时,我们通常需要 DEBUG 模

2013-08-29 13:08:08 506

翻译 解决vim没有颜色问题

解决办法:打开shell配置文件,.bash_profile或.bashrc加入下面一行TERM=xtermexport TERM重新敲一下bash,再次运行vim,颜色来啦!兴奋!

2013-08-29 10:03:40 2708

转载 系统设计说明书(架构、概要、详细)目录结构

http://www.blogjava.net/BlueDavy/archive/2005/06/13/6037.html虽然这些文档一般来说公司都是有模板的,但我写这些文档以来基本上是每写一次就把目录结构给改一次,应该说这是因为自己对这些文档的理解开始加深,慢慢的越来越明白这些文档的作用和其中需要阐述的东西,觉得这三份文档主要阐述了一个系统的设计和实现过程,从系统分解为层次、层次内的

2013-08-27 18:11:11 1405

转载 linux: /usr/bin/ld: cannot find -l...问题

/usr/bin/ld: cannot find -lxxx问题总结 linux下编译应用程序常常会出现如下错误:    /usr/bin/ld: cannot find -lxxx         意思是编译过程找不到对应库文件。其中,-lxxx表示链接库文件 libxxx.so。         注:有时候,由于库文件是编译过程临

2013-08-27 08:21:35 919

翻译 类String的构造函数和析构函数的构建

示例:class String{public:String(const char *str = "");  //默认构造函数String(const String& copy);  //拷贝构造函数~String();  //析构函数String& operator = (const String& assign);  //赋值函数private:size_t

2013-08-26 19:07:45 583

翻译 构造函数和赋值函数的重载

重载构造函数:可以定义多个重载构造函数,其目的在于可以用不同的方式来初始化对象。同样,也可为类重载赋值函数(operator=).构造函数有三类:默认构造函数、拷贝构造函数和其他带参数的构造函数。默认构造函数:米有参数(即参数列表为void),或者所有参数都有默认值。注意:不能同时定义一个无参数的构造函数和一个参数全部有默认值的构造函数,否则会造成二义性。

2013-08-26 15:36:31 685

转载 linux远程数据传输

1、scp: scp 命令是 SSH 中最方便有用的命令了,scp就是secure copy,是用来进行远程文件拷贝的。数据传输使用 ssh,并且和ssh 使用相同的认证方式,提供相同的安全保证 。 与rcp 不同的是,scp 在需要进行验证时会要求你输入密码或口令。scp [options] [本地用户名@IP地址:]文件名 1 [远程用户名 @IP 地址 :] 文件名 2-v 用来显示

2013-08-26 12:42:50 938

翻译 构造函数、赋值函数和析构函数的调用场景

2013-08-26 11:04:43 676

翻译 对象初始化和销毁的次序

(1)如果一个类没有基类,其构造过程比较简单,只需要把数据成员初始化就可以了;(2)但如果一个类是派生类,俺么它的构造函数将首先调用每一个基类的构造函数,然后调用成员对象的构造函数;而每一个基类的构造函数又将首先调用他们各自基类的构造函数,......,直到最根类。(任何一个对象总是首先构造最根类的子对象,然后逐层向下扩展,直到把整个对象构造起来)一个类可以有多个构造函数,

2013-08-26 10:59:26 916

转载 构造函数的成员初始化列表

构造函数初始化数据成员:在构造体内初始化数据成员,不是真正意义上的初始化,而是赋值。真正地初始化时使用”初始化表达式表“(简称初始化列表进行的)。初始化列表位于构造函数参数表之后,在函数体{}之前。这说明该列表里的初始化工作发生在函数体内的任何代码被执行之前。构造函数的初始化列表的使用规则:(1)如果类存在继承关系,派生类可以直接在其初始化列表里调用基类的特定构造函数以向它传递

2013-08-23 16:13:15 972

翻译 初始化与赋值的区别

初始化就是在对象创建的同时,使用初值直接填充对象的内存单元,因此不会有数据类型转换等中间过程,也就不会产生临时对象;而赋值则是在对象创建好后任何时候都可以调用的而且可以多次调用的函数,由于它调用的是”=“运算符,因此可能需要进行类型转换,即会产生临时对象。

2013-08-23 10:40:42 665

翻译 构造函数与析构函数的起源

程序中难以察觉的错误多是由于变量没有被正确初始化或清除造成的,而初始化和清除工作很容易被人遗忘。Bjarne Stroustrup在设计C++语言时充分考虑到了这个问题并很好地加以解决:把对象的初始化工作放在构造函数中,把清除工作放在析构函数中。当创建对象时,构造函数被自动执行;当对象消亡时,析构函数自动执行。这样就不用担心忘记对象的初始化和清除工作了。构造函数与析构函数的名字

2013-08-23 10:37:57 673

翻译 构造函数、析构函数与赋值函数为什么是类最基本的函数

构造函数、析构函数与赋值函数是每个类最基本的函数。每个类只有一个析构函数,但可以有多个构造函数(包含一个拷贝构造函数,其他为普通构造函数)和多个赋值函数(包括一个拷贝赋值函数,其他为普通赋值函数)。一般,对于任意一个类A,如果程序员不显式地声明和定义上述函数,C++编译器将自动为A产生4个public inline的默认函数,其最常见的形式为:A()  //默认构造函数

2013-08-23 10:23:28 605

翻译 C++语言特征

C++是应用最广泛的面向对象编程语言,其基本的面向对象特性有封装、继承、多态、运行时绑定等,高级的面向对象编程特性有多重继承、虚拟继承、静态的多态和动态的多态等。C++支持泛型编程,但它与面向对象编程没有直接关系。

2013-08-23 09:47:55 634

翻译 C++编译器如何处理静态成员

C++中,凡是使用static关键字声明和定义的程序元素,不论其作用域是文件、函数或是类,都将具有static存储类型,并且其生存期限为永久,即在程序开始运行时创建而在程序结束时销毁。类的静态成员(静态数据成员和静态成员函数)都不依赖于对象的存在而存在,也就不需要通过对象来访问,在本质上就是一种全局变量或函数。‘注意:类的静态数据成员可以在class的定义中直接初始化,但是要清楚:这只

2013-08-23 09:36:13 765

翻译 C++编译器怎样处理成员函数

C++通过Name_Mangling技术把每一个成员函数都转换成了名字唯一的全局函数,并把通过对象、指针或引用对每一个成员函数的调用语句改写为相应的全局函数调用语句。以Rectangle类为例,其每一个非静态成员函数都会被添加一个本类对象的指针作为第一个参数,这就是this指针的由来;然后运用Mangling技术处理。不同的C++编译器对class的数据成员、成员函数和全局

2013-08-23 09:18:10 777

翻译 隐含成员,及其存在情境

由于攒在隐含成员呃填补字节,导致“一个内存对象的实际大小不像它看上去的那样”。但从应用编程的角度讲,没有必要了解这些底层的技术细节,因为它们是御园实现所关心的事情,但如果你了解了这些知识,可以使你在编程的时候头脑中始终保持一个清晰的“运行时对象图”。一个C++复合类型对象,可能隐含的成员有:若干vptr、默认构造函数、默认拷贝构造函数、析构函数和默认拷贝赋值函数。在什么情况

2013-08-23 09:06:17 789

翻译 对象模型简介

详细深入了解对象模型的知识,可参考Lippman的《Inside The C++ Object Model》这本书。了解对象模型,首先了解对象在内存中的布局,也就是对象在内存中是如何存放和表示的。以简单的非多态类Rectangle的对象的内存映像为例:(1)Rectangle 这种基本的C++对象模型有以下几个规则:@  非静态数据成员被放在每一个对象体

2013-08-22 19:02:35 1490

翻译 程序的动态特性

程序的动态特性:大多数情况下,程序的功能是在编译的时候确定下来的,称之为静态特性;而如果程序的功能是在运行时才确定的称为动态特性。动态特性是面向对象语言最强大的功能之一,它在语言层面上支持程序的可扩展性。动态特性:由C++虚函数、抽象基类、动态绑定和多态构成。(1)虚函数:可用于使用统一的方式来调用相同功能的函数实现做类似但不同的事情。例如,假定几何形状Shape,其派生类为Circl

2013-08-22 15:12:31 1622

翻译 多重继承

如果一个事物同时具有另外几个事物的特点(多重特点),可以使用多重继承。如下例:

2013-08-22 10:12:34 518

翻译 C++类经典描述 public\protected\private

类把数据和函数捆绑在一起,其中数据表示类的属性(数据成员),函数表示类的行为,也称为成员函数、方法或者服务。C++关键字的使用如下:

2013-08-20 18:59:13 622

翻译 应用程序命名规则

规则1:标识符的名字应当直观且可以拼读,可望文知义,不必进行”解码“;规则2:标识符的长度应当符合”min-length & max-information“原则。规则3:程序中不要出现仅依靠大小来区分的相似标识符,虽然C++/C是大小写相关的。规则4:不要使程序中出现局部变量和全局变量同名的现象;规则5:变量名字应当使用”名词“或者”形容词+名词“的格式来命名;规则6:全局函

2013-08-20 18:43:42 1177

翻译 代码的版式布局

1、哪些地方该使用空行?(1)ADT/UDT定义之间要留空行。ADT内部各个访问段(public、private等)之间要留空行;每一段内按照相关性分组的,建议按照各组之间留空行。(2)函数定义之间要留空行。函数体内,完整的控制结构及单独的语句块之间要分别留出空行,它们与其他段落之间也要留出空行以示区分;最后一条return语句前要留空行,除非该函数只有这一条语句;控制结构、语句块、条件编

2013-08-20 16:06:44 777

翻译 源文件结构

C和C++源文件:主要保存函数的实现和类的实现,结构如下:(1)源文件注释(包括文件说明、功能描述、版权声明等)(必须有);(2)预处理指令(如果需要);(3)常量和宏定义(如果需要);(4)外部变量声明和全局变量定义及初始化(如果需要);(5)成员函数和全局函数的定义(如果需要);(6)文件修改记录。

2013-08-20 15:28:53 707

翻译 版权和版本信息

版权和版本信息的主要内容有:(1)版权信息;(2)文件名称、简要描述、创建日期和作者;(3)当前版本信息和说明;(4)历史版本信息和修订说明。提示:任何源程序都需要使用配置管理工具(例如SourceSafe、ClearCase和CVS等)进行管理(例如版本控制、变更控制等)。

2013-08-20 15:25:29 915

原创 头文件的用途和结构

头文件的作用:(1)通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制库即可。(2)头文件能加强类型安全检查。如果某个接口被实现与被使用时的方式与头文件中的生命不一致,编译器会之处错误。(3)头文件可以提高程序的可读性。头文件中元素的顺序:(1)头文件注释(包括文件说明、功能描述、版权声明等)(必须有);(2)内部包含卫哨开始(

2013-08-20 15:20:31 1071

原创 C++/C的文件结构和程序版式

文件结构和程序版式并不影响功能,也无多少技术含量,但能够反映出开发者的职业化程度。程序文件的目录结构,可参照如下结构组织:目录的用途如下:(1)Include目录存放应用程序的头文件(.h),还可以再细分子目录。(2)Source目录存放应用程序的源文件(.c或.cpp),还可以再细分子目录(3)Shared目录存放一些共享的文件。(4)Resource目录

2013-08-20 15:02:28 820

翻译 #和##运算符

#:构串操作符只能修饰带参数的宏的形参,它将实参的字符序列(而不是实参代表的值)转换成字符串常量。例如:#define STRING(x)#x #x #x#define TEXT(x)"class" #x"Info"那么宏引用:int abc = 100;STRING(abc);TEXT(abc);展开后的结果分别为:”abcabcabc“"cl

2013-08-20 14:26:38 641

翻译 #error的使用

#error主要用于输出与平台、环境等有关的信息,举例如下:#if !defined(WIN32)#error ERROR: Only Win32 platform supported!#endif#ifndef _cplusplus#error MFC requires C++ compilation(use a .cpp suffix)#endif当预处理器

2013-08-20 14:10:06 1137

翻译 条件编译

条件编译的作用:条件编译可以控制预处理器选择不同的代码段作为编译器的舒服,从而使得源程序在不同的编译条件下产生不同的目标代码。条件编译指令主要包括:#if、#ifdef、#ifndef、#elif、#else、#endif、defined。(1)暂时放弃编译一段代码:#if 0.../*...*///希望禁止编译的代码段.../*...*///希望禁止编译的代码段

2013-08-20 14:04:25 695

翻译 宏的定义

宏:分为带参数的宏和不带参数的宏;宏定义以#define关键字后面出现的第一个连续字符序列作为宏名,剩下的部分作为宏体;宏定义具有文件作用域;宏的特点和注意事项:(1)宏定义不是C++/C语句,因此不需要使用语句结束符“;”,否则它也被看做宏体的一部分;(2)任何宏在编译预处理阶段都只是进行简单的文本替换,不做类型检查和语法检查,这个工作留给编译器进行。参数替换发生在宏扩展之前

2013-08-20 13:41:41 994

翻译 头文件包含的合理顺序

如果包含顺序不当,可能出现包含顺序依赖问题,甚至引起编译错误。推荐如下顺序:在头文件中:(1)包含当前工程中所需要的自定义头文件(顺序自定);(2)包含第三方程序库的头文件;(3)包含标准头文件。在源文件中:(1)包含该源文件对应的头文件(如果存在);(2)包含当前工程所需要的自定义头文件;(3)包含第三方程序库的头文件;(4)包含标准头文件。

2013-08-20 11:29:26 2417

翻译 内部包含卫哨和外部包含卫哨

内部包含卫哨:为了避免同一个编译单元包含同一个头文件的内容超过一次(会导致类型重复定义错误),需要在头文件里面使用内部包含卫哨。其实际上是使用预处理器的一种标志宏。举例如下://stddef.h#ifndef _STDDEF_H_INCLUDED_#define _STDDEF_H_INCLUDED_......//头文件的内容#endif// !_STDDEF_H

2013-08-20 10:27:57 1986

原创 QT信号与槽

QT信号与槽

2013-08-19 14:25:33 781

翻译 struct和class的异同

C++语言本身来讲,struct和class除了“默认的成员访问权限”这一点不同外,没有任何区别。C++语言中:如果不特别指明,struct成员的默认访问限定为public,class成员的默认访问限定为private.(在C++程序中,如果明确声明每一个成员的访问权限,完全可以用struct取代struct):建议:为了不使程序产生混乱和妨碍理解,建议使用struct定义简单的数

2013-08-13 12:57:05 633

翻译 引用与指针的比较

引用“&”是C++新增的概念,这里的“&”不是取地址的语义。int m; int& n = m; n是变量m的一个引用(reference)

2013-08-13 11:34:41 588

redis面试题及答案.pdf

REDIS: 面试常见问题,1.Redis是什么;2.Redis 与memcached 的比较,3.Redis消耗的物理资源与资源淘汰策略.........

2019-09-18

MySQL性能优化的21个最佳实践.pdf

MySQL性能优化的21个最佳实践,1.查询缓存优化;2.Explain 优化;3.Limint优化;4.索引优化;5.Join优化

2019-09-18

MyBatis面试专题及答案.pdf

MyBatis面试专题及答案,什么事MyBatis?Mybatis的特点、分页、插页原理等等面试常问内容

2019-09-18

计算机学习经验谈

介绍算法及训练经验,包括常用的网站及一些心得体会等,共同进步。

2012-12-14

空空如也

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

TA关注的人

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