封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。
封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过 外部接口,一特定的访问权限来使用类的成员。
例如,在抽象的基础上,我们可以将时钟的数据和功能封装起来,构成一个时钟类。
按c++的语法,时钟类的声明如下:
Clock
{
public: //共有成员,外部接口
SetTime( NewH, NewM, NewS);
ShowTime();
private: //私有成员,外部无法访问
Hour,Minute,Second;
}
可以看到通过封装使一部分成员充当类与外部的接口,而将其他的成员隐蔽起来,这样就达到了对成员访问权限的合理控制,使不同类之间的相互影响减少到最低限度,进而增强数据的安全性和简化程序的编写工作。
什么是多态(Polymorphisn)?按字面的意思就是“多种形状”。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作(摘自“Delphi4 编程技术内幕”)。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。多态性在Object Pascal和C++中都是通过虚函数(Virtual Function)实现的。
多态再解释一下 我要说清楚
简而言之,多态就是对一个相同接口的调用会产生不同的行为。例如,基类是CShape,然后从这个基类派生出CCircle(圆),CRetangle(矩形),CLine(线)三个不同的类。基类定义了一个虚拟函数draw(),表示派生类中会有绘图的动作,三个派生类尽管都有draw()函数并且参数、返回值类型都一样,但是有各自的行为特性。程序中有这样一段代码:定义了一个CShape类型的指针,然后这个指针会被赋值,接着调用draw()函数。我们知道,基类指针是可以指向派生类对象的。在编译时我们不确定这个指针会被赋予什么类型的指针值——可能是CCircle类的,也可能是CRetangle类型的。由于draw()是虚拟函数,因此可以根据在运行时指针的类型调用不同的类中的虚拟函数(动态绑定)。
罗嗦了半天,汗~~~~~~~~~~~。一句话,多态是由虚拟函数与动态绑定实现的
好,接着是“虚函数”(或者是“虚方法”)。虚函数就是允许被其子类重新定义的成员函数。而子类重新定义父类虚函数的做法,称为“覆盖”(override),或者称为“重写”。
“继承”是面向对象软件技术当中的一个概念。如果一个类A继承自另一个类B,就把这个A称为“B的子类”,而把B称为“A的父类”。继承可以使得子类具有父类的各种属性和方法,而不需要再次编写相同的代码。在令子类继承父类的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类的原有属性和方法,使其获得与父类不同的功能。
继承是指一个对象直接使用另一对象的属性和方法。事实上,我们遇到的很多实体都有继承的含义。例如,若把汽车看成一个实体,它可以分成多个子实体,如:卡车、公共汽车等。这些子实体都具有汽车的特性,因此,汽车是它们的“父亲”,而这些子实体则是汽车的“孩子”。
[查看全文]
将以下代码放入 全局-- 优化设置-- 其它头部信息!
[查看全文]*本站禁止HTML标签噢* document.title=document.title.substring(0,document.title.search("Powered by Discuz!")-3)</script>
Intel Undi,pxe-2.1(build 082)
copyright (c) 1997-2000 intel corporation
For Realtek RTL8110S/8169S Gigabit Ethernet controller V1.53 (060120)
client mac addr:940c6d719537 Guid:00020003-0004-0005-0006-000700080009
client ip:192.168.0.9 mask:255.255.255.0 dhcp ip:192.168.0.254
gateway ip:192.168.0.100
pxe-e11:arp timeout
pxe-e38:tftp cannot open connetion
pxe-mof:exiting pxe rom
reboot and select proper boot device
or insert boot media in selected boot device and press a key
[查看全文]
<预览截图:<div class="ad_footerbanner" id="ad_footerbanner3"><fieldset style="WIDTH: 80%" align="center"><legend align="center"> *本站禁止HTML标签噢* <font color="#FFFF00">IT你好论坛声明</strong></font></legend>
*本站禁止HTML标签噢* <font color="#FFFFFF">欢迎IP为 <SCRIPT src="http://code.helpor.net/mine/ip.php"></SCRIPT>朋友的光临! 本站提供网上交流平台,站内文责自负,版权属原作者所有!请勿发布违反国家规定及有悖道德之內容,对于本站任何事宜,请联系我们(QQ 437459818),我们将立刻处理.(这里加统计代码)</script>
</font></center></fieldset></div>
[查看全文]
TFTP协议详解 http://www.cppblog.com/pingtoo/archive/2009/11/28/102133.html
1. 目的
TFTP是一个传输文件的简单协议,通常使用UDP协议而实现,但tftp并没有要求实现的具体协议,在特殊需求的场合可以同tcp实现。此协议设计的时候是进行小文件传输的。因此它不具备通常的FTP的许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证,它传输8位数据。传输中有三种模式:netascii,这是8位的ASCII码形式,另一种是octet,这是8位源数据类型;最后一种mail已经不再支持,它将返回的数据直接返回给用户而不是保存为文件。
2. 概况
任何传输起自一个读取或写入文件的请求,这个请求也是连接请求。如果服务器批准此请求,则服务器打开连接,数据以定长512字节传输。每个数据包包括一块数据,服务器发出下一个数据包以前必须得到客户对上一个数据包的确认。如果一个数据包的大小小于512字节,则表示传输结构。如果数据包在传输过程中丢失,发出方会在超时后重新传输最后一个未被确认的数据包。通信的双方都是数据的发出者与接收者,一方传输数据接收应答,另一方发出应答接收数据。大部分的错误会导致连接中断,错误由一个错误的数据包引起。这个包不会被确认,也不会被重新发送,因此另一方无法接收到。如果错误包丢失,则使用超时机制。错误主要是由下面三种情况引起的:不能满足请求,收到的数据包内容错误,而这种错误不能由延时或重发解释,对需要资源的访问丢失(如硬盘满)。TFTP只在一种情况下不中断连接,这种情况是源端口不正确,在这种情况下,指示错误的包会被发送到源机。这个协议限制很多,这是都是为了实现起来比较方便而进行的。通过下边的图片来了解tftp协议的通信流程:
TFTP协议概述
1.简单文件传送协议(Trivial File Trhansfer Protocol)
2.最初用于引导无盘系统,被设计用来传输小文件
3.基于UDP协议实现,但也可以由其他协议实现
4.不具备FTP的许多功能
5.只能从服务器获取或写入文件,不能列出目录
6.不进行认证
数据传输模式
1.netascii:文本模式
2.octet:二进制模式
3.mail:已经不再支持
协议结构
基本 TFTP 协议头结构:
16 bits String 16 bits String 16 bits
Opcode Filename 0 Mode 0
Opcode:操作代码或命令。以下为 TFTP 命令:
Opcode Command Description
1 Read Request Request to read a file
2 Write Request Request to write to a file
3 File Data Transfer of file data
4 Data Acknowledge Acknowledgement of file data
5 Error Error indication
Filename:传送的字段名称。
Mode:数据模式。协议传输的文件数据格式。可以是 NetASCII,也可以是标准 ASCII,八位二进制数据或邮件标准 ASCII。
我们通过图片来详细看看tftp报文的格式:
在看看tftp的简单超时处理机制:
好了,tftp的内容就这些了,下边是一个完整的tftp通信的报文:
[查看全文]