博文

批处理实用基础(非常有用)(2006-09-13 09:38:00)

摘要:批处理实用基础(非常有用)     扩展名是bat(在nt/2000/xp/2003下也可以是cmd)的文件就是批处理文件。 首先批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好象我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。 其次,批处理文件是一种简单的程序,可以通过条件语句(if)和流程控制语句(goto)来控制命令运行的流程,在批处理中也可以使用循环语句(for)来循环执行一条命令。当然,批处理文件的编程能力与C语言等编程语句比起来是十分有限的,也是十分不规范的。批处理的程序语句就是一条条的DOS命令(包括内部命令和外部命令),而批处理的能力主要取决于你所使用的命令。 第三,每个编写好的批处理文件都相当于一个DOS的外部命令,你可以把它所在的目录放到你的DOS搜索路径(path)中来使得它可以在任意位置运行。一个良好的习惯是在硬盘上建立一个bat或者batch目录(例如C:\BATCH),然后将所有你编写的批处理文件放到该目录中,这样只要在path中设置上c:\batch,你就可以在任意位置运行所有你编写的批处理程序。 第四,在DOS和Win9x/Me系统下,C:盘根目录下的AUTOEXEC.BAT批处理文件是自动运行批处理文件,每次系统启动时会自动运行该文件,你可以将系统每次启动时都要运行的命令放入该文件中,例如设置搜索路径,调入鼠标驱动和磁盘缓存,设置系统环境变量等。下面是一个运行于Windows 98下的autoexec.bat的示例:@ECHO OFFPATH C:\WINDOWS;C:\WINDOWS\COMMAND;C:\UCDOS;C:\DOSTools;C:\SYSTOOLS;C:\WINTOOLS;C:\BATCHLH SMARTDRV.EXE /XLH DOSKEY.COM /INSERTLH CTMOUSE.EXESET TEMP=D:\TEMPSET TMP=D:\TEMP 批处理的作用简单的说,批处理的作用就是自动的连续执行多条命令。 这里先讲一个最简单的应......

阅读全文(146) | 评论:0

接口的用法(2006-09-11 10:52:00)

摘要:接口的用法 接口是实现构件可插入性的关键,可插入构件的关键在于存在一个公用的接口,以及每个构件实现了这个 接口。   什么是接口?   Java中的接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实 现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。   接口的两种含义:一,Java接口,Java语言中存在的结构,有特定的语法和结构;二,一个类所具有 的方法的特征集合,是一种逻辑上的抽象。前者叫做“Java接口”,后者叫做“接口”。   在Java语言规范中,一个方法的特征仅包括方法的名字,参数的数目和种类,而不包括方法的返回类 型,参数的名字以及所抛出来的异常。在Java编译器检查方法的重载时,会根据这些条件判断两个方法是 否是重载方法。但在Java编译器检查方法的置换时,则会进一步检查两个方法(分处超类型和子类型)的 返还类型和抛出的异常是否相同。   接口继承和实现继承的规则不同,一个类只有一个直接父类,但可以实现多个接口。   Java接口本身没有任何实现,因为Java接口不涉及表象,而只描述public行为,所以Java接口比Java 抽象类更抽象化。   Java接口的方法只能是抽象的和公开的,Java接口不能有构造器,Java接口可以有public,静态的和 final属性。   接口把方法的特征和方法的实现分割开来。这种分割体现在接口常常代表一个角色,它包装与该角色 相关的操作和属性,而实现这个接口的类便是扮演这个角色的演员。一个角色由不同的演员来演,而不同 的演员之间除了扮演一个共同的角色之外,并不要求其它的共同之处。   为什么使用接口?   两个类中的两个类似的功能,调用他们的类动态的决定一种实现,那他们提供一个抽象父类,子类分 别实现父类所定义的方法。   问题的出现:Java是一种单继承的语言,一般情况下,哪个具体类可能已经有了一个超类,解决是给 它的父类加父类,或者给它父类的父类加父类,只到移动到类等级结构的最顶端。这样一来,对一个具体 类的可插入性的设计,就变成了对整个等级结构中所有类的修改。   接口是可插入性的保证。   在一个等级结构中的任何一个类都可以实现一个接口,这个接口会影响到此类......

阅读全文(2338) | 评论:0

Windows消息大全使用详解(2006-08-25 12:26:00)

摘要:    消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息。例如,对于单击鼠标所产生的消息来说,这个记录中包含了单击鼠标时的坐标。这个记录类型叫做TMsg,它在Windows单元中是这样声明的:typeTMsg = packed recordhwnd: HWND; / /窗口句柄message: UINT; / /消息常量标识符wParam: WPARAM ; // 32位消息的特定附加信息lParam: LPARAM ; // 32位消息的特定附加信息time: DWORD; / /消息创建时的时间pt: TPoint; / /消息创建时的鼠标位置end;消息中有什么?是否觉得一个消息记录中的信息像希腊语一样?如果是这样,那么看一看下面的解释:hwnd 32位的窗口句柄。窗口可以是任何类型的屏幕对象,因为Win32能够维护大多数可视对象的句柄(窗口、对话框、按钮、编辑框等)。message 用于区别其他消息的常量值,这些常量可以是Windows单元中预定义的常量,也可以是自定义的常量。wParam 通常是一个与消息有关的常量值,也可能是窗口或控件的句柄。lParam 通常是一个指向内存中数据的指针。由于wParam、lParam和Pointor都是32位的,因此,它们之间可以相互转换。WM_NULL = $0000;WM_CREATE = $0001;          应用程序创建一个窗口WM_DESTROY = $0002;         一个窗口被销毁WM_MOVE = $0003;            移动一个窗口WM_SIZE = $0005;            改变一个窗口的......

阅读全文(1721) | 评论:0

走近 STL(转)(2006-08-23 16:18:00)

摘要: 注:这篇文章为介绍了STL的基本概念和算法,而算法是容易遗忘的,故贴在这里,遗忘的时候查阅一下。   走近 STL作者:陶汉军中国石油大学 计算机02-2   本文面向的读者:学习过C++程序设计语言(也就是说学习过Template),但是还没有接触过STL的STL的初学者。这实际上是我学习STL的一篇笔记,老鸟就不用看了。什么是泛型程序设计  我们可以简单的理解为:使用模板的程序设计就是泛型程序设计。就像我们我们可以简单的理解面向对象程序设计就是使用虚函数的程序设计一样。STL是什么   作为一个C++程序设计者,STL是一种不可忽视的技术。Sandard Template Library (STL):标准模板库,更准确的说是 C++ 程序设计语言标准模板库。学习过MFC的人知道,MFC是微软公司创建的 C++ 类库。而与之类似的是 STL 是模板库,只不过 STL 是 ANSI/ISO 标准的一部分,而 MFC 只不过是微软的一个产品而已。也就是说STL是所有C++编译器和所有操作系统平台都支持的一种库,说它是一种库是因为,虽然STL是一种标准,也就是说对所有的编译器来说,提供给C++程序设计者的接口都是一样的。也就是说同一段STL代码在不同编译器和操作系统平台上运行的结果都是相同的,但是底层实现可以是不同的。 令人兴奋的是,STL的使用者并不需要了解它的底层实现。 试想一下,如果我们有一把能打开所有锁的钥匙,那将是多么令人疯狂啊。嘎嘎。这个歪梦我做了20多年鸟。  STL的目的是标准化组件,这样你就不用重新开发它们了。你可以仅仅使用这些现成的组件。STL现在是C++的一部分,因此不用额外安装什么。它被内建在你的编译器之内。为什么我们需要学习STL STL是 C++的ANSI/ISO 标准的一部分,可以用于所有C++语言编译器和所有平台(Windows/Unix/Linux..)。STL的同一版本在任意硬件配置下都是可用的; STL 提供了大量的可复用软件组织。例如,程序员再也不用自己设计排序,搜索算法了,这些都已经是STL的一部分了。嘎嘎,有意思吧; 使用STL 的应用程序保证了得到的实现在处理速度和内存利用方面都是高效的,因为STL设计者们已经为我们考虑好了; 使用STL编写的代码更容易修改和阅读,这是当然的......

阅读全文(168) | 评论:0

pragma指令简介(转)(2006-08-23 14:40:00)

摘要:    Tag:Win编程   由Thinkboy提供 pragma指令简介在编写程序的时候,我们经常要用到#pragma指令来设定编译器的状态或者是指示编译器完成一些特定的动作.下面介绍了一下该指令的一些常用参数,希望对大家有所帮助!一. message 参数。 message 它能够在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为: #pragma message(“消息文本”) 当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。 当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有没有正确的设置这些宏,此时我们可以用这条指令在编译的时候就进行检查。假设我们希望判断自己有没有在源代码的什么地方定义了_X86这个宏可以用下面的方法 #ifdef _X86 #pragma message(“_X86 macro activated!”) #endif 当我们定义了_X86这个宏以后,应用程序在编译时就会在编译输出窗口里显示“_ X86 macro activated!”。我们就不会因为不记得自己定义的一些特定的宏而抓耳挠腮了 二. 另一个使用得比较多的#pragma参数是code_seg。格式如: #pragma code_seg( [ [ { push | pop}, ] [ identifier, ] ] [ "segment-name" [, "segment-class" ] ) 该指令用来指定函数在.obj文件中存放的节,观察OBJ文件可以使用VC自带的dumpbin命令行程序,函数在.obj文件中默认的存放节为.text节如果code_seg没有带参数的话,则函数存放在.text节中push (可选参数) 将一个记录放到内部编译器的堆栈中,可选参数可以为一个标识符或者节名pop(可选参数) 将一个记录从堆栈顶端弹出,该记录可以为一个标识符或者节名identifier (可选参数) 当使用push指令时,为压入堆栈的记录指派的一个标识符,当该标识符被删除的时候和其相关的堆栈中的记录将被弹出堆栈 "segment-name" (可选参数) 表示函数存放的节名例如://默认情况下,函数被存放在.text节中void func1() { // st......

阅读全文(164) | 评论:0

vc之pragma宏的简单应用(2006-08-23 14:35:00)

摘要:    整理了一下msdn中关于pragma的一些用法,在此列出我认为是比较有用的一些pragma指令,并加上我的一些说明:   1 The following pragma causes the linker to search for the EMAPI.LIB library while linking. The linker searches first in the current working directory and then in the path specified in the LIB environment variable: #pragma comment( lib, "emapi" )-----------------------------------------------------------------------2 When the compiler encounters a deprecated symbol, it issues C4995: void func1(void) {}void func2(void) {}int main() {   func1();   func2();   #pragma deprecated(func1, func2)   func1();   // C4995   func2();   // C4995}----------------------------------------------------------------------3 The following code fragment uses the message pragma to display a message during compilation: #if _M_IX86 == 500#pragma message( "Pentium processor build" )#endif--------------------------------------------------------------------......

阅读全文(314) | 评论:0

C/C++头文件一览(2006-08-23 14:34:00)

摘要:  Tag:头文件 C++   C、传统 C++#include <assert.h>    //设定插入点#include <ctype.h>     //字符处理#include <errno.h>     //定义错误码#include <float.h>     //浮点数处理#include <fstream.h>    //文件输入/输出#include <iomanip.h>    //参数化输入/输出#include <iostream.h>   //数据流输入/输出#include <limits.h>    //定义各种数据类型最值常量#include <locale.h>    //定义本地化函数#include <math.h>     //定义数学函数#include <stdio.h>     //定义输入/输出函数#include <stdlib.h>    //定义杂项函数及内存分配函数#include <string.h>    //字符串处理#include <strstrea.h>   //基于数组的输入/输出#include <time.h>     //定义关于时间的函数#include <wchar.h>     //宽字符处理及输入/输出#include <wctype.h>    //宽字符分类//////////////////////////////////////////////////////////////////////////标准 C++ (同上的不再注释)#include <algorithm>    //STL 通用算法#include <bitset>     //STL 位集容器#include <cctype>#include <cerrno>#include <clocale>#include <cmath>#include <complex>     //复数类......

阅读全文(141) | 评论:0

MFC入门<4>: 消息映射(2006-08-22 13:37:00)

摘要:  引用:http://www.czvc.com/tech/MFCJMJC/mfc.html  应用程序放在窗口中的任何用户界面对象都具有两种可控制的特性:1) 它的外观,2) 它响应事件的行为。在上一讲中,你已经学习了CStatic控制和如何使用样式属性来定制用户界面对象的外观。这些概念可用于MFC中的所有不同控制类。  在本讲中,我们将介绍CButton控制,以理解消息映射和简单的事件处理。然后还要介绍使用CScrollBar控制的稍微复杂点的例子。  理解消息映射  在第二讲中,MFC程序不包括主要函数或时间循环。所有的事件处理都是作为CWinApp的一部分在后台处理的。因为它们是隐藏的,所以我们需要一种方法来告诉不可见的时间循环通告我们应用程序所感兴趣的事件。这需要一种叫做消息映射的机制。消息映射识别感兴趣的事件然后调用函数来响应这些事件。  例如,如果你要编写一个程序,当用户按下标有“退出”的按钮时要退出应用程序。在程序中,你编写代码来建立按钮:你指示按钮应如何动作。然后,为其父窗口建立用户单击按钮时的消息映射,它试图要传递消息给其父窗口。为了建立父窗口的消息,你要建立截取消息映射的机制,并且使用按钮的消息。当一指定的按钮事件发生时,消息映射会请求MFC调用一指定的函数。在这种情况下,单击退出按钮就是所感兴趣的事件。然后你把退出应用程序的代码放到指定的函数中。  其它的工作就由MFC来做了。当程序执行时,用户单击“退出”按钮时,按钮就会自己加亮。然后MFC自动调用相应的函数,并且程序会终止。只使用很少的几行代码你就响应了用户事件。  CButton类  在上一讲中所讨论的CStatic控制是唯一不响应用户时间的控制。Windows中所有的其它控制都可响应用户事件。第一,当用户处理它们时,它们会自动更新其外观(例如,当用户单击按钮时,按钮会自己加亮以给用户一个反馈)。第二,每个不同的控制都要发送信息给你的代码以使程序能响应用户的需要。例如,当单击按钮时,按钮就会发送一个命令消息。如果你编写代码接收消息,则你的代码就能响应用户事件。  为了理解这个过程,我们从CButton控制开始。下面的代码说明了建立按钮的过程:  // button1.cpp  #include   #define IDB_BUTTON 100  // Declar......

阅读全文(2635) | 评论:0

模拟计算器(C++)(2006-08-22 12:46:00)

摘要:  Tag:C++ C 算法   //author: baker//email:baker1203@sina.com//course designing for data structures and program design in c++//time:16/5/2006/*                         a simulant calculatordescription: requiring design a simulant calculator ,which could take operations such as +,-,*,/ ,( ),or functon SQR ,ABScondition:inputted expression can limit into int type.therefore ,you must check the expression for exactness.if the errorstake place ,the program would give an alarm. */ #include<iostream>   #include<conio.h>#include<stack>   #include<string>   #include<cstdlib>#include<math.h>   using namespace std;   void  init(string& s)     //³õʼ»¯ÊäÈë±í´ïÊ&f......

阅读全文(3366) | 评论:0

printf()用法(2006-08-22 12:35:00)

摘要:  Tag:C printf   printf()用法 函数名: printf 功  能: 产生格式化输出的函数 用  法: int printf(char *format...); 程序例: #include <stdio.h> #include <string.h> #define I 555 #define R 5.5 int main(void) {    int i,j,k,l;    char buf[7];    char *prefix = buf;    char tp[20];    printf("prefix  6d      6o      8x        10.2e        "           "10.2f\n");    strcpy(prefix,"%");    for (i = 0; i < 2; i++)    {       for (j = 0; j < 2; j++)          for (k = 0; k < 2; k++)      for (l = 0; l < 2; l++)      ......

阅读全文(2603) | 评论:0