\WINDOWS\system32\rundll32.exewindhcp.ocx,start>
4、最后要提醒注意的就是卸载QQ。
重新安装。
因为QQ文件夹中的TIMPlatform.exe已被病毒覆盖。
Prop是文档向导,说明文件
Type类型(type)以及类型系统的起源以及研究与发展是独立于OOP的。
早在五十年代的FORTRAN语言编译器实现中,就已经采用类型系统作为类型检查的一种手段。
广义的类型一般被定义为一种约束,也就是一种逻辑公式。
DOS命令Type
能:
显示ASCII码文件的内容。
类型:
内部命令。
格式:
Type[盘符:
][路径]〈文件名〉
使用说明:
(1)显示由ASCII码组成的文本文件,对.EXE和.COM等为扩展名的文件,其显示的内容是无法阅读的,没有实际意义2;
(2)该命令一次只可以显示一个文件的内容,不能使用通配符;
(3)如果文件有扩展名,则必须将扩展名写上;
(4)当文件较长,一屏显示不下时,可以按以下格式显示;TYPE[盘符:
][路径]〈文件名〉|MORE,MORE为分屏显示命令,使用些参数后当满屏时会暂停,按任意键会继续显示。
(5)若需将文件内容打印出来,可用如下格式:
TYPE[盘符:
][路径]〈文件名〉,>PRN
此时,打印机应处于联机状态.
程序中的type区块:
用来声明类(包含类)。
类型(type)以及类型系统的起源以及研究与发展是独立于OOP的。
早在五十年代的FORTRAN语言编译器实现中,就已经采用类型系统作为类型检查的一种手段。
广义的类型一般被定义为一种约束,也就是一种逻辑公式。
而在对类型的研究过程中产生多种方法,比如【C&W1985】等。
而代数方法(algebraicapproach)是一种非常好的建立类型的形式化规范的方法。
代数中的一个类型对应于一系列元素,在它们之上定义代数操作。
同时在此基础上二阶λ演算已经被用于继承和模板所支持的模型。
在上面两种方法中,类型被认为是一系列满足确定约束条件的元素,更抽象的方式可以把一个类型当作规定一个约束条件,如果我们规定的约束条件越好,相对应的被定义元素的集合就越精密,所以逻辑公式(logicalformulas)就成为描叙类型特征的最合适工具。
在这里,我们不想深入的探究对于类型理论的各种不同的数学模型,我们需要明白的是类型(type)以及类型理论这个在编程语言中经常应用到的概念的内涵是极其丰富的,而其自身理论的发展并非局限于OOP之中,但当两者相结合的时候就对我们的程序观产生了巨大的影响。
在面向对象设计(OOD)中,“归类”是重要步骤,一个精心设计的类层次结构是则是OOD的重要成果。
类的层次和界面定义得好,将造福软件系统的实现者、维护者和以后的扩展者:
他们会惊喜地发现,许多错综复杂的关系在清晰的类型层次中不言自明;而失败的类层次结构则是灾难的来源:
为了绕过不合理的类型设计带来的束缚,编码员不得不把各种能想到的技巧都用了上去【4】——包括强制的类型cast、直接对对象内存的访问等,而这些技巧往往和潜在的bug形影相随。
在数据结构的归纳和发展中,类型也扮演了重要的角色。
ADT的引入是一个里程碑,早期的语言就开始struct(C)、record(Pascal)等复合结构类型为ADT提供支持。
ADT是抽象数据类型。
在程序设计语言中,类型的概念由来已久,而其内涵也在不断发展之中。
语言对类型机制更好效率更高的支持成为语言成熟度的标志。
OOP语言对类型的支持机制包括class、interface、inheritance、polymorphism,RTTI,各种cast等,这为编程带来了许多方便,因为所有概念在语言中都有了对应物。
关于OOP语言中类型的形象阐释,请参见我写的《漫谈程序设计语言的选择和学习》(发表于《程序员》2001年10月刊)和与朋友合译的《ObjectUnencapsulated:
Eiffel,JavaandC++》1.6节。
而在泛性程序设计(GP)概念中,所谓“分类学”也就是对类型的一套定义。
而模板参数的constraint,则其实是“类型所需符合之类型”,不妨将其与OOP中interface之概念作一对照:
一个class需实现某一interface,才可说其属于(is-a)一定类型。
C++中无interface直接对应物【2】,可这样表述:
一个class需公有继承一个abstractclass,则说其属于(is-a)该abstractclass所定义之类型。
而constrainedgenericity中,模板参数需符合某一constraint,该模板才能实例化。
在GP和STL的著作中是这样表述的:
模板参数(这是一个类型)叫model,其需符合的constraint(一个更为抽象的类型)叫做concept。
对model更多的constraint叫做refinement。
所以,concept-model-refinement可以和interface-class-inheritance对照理解。
值得指出的是,Eiffel之父BertrandMeyer在OOP经典著作Object-OrientedSoftwareConstruction2/e中将泛型定义为类型参数化,并认为泛型技术和OOP中的继承与多态技术并列:
泛型描述水平方向的类型关系;而继承则描述垂直方向上的类型关系。
Bertrand认为泛型方法是经典OOP方法的补充,因此也可纳入OOP的范畴。
)两者在实现上的不同是,C++中GP采用的是generativetemplate实现方法,这是用空间换时间的方法,所以大量使用模板的程序常体积较大,但运行速度稍快于对应的OOP版本;而OOP则采用增加间接层的方法,增加了时间开销。
另外还有一点不同:
OOP是成熟的设计方法,interface、class、inheritance等都有语言元素直接对应,而GP的许多概念则缺乏语言级支持。
类(class),类型(type),接口(interface)
这三个概念是在OOP中出现频率最多,也最容易混淆的。
而对于这三个概念的澄清也是文章写作的初衷。
让我们先看看大师们对于这三个概念的描叙----
“ThefundamentalunitofprogramminginJavaprogramminglanguageistheclass,butthefundamentalunitoftheobject-orienteddesignisthetype.whileclassesdefinetypes,itisveryusefulandpowerfultobeabletodefineatypewithoutdefiningaclass.Interfacedefinetypesinanabstractformasacollectionofmethodsorothertypesthatformthecontractforthetype.”【Jams2000】。
“InC++,Aclassisauserdefinitetype”【B.S1998】。
“Atypeisanameusedtodenoteaparticularinterface……Anobjectmayhavemanytypes,andwidelydifferentobjectscanshareatype.Partofanobject’sinterfacemaybecharacterizedbyonetype,andotherpartsbyothertypes.Twoobjectsofthesametypeneedonlysharepartsoftheirinterface.Interfacecancontainotherinterfaceassubset.Wesaythatatypeisasubtypeofanotherifitsinterfacecontaintheinterfaceofitssupertype.Oftenwespeakofasubtypeinheritingtheinterfaceofitssupertype”【Gamma1995】
在其中,一共出现了四个概念:
类(class),类型(type),接口(interface)以及契约(contract)。
这里我们说到的类型和上面提到的类型有所不同,是狭义的OOP中的类型。
为了理解这几个概念,我先划分出三个概念域:
一个是针对现实世界的,一个是针对特定程序设计范型的(在这里就是OO设计范型),最后一个是针对编译器实现的。
也就是说,在现实世界中的概念必须有一种手段映射到OO范型中去,而OO范型中的概念也应该在编译器实现中有相同的概念对应。
由此,我们可以这样说,类是做为现实世界中的概念,而传统的OOPL都会提供class关键字来表示对现实世界模拟的支持。
而接口,是作为OO程序设计范型中与类对应的一个概念。
在OO设计中,我们所要做的就是针对接口进行设计和编程,而接口的实质含义就是对象之间的一种契约。
而类型就是编译器实现中针对类和接口所定义的对应概念。
可以这样说,类是现实世界中存在的客观概念,是唯物的。
接口是设计人员定义出来的,存在于设计人员心中的概念,是唯心的。
而类型是类和接口这两种概念的编译器实现的映射概念,也是唯物的。
类型主要是用来指导编译器的类型检查的谓词,类是创建现实对象的模板,接口是OO设计中的关键概念。
这三个概念相互区别(分别位于不同的概念域),又相互联系(都是代表相同的概念的不同概念域的映射)。
最常见的Java语句:
peoplea=newman();
这代表了什么?
程序员向编译器声明了一个people类型(type)的对象变量a,而对象变量a本身却指向了一个man类(class)的实体(而在编译器中理解是对象变量a指向了一个类型为man的实体)。
【Jams2000】,其中句子的根本含义我们可以概括如下:
声明一个类或者一个接口都同时向编译器注册了一个新的类型,而此类或者接口以及类型都是共享同样的一个名字。
也就是说。
编译器所能理解的全部都是类型,而程序员的工作是把现实中的类概念转化为设计中的接口概念,而编译器对应于上两种概念都有直接的支持,那就是一个类声明或者接口声明在编译器的理解来看就是一个类型声明。
但是反过来却不一定成立。
一个类可以有多个接口(一个类完全有可能实现了设计人员的多个契约条件),同时也就可能有多个类型(因为类型不过是接口这个设计域内的概念在编译器中的实现)。
Size_t类型定义在cstddef头文件中,该文件是C标准库的头文件stddef.h的C++版。
它是一个与机器相关的unsigned类型,其大小足以保证存储内存中对象的大小。
例如:
bitset的size操作返回bitset对象中二进制位中的个数,返回值类型是size_t。
例如:
在用下标访问元素时,vector使用vector:
:
size_type作为下标类型,而数组下标的正确类型则是size_t。
size_t是标准C库中定义的,应为unsignedint。
数据类型"socklen_t"和int应该具有相同的长度。
否则就会破坏BSD套接字层的填充.POSIX开始的时候用的是size_t,LinusTorvalds(他希望有更多的人,但显然不是很多)努力向他们解释使用size_t是完全错误的,因为在64位结构中size_t和int的长度是不一样的,而这个参数(也就是accept函数的第三参数)的长度必须和int一致,因为这是BSD套接字接口标准.最终POSIX的那帮家伙找到了解决的办法,那就是创造了一个新的类型"socklen_t".LinuxTorvalds说这是由于他们发现了自己的错误但又不好意思向大家伙儿承认,所以另外创造了一个新的数据类型。
在C++中,设计size_t就是为了适应多个平台的。
size_t的引入增强了程序在不同平台上的可移植性。
size_t是针对系统定制的一种数据类型,一般是整型,因为C/C++标准只定义一最低的位数,而不是必需的固定位数。
而且在内存里,对数的高位对齐存储还是低位对齐存储各系统都不一样。
为了提高代码的可移植性,就有必要定议这样的数据类型。
一般这种类型都会定义到它具体占几位内存等。
当然,有些是编译器或系统已经给定义好的。
经测试发现,在32位系统中size_t是4字节的,而在64位系统中,size_t是8字节的,这样利用该类型可以增强程序的可移植性。
一个基本的无符号整数的C/C++类型。
它是sizeof操作符返回的结果类型。
该类型的大小是选择,因此,它可以存储在理论上是可能的任何类型的数组的最大大小。
在32位系统为size_t将采取32位和64位-64位。
换句话说,一个指针可以被安全地放进为size_t类型(一个例外是类的函数指针,但是这是一个特殊的情况下)。
为size_t类型通常用于循环,数组索引,大小的存储和地址运算。
虽然为size_t可以存储一个指针,它是更好地使用另一个unsinged整数类型uintptr_t形式,目的(它的名字反映了它的能力)。
在某些情况下,使用为size_t类型是更有效,比使用更无符号类型的程序员习惯性安全。
size_t是一个无符号整数memsize基地型的C/C++语言的标准库中定义的。
此类型在C头文件stddef.h,在文件cstddef中所述的C++。
位于头文件stddef.h中定义的类型在全局命名空间,而cstddef地方在命名空间std为size_t类型。
由于C语言的标准头文件stddef.h纳入的兼容性的目的,在这些方案中,您可以在全局命名空间的类型的C++程序(:
为size_t,为size_t)和命名空间std(STD:
:
为size_t)。
类型size_t静态分析PVS-Studio中的条款,是指memsize类型。
该分析仪包括Viva64在详细的错误检测系统的64位程序和代码优化。
Viva64分析仪中的许多诊断消息与上使用memsize类型的建议。
使用memsize的类型(如为size_t,ptrdiff_t,INT_PTR),而不是在64位程序的32位类型。
Write函数名
功能:
写到一文件中
用法:
intwrite(inthandel,void*buf,intnbyte);
程序例:
#include
#include
#include
#include
#include
#include
intmain(void)
{
inthandle;
charstring[40];
intlength,res;
/*
Createafilenamed"TEST.$$$"inthecurrentdirectoryandwrite
astringtoit.If"TEST.$$$"alreadyexists,itwillbeoverwritten.
*/
if((handle=open("TEST.$$$",O_WRONLY|O_CREAT|O_TRUNC,
S_IREAD|S_IWRITE))==-1)
{
printf("Erroropeningfile.\n");
exit
(1)