自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

认知 行动 坚持

涛哥不知何许人也,亦不详其姓字。闲静少言,不慕荣利。好读书,求甚解。常著文章自娱,颇示己志。忘怀得失,有始有终...

  • 博客(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

ipscanner.rar

获取网络的ip, host name和mac地址。我想免费让大家下载, 但csdn规定了必须设置积分, 没办法。

2017-12-01

linux protobuf安装文件

linux, google protobuf, 安装文件。 使用方法:http://blog.csdn.net/stpeace/article/details/53029812

2016-11-04

linux tree命令的源码

很多linux上没有tree命令, 该资源提供了tree命令的源码, 大家可以下载, 编译并安装, 具体请参考:http://blog.csdn.net/stpeace/article/details/49524273

2015-11-01

编译好的openssl库和头文件

编译好的openssl库, 欢迎使用, 具体使用方法, 请见http://blog.csdn.net/stpeace/article/details/41921287

2014-12-14

入门数据库sqlite3的最佳实践资料

入门数据库sqlite3的最佳实践资料, 里面是我打包好的程序, 附加一些数据库工具, 非常可以。 当然你也可以参考我的博文http://blog.csdn.net/stpeace/article/details/38503843

2014-08-12

Wireshark抓包工具

Wireshark抓包分析工具, 非常好用, 非常实用。

2014-06-08

优秀的截图软件

截图软件fast stone. 解压即可使用。 解压后, 可能会产生一些依赖性文件, 请不要轻易删除。

2014-05-25

获取网卡信息所需的头文件和库

获取网卡信息所需的头文件和库:IPEXPORT.H Iphlpapi.h IPHLPAPI.LIB IPRTRMIB.H IPTYPES.H

2013-10-19

哈希值计算软件

可以计算md5, sha1, sha256等哈希值的工具软件,我无法形容它的优秀。

2013-10-18

在Windows下学习Linux命令

在Windows下想学linux命令的同志,你终于找到了该资料。用法:解压,然后双击其中的cmd.exe, 然后就可以输入linux命令了,比如ls等(千万要注意,不要进行路径切换,否则linux命令就执行不了,总之,要确保相应文件在当前目录下)。

2013-08-08

计算机网络第5版谢希仁编配套光盘资料

计算机网络第5版谢希仁编配套光盘资料,这是计算机考研的指定教材对应的资料,你应该拥有它。

2013-07-19

OllyDBG反汇编工具

OllyDBG反汇编工具,非常强大。深化功底,需此工具。

2013-07-19

masm汇编器

微软的汇编器,其中有关键的masm.exe和link.exe,我试过,发现可用。

2013-07-19

word转pdf的插件

word转pdf的插件,直接安装即可,安装完后,“另存”word文档的时候,可以选择pdf(我用的word版本为2007)。

2013-07-18

音频处理软件Gold Wave

一款强大的音频处理软件,可以对音频进行各种处理。例如:如果你在准备某考试,需要听音频资料,但是,你嫌音频太慢,而且你的MP3播放器无法加速,那么你可以用该软件对音频本身进行加速,即改变音频本身,使之变快。另外,在处理的时候,可以实现批处理(我亲自实践过,发现可行)。

2013-07-17

H.264visa软件

一款非常强大的H.264视频码流的解析软件,可以看到解码后视频的像素值,运动矢量,宏块等非常多的信息(也可以打开原始的YUV视频,并看到像素值,但必须先用该软件打开某一H.264视频码流),比Elecard StreamEye软件(有bug)更为强大,我一直用H.264visa,目前没有发现有什么bug. 另外,该软件安装后1个月就会过期,没有关系,1个月后,你重新安装一次即可。

2013-07-13

Elecard StreamEye

Elecard StreamEye,一款分析H.264视频码流的工具,如果你在学习H.264,那么,你应该拥有它。

2013-07-13

YUVviewer :原始的YUV视频的播放器

原始的YUV视频的播放器(软件不是我写的),如果你做视频处理、视频压缩编码、视频通信、视频检索、视频取证,那么你很可能需要它。该软件的缺点是:你无法看到YUV视频的像素值。

2013-06-24

经典的C语言编译器:TC2.0

一款经典的C语言编译器:Borland Turbo C 2.0. 怀念Borland产品的人可以用一下,体验一下DOS下的编程。如果是C语言初学者,建议用MS的VC++6.0. 我试过,该TC2.0可以正常使用。

2013-06-23

空空如也

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

TA关注的人

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