- 博客(31)
- 资源 (19)
- 收藏
- 关注
原创 Windows应用程序的封装
在本文中,我们将讨论Windows应用程序的封装,此处的封装是用函数来封装函数,而不是用类来封装函数(MFC是这样做的)。那么,我们为什么要用函数来封装函数呢?因为这对理解MFC有很大好处。 先看没有封装的程序:#include // 回调函数LRESULT CALLBACK MyFun( HWND hwnd, UINT uMsg, WPARAM wParam,
2013-05-26 19:19:59 8962
原创 MFC类层次结构仿真(参考了侯俊杰的《深入浅出MFC》)
说明:1. 在本文中,我们在析构函数中用printf代替cout, 至于具体原因,之前的博文已经讲过,这里不再赘述。 2. 仿真是在Windows Console上进行的。 在仿真MFC类层次结构之前,我们先来复习一下与this指针相关的一个典型程序:#include using namespace std;clas
2013-05-26 16:47:52 8691 1
原创 C++中的overload,隐藏、override有什么区别?
1. overload:#include using namespace std;void print(int x){ cout << "int C++" << endl;}void print(char c){ cout << "char C++" << endl;}int main(){ int n = 1; char ch = 'a'; print(n)
2013-05-26 14:50:23 8963 2
原创 使用C++多重继承时要小心
在Java里,没有多重继承,在C++里面有,但是,在用的时候,要小心。先看一个错误程序:#include using namespace std;class Father{public: void claim() { cout << "Father is good!" << endl; }};class Mother{public: void claim()
2013-05-26 14:11:49 7999 1
原创 this指针再探讨:究竟绑定谁?
在深入MFC之前,应该先搞懂最简单的this指针。我们先看简单的程序:#include using namespace std;class Base{public: void fun() { cout << "Base fun" << endl; }};class Derived : public Base{public: void fun()
2013-05-26 08:22:03 7700 1
原创 C++全局对象的析构函数有时候没有被调用?非也!(编译器为VC++6.0)
说明:以下程序都是在VC++6.0中的结果。 在写程序的时候,我发现一个十分古怪的问题,下面会慢慢道来。原来的程序比较复杂,为了简便起见,只抽出最关键的部分来解释。 我们首先来看程序:#include class Base{public: Base() { cout << "Base Constructor" << endl;
2013-05-25 21:33:39 10881
原创 DOS应用程序,Windows Console 应用程序,Windows应用程序有什么区别?
DOS应用程序: 往事,真的不想回首,开始学C语言的时候,学校用的是TC, 都什么年代了,还用TC, 真想问问决定用TC的那个老师,为什么要用TC, 不用VC++编译器。学生刚开始学C语言,你说,用TC方便还是VC++方便?明显是在为难初学者,不提了。想了解什么是DOS应用程序,那个用TC写的就是DOS应用程序。当然啦,DOS应用程序是无法调用Windows的API的。
2013-05-25 14:34:14 9943
原创 C,C++,VC, VC++,MFC有什么区别?
概念是对具体的一种抽象,因此,弄懂概念很重要,很多人总是混淆下面这些概念:C,C++,VC,VC++,MFC. 下面,我们来看看这些概念有什么区别: C: 一门计算机语言,用于人与计算机沟通。 C++: 一门计算机语言,用于人与计算机沟通,比C更强大。 VC和VC++可以看成一个
2013-05-25 13:49:04 17254 4
原创 深入详解Windows消息机制(2012年某公司实习生招聘面试试题)
我们首先来看看用户是如何和应用软件打交道的,如图: 上图就是用户与应用软件交互的一个逻辑图,我们在用Word等软件时,就是这种模型。从用户的感觉来看,用户是在与应用软件对应的窗口打交道,用户感觉离应用软件很近很近。真的很近么?非也!虽然用户在逻辑上离应用软件的确很近,但在物理上,用户离应用软件却是相对较远的。下面,我们来看看,用户究竟是如何与应用软件打交道的(用户不需要知
2013-05-25 12:09:41 11361
原创 什么是回调函数?
回调函数,简单来说,就是当某一事件发生,触发某一函数的执行,那么,这个函数可以看作回调函数。 我们知道,在Windows应用程序中,程序的入口是WinMain,为什么是WinMain呢?因为WinMain可以看作Windows定义的一个接口,Windows对写应用程序的程序员说:你在WinMain函数中写程序,一点击“运行”按钮(注意这个事件),WinMain函数就会被Windo
2013-05-24 21:58:24 8778 1
原创 如何在Windows Application中应用printf函数?
下面,我们先看一个最简单的Windows应用程序:#include int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd ){ MessageBox(0, "调用了WinMain函数", "测试:", 0); re
2013-05-22 18:06:12 11618 2
原创 sprintf很有用 (但用snprintf更安全)
#include int main(){ int a = 123456; char str[10]; sprintf(str, "%d", a); printf("%s\n", str); // 123456 sprintf(str, "%c", 'c'); printf("%s\n", str); // c return 0;}
2013-05-19 15:14:07 7616
原创 小话驱动程序
驱动程序(Device Driver)是什么呢?有什么作用呢? 答:驱动程序是一种程序,是软的,没有重量,没有味道,类似于我们平常写的C程序。驱动程序用来驱动I/O硬件设备,缺乏这个驱动程序,很多I/O硬件设备便无法正常工作,驱动程序实际上是I/O硬件设备的接口,可以将其理解为对I/O硬件设备的封装与抽象。 下面来详细说说: 1、I/O硬件设
2013-05-18 14:54:48 7714 1
原创 Windows SDK API是个啥意思?
这是一篇闲扯的文章,我始终坚信:Everything should be made as simple as possible. 下面来看看什么是Windows SDK API. SDK(sotfware development kit), API(application programming interface) 还是画图说吧:
2013-05-18 13:42:05 8317
原创 一个最简单的Windows应用程序
下面是一个最简单的Windows应用程序:#include int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd ){ MessageBox(0,"该吃饭啦!", "温馨提示:", 0); return 0;}
2013-05-18 12:33:23 7984
原创 《C++程序设计教程》 钱能
书评: 这是周立功老师推荐的一本书,讲C++,讲得比较透彻,我个人认为,这是国内讲C++最好的书(谭浩强老师讲C还不错,但讲C++的那本书不够深入,只适合入门)。该书涉及面广,包括面向过程编程,基于对象编程,面向对象编程,泛型编程。 该书一直在强调抽象机制,抽象编程,也的确感受到了抽象的威力。作者钱能老师有点鄙视C语言,有意思。该书阐述的道理非常深刻,打的比方也
2013-05-18 11:14:33 14102 3
原创 从函数重载到函数模板
函数重载:#include using namespace std;void swap(int &x, int &y){ int tmp = x; x = y; y = tmp;}void swap(float &x, float &y){ float tmp = x; x = y; y = tmp;}void swap(double &x, double
2013-05-18 10:41:52 7423 2
原创 C++头文件中不应该放哪些东西?
先说明一下:以下程序针对的是C++语言 直接上代码(程序中有错): file1.h文件如下:#ifndef HEADER_FILE1int a;#define HEADER_FILE1#endif file1.cpp文件如下:#include "file1.h" main.cpp文件如下:#include "file1.h"
2013-05-17 19:24:42 9472
原创 用clock函数来记录程序运行时间
#include #include using namespace std;int main(){ int i, j; int t1, t2; t1 = clock(); for(i = 0; i < 30000; i++) { for(j = 0; j < 30000; j++) { ; } } t2 = clock(); cout << t2 -
2013-05-17 17:06:47 7819
原创 如何查看数据在内存中的二进制比特信息?
#include using namespace std;void displayIntBits(int n){ int i; int width = 8; int len = 32; for(i = len - 1; i >= 0; i--) { cout > i) & 1); if(0 == i % width) { cout << " "; } }
2013-05-17 12:44:28 8304 1
原创 C++中的多态(动态多态)究竟是如何实现的?
为了叙述简便,在本文中,将动态多态性一律简化为多态性。 在前面的文章中,我们已经简要介绍了C++的多态性,也介绍了C++的虚函数表,下面,我们来看看C++是如何利用虚函数机制来实现多态性的。(题外话:实现多态性并不一定需要用到虚函数机制)。下面,我们还是从程序的角度来看,为了便于热身,我们来看一个极为简单的程序:#include using namespace std;
2013-05-17 10:45:00 11266 3
原创 深入探讨C++的虚函数表
在本文中,我们来学习C++中的虚函数表。很喜欢苏轼的《题西林壁》: 横看成岭侧成峰,远近高低各不同。 不识庐山真面目,只缘身在此山中。 这首诗的哲理在于:对于同一个东西,从不同的角度看,结果是不一样的。下面来看一些铺垫性的程序:#include using namespace std;int main(){ float f
2013-05-15 22:50:22 7202 1
原创 C++中的this指针究竟是什么?
先来看一个简单的程序:#include using namespace std;class Human{private: int age;public: void setAge(int a) { age = a; } int getAge() { return age; }};int main(){ Human h; h.setAge(10
2013-05-15 14:02:01 7590 1
原创 关于多态(polymorphism)的初步知识(此处指动态多态)
#include using namespace std;class Human{public: virtual void eat() { cout << "Human: virtual void eat()" << endl; } void sleep() // 非虚函数,不具有多态性 { cout << "Human: void sleep()" << endl;
2013-05-15 12:14:17 7610 2
原创 函数重载(overloading)应注意的问题
#include using namespace std;// 以下四个函数构成重载(overloading)float add(int x, int y, int z){ cout << "int x, int y, int z" << endl; return x + y + z;}float add(int x, int y){ cout << "int x, in
2013-05-15 11:13:43 7806 1
原创 构串操作符#和合并操作符##的用法
构串操作符#:#include using namespace std;#define P(x) cout << #x << endl;#define Q(x) cout << "C" #x "C++" << endl;#define R(x) cout << #x #x #x << endl;int main(){ P(CPlusPlus); Q(v
2013-05-14 20:07:12 7761
原创 const用法总结以及构造函数、析构函数、拷贝构造函数的深入剖析
1. 用const时候,通常需要初始化:#includeusing namespace std;int main(){ int const i; // error C2734: 'i' : const object must be initialized if not extern return 0;}#includeusing namespace std;int
2013-05-14 13:36:21 7935 1
原创 如何写自己的内存复制函数?
库函数memcpy的原型是这样的:void *memcpy(void *dest, const void *src, size_t n); 下面,我们也来写个内存复制函数吧,主要是为了深入了解指针的应用,顺便熟悉一下assert的应用,程序如下:#include #include using namespace std;void myMemCpy(void *dst, void *sr
2013-05-13 22:04:22 7616 2
原创 用程序判断设置的是debug还是release以及assert在debug和release版本中的不同行为
程序如下:#include using namespace std;int main(){#ifdef _DEBUG // 注意:只有一个下划线 cout << "debug" << endl;#else cout << "release" << endl;#endif return 0;} 结果为:debug 在VC6.0下,点击Build,
2013-05-13 21:28:45 8309 1
原创 为什么“cout << &c << endl;”这个语句有问题?
先看程序:#include using namespace std;int main(){ char c = 'A'; cout << &c << endl; return 0;} 结果为乱码,为什么呢? 因为cout将&c当成了char *形式了,进而认为输出一个字符串,验证如下:int main(){ char c = 'A'; cout << &c <<
2013-05-06 14:49:57 9373 3
原创 《我们的战国》樱雪丸
我对日本了解甚少,这本书写的不错,浅显易懂,语言诙谐。 书中的人名较多,建议在阅读时画画逻辑图,这样人物之间的关系就比较清晰。一休,北条早云和斋藤道三都给人印象深刻,日本的战国,真是乱世啊。
2013-05-03 15:38:13 7418 1
linux protobuf安装文件
2016-11-04
linux tree命令的源码
2015-11-01
编译好的openssl库和头文件
2014-12-14
入门数据库sqlite3的最佳实践资料
2014-08-12
在Windows下学习Linux命令
2013-08-08
音频处理软件Gold Wave
2013-07-17
H.264visa软件
2013-07-13
YUVviewer :原始的YUV视频的播放器
2013-06-24
经典的C语言编译器:TC2.0
2013-06-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人