- 博客(36)
- 收藏
- 关注
原创 C++ 模板类定义与声明
<br />#pragma once<br /><br />#ifndef GRID_H<br />#define GRID_H<br /><br />template <typename T><br />class Grid<br />{<br />public:<br /> Grid(int inWidth = kDefaultWidth, int inHeight = kDefaultHeight);<br /> Grid(const Grid<T>& sr
2011-04-08 11:28:00
1613
原创 HTML控件与Web服务器控件异同
<br />转载http://blog.youkuaiyun.com/ansontang1217/archive/2009/09/12/4545399.aspx
2010-12-01 08:46:00
482
原创 adb命令的学习
<br /> <br />转载http://student.youkuaiyun.com/space.php?uid=44933&do=blog&id=38627<br /> http://mobile.yesky.com/33/9269533.shtml<br /> http://g.52cd.net/346.shtml<br /> <br />安装USB驱动<br /> 这个相关步骤其实笔者已经在Android前系列教程中介绍,故今天简要叙述一下过程。进入设置-应用程序-开发-USB调试,将第
2010-10-13 15:56:00
1797
转载 Google C++ Style Guide---Header Files
<br />头文件 通常,每一个.cc文件(C++的源文件)都有一个对应的.h文件(头文件),也有一些例外,如单元测试代码和只包含main()的.cc文件。 正确使用头文件可令代码在可读性、文件大小和性能上大为改观。 下面的规则将引导你规避使用头文件时的各种麻烦。 <br />1. #define的保护 <br />所有头文件都应该使用#define防止头文件被多重包含(multiple inclusion),命名格式当是:<PROJECT>_<PATH>_<FILE>_H_ 为保证唯一性,头文件的命名应基
2010-10-07 11:04:00
704
转载 乔布斯斯坦福演讲
<br /><br />他介绍了3个他一生中的故事。我最喜欢的是他关于“你一定要以自己热爱的事为职业”的观点。说得很有说服力。很有感情。<br />我很真诚地发这篇给我感触良多的演讲与各位共勉。希望大家都可以找到自己真正热爱的事。并以此为职业。<br />I am honored to be with you today for yourcommencement from one of the finest universities in the world. Truth be told, Inev
2010-10-07 09:28:00
909
转载 c++中的explicit关键字
c++中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢?<br /><br />如果c++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象,如下面所示:<br />class MyClass<br />{<br />public:<br /> MyClass( int num );<br />}<br />....<br />
2010-09-27 17:16:00
1327
原创 c++ 类型强制转换
<br />类型强制转换<br />c++提供了四种新的类型强制转换方法:static_cast、dynamic_cast、const_cast、reinterpret_cast<br />(1)const_cast<br />const_cast是最直接的类型强制转换。使用const_cast可以去除变量的常量性。<br />void set(char* str)<br />{<br />}<br />void get(const char* str)<br />{<br
2010-09-27 09:53:00
1408
原创 effective c++ 条款39: 避免 "向下转换" 继承层次
<br />条款39: 避免 "向下转换" 继承层次<br /> 条款39: 避免 "向下转换" 继承层次<br /> <br />在当今喧嚣的经济时代,关注一下我们的金融机构是个不错的主意。所以,看看下面这个有关银行帐户的协议类(Protocol class )(参见条款34):<br />class Person { ... };<br />class BankAccount {<br />public:<br /> BankAccount(const Person *prim
2010-09-27 09:23:00
640
转载 Makefile 介绍
<br />一、Makefile的规则<br />在讲述这个Makefile之前,还是让我们先来粗略地看一看Makefile的规则。<br />target ... : prerequisites ...<br />command<br />target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label),对于标签这种特性,在后续的“伪目标”章节中会有叙述。<br />prerequisites就是,要生成那个target所需要的文件或是目标。<br
2010-09-26 11:20:00
628
1
原创 effective c++ 条款38: 决不要重新定义继承而来的缺省参数值
<br />条款38: 决不要重新定义继承而来的缺省参数值<br /> 条款38: 决不要重新定义继承而来的缺省参数值<br /> <br />让我们从一开始就把问题简化。缺省参数只能作为函数的一部分而存在;另外,只有两种函数可以继承:虚函数和非虚函数。因此,重定义缺省参数值的唯一方法是重定义一个继承而来的函数。然而,重定义继承而来的非虚函数是一种错误(参见条款37),所以,我们完全可以把讨论的范围缩小为 "继承一个有缺省参数值的虚函数" 的情况。<br />既然如此,本条款的理由就变得非常明显
2010-09-24 15:14:00
482
原创 effective c++ 条款37: 决不要重新定义继承而来的非虚函数
<br />条款37: 决不要重新定义继承而来的非虚函数<br /> 条款37: 决不要重新定义继承而来的非虚函数<br /> <br />有两种方法来看待这个问题:理论的方法和实践的方法。让我们先从实践的方法开始。毕竟,理论家一般都很耐心。<br />假设类D公有继承于类B,并且类B中定义了一个公有成员函数mf。mf的参数和返回类型不重要,所以假设都为void。换句话说,我这么写:<br />class B {<br />public:<br /> void mf();<br />
2010-09-24 14:46:00
515
转载 纯虚函数,虚函数
<br />虚函数为了重载和多态的需要,在基类中是由定义的,即便定义是空,所以子类中可以重写也可以不写基类中的函数!<br />纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java中的接口函数!<br />虚函数<br />引入原因:为了方便使用多态特性,我们常常需要在基类中定义虚函数。<br />class Cman<br />{<br />public:<br /> virtual void Eat(){……};<br /> void Move();<br />private:<
2010-09-24 14:38:00
507
原创 effective c++ 条款36: 区分接口继承和实现继承
<br />条款36: 区分接口继承和实现继<br /> 条款36: 区分接口继承和实现继承<br /> <br />(公有)继承的概念看起来很简单,进一步分析,会发现它由两个可分的部分组成:函数接口的继承和函数实现的继承。这两种继承类型的区别和本书简介中所讨论的函数声明和函数定义间的区别是完全一致的。<br />作为类的设计者,有时希望派生类只继承成员函数的接口(声明);有时希望派生类同时继承函数的接口和实现,但允许派生类改写实现;有时则希望同时继承接口和实现,并且不允许派生类改写任何东西。<br
2010-09-24 14:10:00
405
原创 effective c++ 条款35: 使公有继承体现 "是一个" 的含义
<br />条款35: 使公有继承体现 "是一个" 的含义<br /> 条款35: 使公有继承体现 "是一个" 的含义<br /> <br />在"Some Must Watch While Some Must Sleep"( W. H. Freeman and Company, 1974)一书中,William Dement讲了一个故事,故事说的是他如何让学生们记住他的课程中最重要的部分。"据说,",他告诉他的学生,"一般的英国学生除了记得Hastings战役发生在1066年外,再也不记得
2010-09-24 13:29:00
466
原创 静态库文件的理解
从链接方式上区分,程序分为静态库和动态库两种:(1) 静态库:是在可执行程序运行前就已经加入到执行代码中,成为执行程序的一部分来执行的。(2) 动态库:就是在执行程序启动时加载到执行程序中,可以被多个执行程序共享使用。静态库是一些目标代码的集合。Linux环境下的静态库目标文件一般以.a作为目标文件。Linux环境下使用ar命令创建一个静态库的有点在于使用简单,编译快速。静态库在应用程序生成时,已经编译成为可重定位的目标文件,因此不必再编译。创建静态库的步骤
2010-09-24 09:08:00
1073
原创 使用伪目标
<br /><br />clean:<br /> rmedit main.o common.o<br />clean是一个伪目标。只执行命令,不生成任何文件。<br />要运行clean这个目标时,只有在启动make工具时指定运行该目标才行。下面演示了运行clean伪目标。<br />make clean<br /> <br />例子:<br /> <br />cleanall : cleanobj cleanmk<br /> rmapp<br />c
2010-09-21 11:54:00
459
原创 makefile使用隐式规则
<br /><br />makefile支持隐式规则,make工具会自动使用gcc –c 命令,将一个扩展名为.c的c语言源程序文件编译成一个同名的.o的目标文件。因此当编译一个单独的.c文件到.o文件时,可以使用隐含规则,让make工具自己推到规则。<br /> 在使用隐式规则时,与目标同名的.c文件自动被添加为条件,因此条件中的.c文件可以省去。下面实例演示了将makefile文件改写为使用隐式的。<br /> <br />Edit: main.o common.o<br /> g
2010-09-21 11:41:00
1282
原创 makefile文件的组成内容
<br />(一)makefile文件主要有以下五种组成部分:<br />1.显式规则:显示规则说明了生成一个或多个目标文件的方法和步骤。这是在编写makefile文件时明显指出的,包括要生成的文件、生成文件的依赖文件以及生成的命令等。<br />2.隐式规则:由于make工具有自动推导的功能,所以在编写makefile文件的时候可以利用该规则,简略地书写makefile。再由make工具本身自动推到需要使用的规则。<br />3变量的定义:make工具支
2010-09-21 11:30:00
2739
原创 effective c++ 条款26: 当心潜在的二义性
<br />条款26: 当心潜在的二义性条款26: 当心潜在的二义性<br /> <br />每个人都有思想。有些人相信自由经济学,有些人相信来生。有些人甚至相信COBOL是一种真正的程序设计语言。C++也有一种思想:它认为潜在的二义性不是一种错误。<br />这是潜在二义性的一个例子:class B; // 对类B提前声明 // class A {public: A(const B&); // 可以从B构造而来的类A};class B {public:
2010-09-16 11:03:00
514
原创 effective c++ 条款27: 如果不想使用隐式生成的函数就要显式地禁止它
<br />条款27: 如果不想使用隐式生成的函数就要显式地禁止它条款27: 如果不想使用隐式生成的函数就要显式地禁止它<br /> <br />假设想写一个类模板Array,它所生成的类除了可以进行上下限检查外,其它行为和C++标准数组一样。设计中面临的一个问题是怎么禁止掉Array对象之间的赋值操作,因为对标准C++数组来说赋值是不合法的:<br />double values1[10];<br />double values2[10];<br />values1 = values2;
2010-09-16 10:53:00
640
原创 effective c++ 条款28: 划分全局名字空间
<br />条款28: 划分全局名字空间款28: 划分全局名字空间<br /> <br />全局空间最大的问题在于它本身仅有一个。在大的软件项目中,经常会有不少人把他们定义的名字都放在这个单一的空间中,从而不可避免地导致名字冲突。例如,假设library1.h定义了一些常量,其中包括:<br />const double lib_version = 1.204;<br />类似的,library2.h也定义了:<br />const int lib_version = 3;<br />很显然,如果某
2010-09-16 10:48:00
447
原创 effective c++ 条款23: 必须返回一个对象时不要试图返回一个引用
<br />条款23: 必须返回一个对象时不要试图返回一个引用条款23: 必须返回一个对象时不要试图返回一个引用<br /> <br />据说爱因斯坦曾提出过这样的建议:尽可能地让事情简单,但不要过于简单。在c++语言中相似的说法应该是:尽可能地使程序高效,但不要过于高效。<br />一旦程序员抓住了“传值”在效率上的把柄(参见条款22),他们会变得十分极端,恨不得挖出每一个隐藏在程序中的传值操作。岂不知,在他们不懈地追求纯粹的“传引用”的过程中,他们会不可避免地犯另一个严重的错误:传递一个并不存在
2010-09-15 10:12:00
416
原创 effective c++ 条款22: 尽量用“传引用”而不用“传值”
条款20: 避免public接口出现数据成员条款20: 避免public接口出现数据成员首先,从“一致性”的角度来看这个问题。如果public接口里都是函数,用户每次访问类的成员时就用不着抓脑袋去想:是该用括号还是不该用括号呢?——用括号就是了!因为每个成员都是函数。一生中,这可以避免你多少次抓脑袋啊!你不买“一致性”的帐?那你总得承认采用函数可以更精确地控制数据成员的访问权这一事实吧?如果使数据成员为public,每个人都可以对它读写;如果用函数来获取或设定它的值,就可以实现禁止访问、只读访问和读
2010-09-15 09:40:00
521
原创 effective c++ 条款20: 避免public接口出现数据成员
<br />条款20: 避免public接口出现数据成员条款20: 避免public接口出现数据成员<br /> <br />首先,从“一致性”的角度来看这个问题。如果public接口里都是函数,用户每次访问类的成员时就用不着抓脑袋去想:是该用括号还是不该用括号呢?——用括号就是了!因为每个成员都是函数。一生中,这可以避免你多少次抓脑袋啊!<br />你不买“一致性”的帐?那你总得承认采用函数可以更精确地控制数据成员的访问权这一事实吧?如果使数据成员为public,每个人都可以对它读写;如果用函数来
2010-09-15 08:52:00
437
原创 malloc和calloc学习
函数malloc()和calloc()都可以用来动态分配内存空间,但两者稍有区别。 malloc()函数有一个参数,即要分配的内存空间的大小:void *malloc(size_t size); calloc()函数有两个参数,分别为元素的数目和每个元素的大小,这两个参数的乘积就是要分配的内存空间的大小。void *calloc(size_t numElements,size_t sizeOfElement); 如果调用成功,函数malloc()和函数calloc()都将返回所分配的内存空间的首地址。函数m
2010-09-14 17:29:00
494
转载 GPL 与 LGPL 的区别
GPL 与 LGPL 的区别 关键字: license,gpl ,lgpl 在写这篇文章之前, 我声明我这个博客里的所有内容,想法与代码为LGPL。LGPL stands for GNU Lesser General Public License.(绿色)GPL stands for GNU General Public License.(红色)从图片上看是完全一样的 可是颜色不一样。可不要小看这个颜色的区别。概括来讲,LPGL版权 允许个人或企业使用,修改
2010-09-14 14:23:00
711
转载 freetype
<br />Freetype学习笔记<br /> <br />GTK+(基于DirectFB)的字体绘制是通过pango+freetype+fontconfig三者协作来完成的,其中,fontconfig负责字体的管理和配置,freetype负责单个字符的绘制,pango则完成对文字的排版布局。而我对这一部分的了解,基本上是空白的。这两天为了解决一个关于字体的BUG,花了一些时间阅读相关资料,这里记录一些freetype的学习笔记。<br /> <br />尽管点阵字体在时间和空间性能上都有较佳的表现,但是
2010-09-14 13:45:00
4297
原创 const方法的学习
<br /> 要保证一个方法不会修改数据成员,具体方法就是将方法本身用const关键字来标记。<br /> 将一个方法标记为const,这表明了与客户代码的一个合约,即保证你不会在此方法中尝试修改对象的内部值。如果把一个方法声明为const,但是在方法中修改了数据成员,编译器会报错。而且不能把static方法声明为const,因为静态方法根本没有相应的类实例,因此他们不可能修改内部成员数据。<br />有时候你在编写一个逻辑上的const方法,但实际上它会修改对象的数据成员。则将该对象数
2010-09-14 10:44:00
856
原创 effective c++ 条款21: 尽可能使用const
条款21: 尽可能使用const条款21: 尽可能使用const使用const的好处在于它允许指定一种语意上的约束——某种对象不能被修改——编译器具体来实施这种约束。通过const,你可以通知编译器和其他程序员某个值要保持不变。只要是这种情况,你就要明确地使用const ,因为这样做就可以借助编译器的帮助确保这种约束不被破坏。const关键字实在是神通广大。在类的外面,它可以用于全局或名字空间常量(见条款1和47),以及静态对象(某一文件或程序块范围内的局部对象)。在类的内部,它可以用于静态和非
2010-09-14 10:10:00
450
转载 effective c++ 条款18: 争取使类的接口完整并且最小
<br />条款18: 争取使类的接口完整并且最小 条款18: 争取使类的接口完整并且最小<br /> <br />类的用户接口是指使用这个类的程序员所能访问得到的接口。典型的接口里只有函数存在,因为在用户接口里放上数据成员会有很多缺点(见条款20)。<br />哪些函数该放在类的接口里呢?有时这个问题会使你发疯,因为有两个截然不同的目标要你去完成。一方面,设计出来的类要易于理解,易于使用,易于实现。这意味着函数的数量要尽可能地少,每一个函数都完成各自不同的任务。另一方面,类的功能要强大,要方便使用
2010-09-14 09:23:00
381
原创 生病了,也是生活重新定位的新起点
<br />生病了,才知道身体的重要性。<br />生病了,才知道定下心来去思考。<br />生病了,才知道自己活着到底为了干什么?<br />生病了,才想到今年已经过去大半,该做的事情还有很多。<br />第一个任务:用心去提高日语,不要荒废!<br />第二个任务:学习android,开始对这个感兴趣了。<br />发现自己只有在做程序时候才是那样的专注和开心。<br />2010年9月4日<br />
2010-09-04 09:22:00
525
转载 android jni
<br /> <br />Andoird 中使用了一种不同传统Java JNI的方式来定义其native的函数。其中很重要的区别是Andorid使用了一种Java 和 C 函数的映射表数组,并在其中描述了函数的参数和返回值。这个数组的类型是JNINativeMethod,定义如下:<br /> <br /> <br />typedef struct {<br />const char* name;<br />const char* signature;<br />void* fnPtr;<br />} JN
2010-09-04 09:17:00
323
转载 怎样使用Eclipse来开发Android源码
<br />1、可以使用eclipse来编辑JAVA程序、检查错误(主要是类库包含和语法方面),但是不能在eclipse上编译运行android源码,还是得在shell中make(或mm或mmm) <br />2、android源码文件夹里提供有一些eclipse配置文件, <br />.claapath:eclipse工程的配置文件,方便我们直接把android源码相应的文件和JAVA包导入工程 <br />android-formatting.xml和android.importorder:
2010-09-01 21:42:00
453
原创 Android JNI使用的数据结构JNINativeMethod详解
<br /><br />Andoird 中使用了一种不同传统Java JNI的方式来定义其native的函数。其中很重要的区别是Andorid使用了一种Java 和 C 函数的映射表数组,并在其中描述了函数的参数和返回值。这个数组的类型是JNINativeMethod,定义如下:<br /> <br /> <br />typedef struct {<br />const char* name;<br />const char* signature;<br />void* fnPtr;<br />} JNI
2010-08-29 13:49:00
336
原创 linux下jni
<br />创建java程序hello.java:<br /><br />public class hello {<br /> <br /> static{<br /> System.out.println(System.getProperty("java.library.path"));<br /> System.loadLibrary("hello");<br /> }<br /> <br />
2010-08-28 22:39:00
299
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人