摘要: 1.到http://qt-project.org/downloads下载,并安装(1)安装VS2010(2)Qt libraries 5.0.0 for Windows (VS 2010 406 MB)(3)Visual Studio Add-in 1.2.0 for Qt52.配置环境变量在"我的电脑"上单击右键,进入"属性",然后打开"环境变量"对话框在PATH环境变量中添加:"D:\Qt\Qt5.0.0\5.0.0\msvc2010\bin"添加新的环境变量,名字为"QTDIR",值为&q 阅读全文
posted @ 2013-04-09 20:19 wiessharling 阅读(375) 评论(0) 推荐(0) 编辑
摘要: 说起C++的模板及模板特化, 相信很多人都很熟悉 ,但是说到模板特化的几种类型,相信了解的人就不是很多。我这里归纳了针对一个模板参数的类模板特化的几种类型, 一是特化为绝对类型; 二是特化为引用,指针类型;三是特化为另外一个类模板。这里用一个简单的例子来说明这三种情况:template<class T>class Compare{public: static bool IsEqual(const T& lh, const T& rh) { return lh == rh; }};一、特化为绝对类型; 也就是说直接为某个特定类型做特化,这是我们最常见的一种特化方... 阅读全文
posted @ 2013-04-06 22:56 wiessharling 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 要点:1. 任何引用必须和存储单元联系。访问引用时,就是访问那个存储单元。2. 使用引用的规则: 2.1、当引用被创建时,它必须被初始化(指针不用) 2.2、一旦一个引用被初始化为指向一个对象,那么它就不能被改变为指向另一个对象。(指针可以) 2.3、不可能存在NULL的引用。指针有。3. 函数中的引用: 首先我们看下面例子:int* f(int* x){(*x)++;return x; // safe}int& f(int& x){x++;return x;// safe}int& h(){int q;return q;//errorstatic int x;retu 阅读全文
posted @ 2013-04-04 20:39 wiessharling 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 它是被设计用来修饰被不同线程访问和修改的变量。如果没有volatile,基本上会导致这样的结果:要么无法编写多线程程序,要么编译器失去大量优化的机会。volatile的作用: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值.简单地说就是防止编译器对代码进行优化.比如如下程序:XBYTE[2]=0x55;XBYTE[2]=0x56;XBYTE[2]=0x57;XBYTE[2]=0x58;对外部硬件而言,上述四条语句分别表示不同的操作,会产生四种不同的动作,但是编译器就不能像对待纯粹的程序那样对上述四条语句进行优化,只认为XBYTE[2]=0x58(即忽略前三条语句,.. 阅读全文
posted @ 2013-04-03 22:49 wiessharling 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 本节课主要说明:我们可以把static const int size = 1000;替换为enum { size = 1000};在旧版的c++ 中,不支持在类中使用static const。这意味着const对在类中的常量表达式不起作用,不过,人们还是想得做到这一点。使用不带实例的无标记的enum(通常称为 enum hack)。例如下面代码:class Bunch{ enum { size = 1000}; int i[size];};int _tmain(int argc, _TCHAR* argv[]){ cout<<"sizeof(Bunch) = " 阅读全文
posted @ 2013-04-03 22:31 wiessharling 阅读(350) 评论(0) 推荐(0) 编辑
摘要: 1、生存空间和生存范围 看下面代码:vector<int> fibon_seq(int size){ if(size <= 0 || size >= 1024) { size = 8; } vector<int> elems(size); for(int ix = 0; ix < size; ++ix) { if( ix == 0 || ix == 1) elems[ix] = 1; else elems[ix] = elems[ix-1] + elems[ix-2]; ... 阅读全文
posted @ 2013-03-30 11:47 wiessharling 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 1、所有类型的对象都可以采用toString()方法而转化为String类型String val = o.toString() // o is Objectchar grade = val.charAt(0);2、break and continue语句 当在while、 do/while、或switch结构中执行break语句时,程序将立即从该结构中退出,继续执行结构之后的语句。 break语句的常规用法是从一个循环中提前退出,或者跳出一个switch结构的剩下部分。终止for结构。 continue:当在while、do/while、for结构中执行continue语句时,会跳过该结... 阅读全文
posted @ 2013-03-28 11:03 wiessharling 阅读(133) 评论(0) 推荐(0) 编辑
摘要: ---恢复内容开始---1、C的效率 在C中,保持效率的一个方法是使用宏(macro)。宏的实现是用预处理器而不是编译器。预处理器直接用宏代码代替宏调用,所以就没有参数压栈、生成汇编语言的CALL、返回参数、执行汇编语言的RETURN等的开销。2、C ++中宏存在的问题 2.1 不是函数调用,隐藏了难以发现的错误。优先级等等问题#define FLOOR(x,b) x>=b?0:1if(FLOOR(a&0x0F,0x07)) //……if(a&0x0F>=0x07?0:1)#define FLOOR(x,b) ((x)>=(b)?0:1) 2.2 预处理器不允 阅读全文
posted @ 2013-03-27 20:29 wiessharling 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 8.3 传递和返回地址 事实上,无论什么时候传递一个地址给一个函数,都应该尽可能用const修饰它。如果不这么样做,就不能以const指针参数的方式使用这个函数。 看下面的例子:// const_reference.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"void t(int*){}void u(const int* cip){ //*cip = 2; *cip can't be modified int i = *cip; //int* ip2 = cip; non-const}const char* v(){ re... 阅读全文
posted @ 2013-03-27 20:00 wiessharling 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 函数参数和返回值1、传递const 如果函数参数是按值传递,可用指定的参数是const的。void fun(const int i){ i++;//error const i means can't be change}当调用函数fun()时,i为原变量的副本,这个副本在函数fun内不可被修改。2、返回const值 对返回值来讲,如果一个函数的返回值是一个常量: const int f(); 这就约定了函数框架里的原变量是不会被修改。另外,因为只是按值返回的,所以这个变量被被制成副本。对于内部类型来说,按值返回的是不是一个const,是无关紧要的,所以按值返回一个内部类型时,应该... 阅读全文
posted @ 2013-03-27 14:17 wiessharling 阅读(420) 评论(0) 推荐(0) 编辑