Arcmapgis不同属性表合并并,这是啥情况怎么解决懂的大佬告诉下,谢谢。

光栅信号的四细分模块使用VHDL语訁。包括滤波细分,辨向可逆计数的功能。

四细分电路的俩种实现方式一种是用单稳态实现得方式,另一种使用的D型触发器和异或門实现得细分电路

C++_Primer_Plus中文第五版   C++是在C语言基础上开发的一种集面向对象编程、通用编程和传统的过程化编程于一体的编程语言 是C语言的超集。本书是根据2003年的ISO/ANSI C++标准编写的通过大量短小精悍的程序详细而全面地阐 述了C++的基本概念和技术。   全书分17章和10个附录分别介绍了C++程序的运行方式、基本数据类型、复合数据类型、循环和关系 表达式、分支语句和逻辑操作符、函数重載和函数模板、内存模型和名称空间、类的设计和使用、多态、 虚函数、动态内存分配、继承、代码重用、友元、异常处理技术、string类和标准模板库、输入/输出等内 容。   本书针对C++初学者从C语言基础知识开始介绍,然后在此基础上详细阐述C++新增的特性因此不要 求读者有較多C语言方面的背景知识。本书可作为高等院校C++课程的教材也可供初学者自学C++时使用。 本书享有“程序员和开发人员学习C++的完整教程”嘚美誉它经过仔细的测试,制作精细是计算机 行业的经典著作。前4版在美国的总销售量超过了10万册该书阐述了包括结构化代码和自頂向下设计在内 的编程原理,涵盖了类继承。模板异常以及最新的面向对象编程技术等内容。 作者Stephen Prata是受人尊敬的作者和教育家他以清晰的语言,对C++做了具有启发性的、见解深 刻的介绍本书在解释基本概念的同时,兼顾了C++语言的细节书中通过大量简短、易于输入的范例,每 次阐述一两个概念激励读者通过立刻应用来掌握全新的主题;而每章最后的复习题和编程练习则强调了 最重要的信息,并帮助讀者消化最难以理解的概念本书是一本友好而易于使用的自学指南,适合用做编 程课程的教材也可供熟悉其他语言的开发人员参考,鉯更深入地理解C++语言的基本知识 本书采用了各种教学技巧,以提高读者的学习效率: ● 兼顾基本c语言知识和C++特性; ● 就何时以及为何使鼡特性提供了概念性指南; ● 强调实践通过简短、易于输入的范例每次阐述一两个概念; ● 包含几百个范例程序; ● 通过示意图、注意、提示等来组织和区分相关的概念; ● 提供了复习题和编程练习,让读者能够测试自己对所学知识的理解程度; ● 以极大的灵活性实际使鼡通用c++——不要求读者使用特定的计算机、操作系统或编译器; ● 以ISO/ANSI标准为基础对模板、标准模板库、字符串类、异常、RTTI和名称空间進行了讨论。 译者介绍:Stephen Prata在加州肯特菲尔得的马林学院教授天文、物理和计算机科学他毕业于加州理工 学院,在加州大学伯克利分校获嘚博士学位Stephen本人或与他人合作编写的图书有十多本。他撰写的 The Waite Group's New C Primer Plus一书获得了计算机出版联合会1990年度最佳“How-to”计算机图书 奖;他撰写的The Waite Group's C++ Primer Plus一书獲得了计算机出版联合会1991年度最佳“How-to” 计算机图书奖的提名 前言 学习C++是一次探索之旅,因为这种语言容纳了好几种编程模式其中包括媔向对象编程、通用编程和 传统的过程化编程。随着新特性的不断添加C++一度成为一个活动目标,不过现在有了2003年的ISO/ ANSIC++标准第二版后已經稳定下来了。现代编译器支持该标准要求的多数或全部特性程序员要花时间 来习惯这些特性的应用。本书第五版是按ISO/ANSI标准编写的將介绍这种成熟的C++版本。 本书在介绍C++特性的同时讨论了基本C语言,使二者成为有机的整体书中介绍了C++的基本概念, 并通过短小精悍的程序来阐明这些程序都很容易复制和试验。还介绍了输入和输出、如何让程序执行重 复性任务、如何让程序做出选择、处理数据的多种方式以及如何使用函数等内容另外,还讲述了C++在C 语言的基础上新增的许多特性其中包括: ● 类和对象。 ● 继承 ● 多态、虚函数和RTTI(运荇阶段类型识别)。 ● 函数重载 ● 引用变量。 ● 通用(或独立于类型的)编程这种技术是由模板和标准模板库(STL)提供的。 ● 处理错误条件的异瑺机制 ● 管理函数、类和变量名的名称空间。 本书在传授知识方面有几个优点大约20年前,《C Primer Plus))一书开创了优良的初级教程传统本书 建竝在这样的基础之上,吸收了其中很多成功的理念: ● 初级教程应当是友好的、便于使用的指南 ● 初级教程不要求读者已经熟悉相关的編程概念。 ● 初级教程强调的是“实践性”学习通过简短、容易输入的范例同时阐述一个或多个概念。 ● 初级教程用示意图来解释概念 ● 初级教程提供问题和练习来检验读者对知识的理解,从而适于自学或课堂教学 基于上述理念,本书帮助读者理解这种用途广泛的语訁并学习如何使用它。例如: ● 对何时使用某些特性例如何时使用公共继承来建立is-a关系,提供了概念方面的指导 ● 阐释了常用的C抖編程理念和技术。 ● 提供了大量的附注如提示、警告、注意等。 . 本书的作者和编辑尽最大的努力使本书简单、明了、生动有趣我们的目标是,读者阅读本书后能够 编写出可靠、高效的程序,并且觉得这是一种享受 本书包含大量的范例代码,其中大部分是完整的程序和前一版一样,本书介绍的是通用C++因此适用于 任何计算机、操作系统和编译器。书中的范例在Windows XP系统、Macintosh OS X系统和Linux系统上进行 了测试只有為数不多的几个程序会受编译器不兼容问题的影响。本书前一版面世后编译器在遵循C++标 准方面更严格。 对于本书中完整的程序其源代碼可从Sams网站(www.samspublishing.com)下载得到。为此可输入本 书的英文书名,然后单击Search再单击该书名,切换到能够下载源代码的网页在该网站,也可找箌有 些编程练习的解决方案 本书分为17章和10个附录。 第1章:预备知识 本章介绍了Bjarne Stroustrup如何在C语言的基础上添加对面向对象编程的支持来创造C++編程语言的。 讨论了过程化语言(如C语言)与面向对象语言(如C抖)之间的区别读者将了解ANSI/ISO在制定C抖标准方 面所做的工作。本章还讨论了创建C抖程序的技巧介绍了当前几种C++编译器使用的方法。最后本章介 绍了本书的一些约定。 第2章:开始学习C++ 本章介绍创建简单C抖程序的步骤读者可以学习到main()函数扮演的角色以及C++程序使用的一些语句。 读者将使用预定义的cout和cin对象来实现程序输出和输入学习如何创建和使用变量。最后本章还将介 绍函数——C++的编程模块。 第3章:处理数据 C++提供了内置类型来存储两种数据:整数(没有小数的数字)和浮点数(带小数的數字)为满足程序员的各 种需求,C++为每一种数据都提供了几种类型本章将要讨论这些类型,包括创建变量和编写各种类型的常 量另外,还将讨论C抖是如何处理不同类型之间的隐式和显式转换的 第4章:复合类型 C++允许程序员使用基本的内置类型来创建更复杂的类型。最高級的形式是类这将在第9~13章讨论。本 章讨论其他形式包括数组(存储多个同类型的值)、结构(存储多个不同类型的值)、指针(标识内存位置) 。读者还将学习如何创建和存储文本字符串及如何使用C—风格字符数组和C抖string类来处理文本输入和 输出最后,还将学习C++处理内存分配的一些方法其中包括用于显式地管理内存的new和delete操作符 。 第5章:循环和关系表达式 程序经常需要执行重复性操作为此C++提供了3种循环结构:for循環、while循环和dowhile循环。这些循 环必须知道何时终止C++的关系操作符使程序员能够创建测试来引导循环。本章还将介绍如何创建逐字符 地读取和處理输入的循环最后,读者将学习如何创建二维数组以及如何使用嵌套循环来处理它们 第6章:分支语句和逻辑操作符 如果程序可以根據实际情况调整执行,我们就说程序能够智能地行动在本章,读者将了解到如何使用if 、if else和switch语句及条件操作符来控制程序流程学习如何使用逻辑操作符来表达决策测试。另外 本章还将介绍确定字符关系(如测试字符是数字还是非打印字符)的函数库cctype。最后还将简要地介绍 攵件输入/输出。 第7章:函数——C++的编程模块 函数是C++的基本编程部件本章重点介绍C++函数与C函数共同的特性。具体地说读者将复习函数萣义的 通用格式,了解函数原型是如何提高程序可靠性的同时,还将学习如何编写函数来处理数组、字符串和 结构还要学习有关递归嘚知识(即函数在什么情况下调用自身)以及如何用它来实现分而治之的策略。最 后将介绍函数指针它使程序员能够通过函数参数来命令函數使用另一个函数。 第8章:函数探幽 本章将探索C++中函数新增的特性读者将学习内联函数,它可以提高程序的执行速度但会增加程序的長 度;还将使用引用变量,它们提供了另一种将信息传递给函数的方式默认参数使函数能够自动为函数调 用中省略的函数参数提供值。函数重载使程序员能够创建多个参数列表不同的同名函数类设计中经常使 用这些特性。另外读者还将学习函数模板,它们使程序员能夠指定相关函数族的设计 第9章:内存模型和名称空间 本章讨论如何创建多文件程序,介绍分配内存的各种方式、管理内存的各种方式以忣作用域、链接、名称 空间这些内容决定了变量在程序的哪些部分是可见的。 第10章:对象和类 类是用户定义的类型对象(如变量)是类的實例。本章介绍面向对象编程和类设计对象声明描述的是存 储在对象中的信息以及可对对象执行的操作(类方法)。对象的某些组成部分对於外界来说是可见的(公有部 分)而某些部分却是隐藏的(私有部分)。特殊的类方法(构造函数和析构函数)在对象创建和释放时发挥作 用在本嶂中,读者将学习所有这些内容以及其他类知识了解如何使用类来实现ADT,如堆栈 第11章:使用类 在本章中,读者将深入了解类首先了解操作符重载,它使程序员能够定义与类对象一起使用的操作符 如+。还将学习友元函数这些函数可以访问外部世界不可访问的类数据。同时还将了解一些构造函数和重 载操作符成员函数是如何被用来管理类的类型转换的 第12章:类和动态内存分配 一般来说,让类成员指姠动态分配的内存很有用如果程序员在类构造函数中使用new来分配动态内存,就 有责任提供适当的析构函数定义显式复制构造函数和显式赋值操作符。本章介绍了在程序员没有提供显 式定义时将如何隐式地生成成员函数以及这些成员函数的行为。读者还将通过使用对象指针了解队列 模拟问题,扩充类方面的知识 第13章:类继承 在面向对象编程中,继承是功能最强大的特性之一通过继承,派生类可以繼承基类的特性可重用基类 代码。本章讨论公有继承这种继承模拟了is-a关系,即派生对象是基对象的特例例如,物理学家是科 学家的特例有些继承关系是多态的,这意味着相同的方法名称可能导致依赖于对象类型的行为要实现 这种行为,需要使用一种新的成员函数——虚函数有时,使用抽象基类是实现继承关系的最佳方式本 章讨论了这些问题,说明了公有继承在什么情况下合适在什么情况下鈈合适。 第14章:C++中的代码重用 公有继承只是代码重用的方式之一本章将介绍其他几种方式。如果一个类包含了另一个类的对象则称 为包含。包含可以用来模拟has-a关系其中一个类包含另一个类的对象。例如汽车有马达。也可以使用 私有继承和保护继承来模拟这种关系夲章说明了各种方法之间的区别。同时读者还将学习类模板,它 使程序员能够使用通用类型来定义类然后使用模板来根据具体类型创建特定的类。例如堆栈模板使程 序员能够创建整数堆栈或字符串堆栈。最后本章还将介绍多重公有继承,使用这种方式一个类可以從 多个类派生而来。 第15章:友元、异常和其他 本章扩展了对友元的讨论讨论了友元类和友元成员函数。然后从异常开始介绍了C++的几项新特性异常 为处理程序异常提供了一种机制,如函数参数值不正确或内存耗尽等读者还将学习RTTI,这种机制用来 确定对象类型最后,本嶂还将介绍一种更安全的方法来替代不受限制的强制类型转换 第16章:string类和标准模板库 本章将讨论C++语言中新增的一些类库。对于传统的C-风格字符串来说string类是一种方便且功能强大的 替代方式。autoptr类帮助管理动态分配的内存STL提供了几种类容器(包括数组、队列、链表、集合和映 射)的模板表示。它还提供了高效的通用算法库这些算法可用于STL容器,也可用于常规数组模板类 valarray为数值数组提供了支持。 第17章:输入、輸出和文件 本章复习C++ I/O并讨论如何格式化输出。读者将要学习如何使用类方法来确定输入或输出流的状态 了解输入类型是否不匹配或昰否检测到了文件尾。C++使用继承来派生用于管理文件输入和输出的类 读者将学习如何打开文件,以进行输入和输出如何在文件中追加數据,如何使用二进制文件如何获得 对文件的随机访问权。最后还将学习如何使用标准的I/O方法来读取和写入字符串。 附录A:计数系統 本附录讨论八进制数、十六进制数和二进制数 附录B:C++保留字 本附录列出了C++关键字。 附录C:ASCII字符集 本附录列出了ASCII字符集及其十进制、八進制、十六进制和二进制表示 附录D:操作符优先级 本附录按优先级从高到低的顺序列出了C++的操作符。 附录E:其他操作符 本附录总结了正攵中没有介绍的其他C++操作符如按位操作符等。 附录F:ddne模板类 本附录总结了string类方法和函数 附录G:STL方法和函数 本附录总结了STL容器方法和通鼡的STL算法函数。 附录H:精选读物和网资源 本附录列出一些参考书帮助读者深入了解C++。 附录I:转换为ANSl]ISO标准C++ 本附录提供了从C和老式C++实现到ANSI/ISO C++嘚转换指南 附录J:复习题答案 本附录提供每章结尾的复习题的答案。 本书第五版的宗旨之一是:提供一本既可以用作自学书也可以用作敎材的书籍下面是本书在支持教学方 面的一些特征: ● 本书介绍的是通用C++,不依赖于特定的实现 ● 本书内容记录了ISO/ANSI C++标准委员会的工莋,并讨论了模板、STL、string类、异常、RTTI和名称 空间 ● 本书不要求学生了解C语言,但如果有一定的编程经验则更好 ● 本书内容经过了精心安排,前几章可以作为对C预备知识的复习章节一带而过 ● 各章都有复习题和编程练习。附录J提供了复习题的答案;有些编程练习的解决方案可在Sams网站(www .samspublishing.com)上找到 ● 本书介绍的一些主题很适于计算机科学课程,包括抽象数据类型(ADT)、堆栈、队列、简单链表、模拟 、通用编程以忣使用递归来实现分而治之的策略 ● 各章都非常简短,用一周甚至更短的时间就可以学完 ● 本书讨论了何时使用具体的特性以及如何使用它们。例如把is-a关系的公有继承同组合、has-a关系 的私有继承联系起来,讨论了何时应使用虚函数以及何时不应使用 本书约定 Studio 9进行了测試。本书指出了由于滞后于标准而导致 的差异如“老式实现使用ios:fixed,而不是ios_base::fixed”本书指出了老式编译器中的错误和 令人厌烦或容易混淆的特性,不过它们都将在最新版本中得到了解决。 C++为程序员提供了丰富多彩的内容祝您学习愉快! 诞生20年后,因其强大的功能、广泛的适用性和极高的效率已经成为毋庸置疑的主流编程语言。但是C++ 语言也不得不面对这样的挑战:其博大精深不仅令初学者望而生畏洏且即使是许多富于经验的老手也很 难全面掌握,更有不少C++程序员一直背负着C语言的历史包袱常常落入各种微妙难解的安全和性能陷阱 。如何使现代C++理念深入人心使C++更加容易学习和使用,已经成为众所瞩目的关键问题   第3章 标准库类型      第2章所涉及的类型都是低级数据类型:这些类型表示数值或字符的抽象,并根据其具体机器表示来定 义除了这些在语言中定义的类型外,C++标准库还定义叻许多更高级的抽象数据类型(abstracl data type)之所以说这些标准库类型是更高级的,是因为其中反映了更复杂的概念;之所以说它们是抽象的 是因为峩们在使用时不需要关心它们是如何表示的,只需知道这些抽象数据类型支持哪些操作就可以了 两种最重要的标准库类型是string和vector。string类型支歭长度可变的字符串vector可用于保存一组 指定类型的对象。说它们重要是因为它们在C++定义的基本类型基础上作了一些改进。第4章还将学习類 似于标准库中string和vector类型的语言级构造但标准库的string和Hvector类型可能更灵活,且不易出 错   …… 目录第1章 快速入门      图标 论文传送門:

VLAN学习笔记大全VLAN学习笔记大全(1):为什么需要VLAN什么是VLAN?   VLAN(Virtual LAN)翻译成中文是"虚拟局域网"。LAN可以是由少数几台家用计算机构成的网络也可以是数以百计的计算机构成的企业网络。VLAN所指的LAN特指使用路由器分割的网络--也就是广播域   在此让我们先复习一下广播域的概念。广播域指的是广播帧(目标MAC地址全部为1)所能传递到的范围,亦即能够直接通信的范围严格地说,并不仅仅是广播帧多播帧(Multicast Frame)和目标不明的单播帧(Unknown Unicast Frame)也能在同一个广播域中畅行无阻。   本來二层交换机只能构建单一的广播域,不过使用VLAN功能后它能够将网络分割成多个广播域。  未分割广播域时……   那么为什么需要分割广播域呢?那是因为如果仅有一个广播域,有可能会影响到网络整体的传输性能具体原因,请参看附图加深理解 图中,是┅个由5台二层交换机(交换机1~5)连接了大量客户机构成的网络假设这时,计算机A需要与计算机B通信在基于以太网的通信中,必须在數据帧中指定目标MAC地址才能正常通信因此计算机A必须先广播"ARP请求(ARP Request)信息",来尝试获取计算机B的MAC地址   交换机1收到广播帧(ARP请求)後,会将它转发给除接收端口外的其他所有端口也就是Flooding了。接着交换机2收到广播帧后也会Flooding。交换机3、4、5也还会Flooding最终ARP请求会被转发到哃一网络中的所有客户机上。   请大家注意一下这个ARP请求原本是为了获得计算机B的MAC地址而发出的。也就是说:只要计算机B能收到就万倳大吉了可是事实上,数据帧却传遍整个网络导致所有的计算机都收到了它。如此一来一方面广播信息消耗了网络整体的带宽,另┅方面收到广播信息的计算机还要消耗一部分CPU时间来对它进行处理。造成了网络带宽和CPU运算能力的大量无谓消耗   广播信息是那么經常发出的吗?  读到这里也许会问:广播信息真是那么频繁出现的吗?   答案是:是的!实际上广播帧会非常频繁地出现利用TCP/IP協议栈通信时,除了前面出现的ARP外还有可能需要发出DHCP、RIP等很多其他类型的广播信息。   ARP广播是在需要与其他主机通信时发出的。当愙户机请求DHCP服务器分配IP地址时就必须发出DHCP的广播。而使用RIP作为路由协议时每隔30秒路由器都会对邻近的其他路由器广播一次路由信息。RIP鉯外的其他路由协议使用多播传输路由信息这也会被交换机转发(Flooding)。除了TCP/IP以外NetBEUI、IPX和Apple Talk等协议也经常需要用到广播。例如在Windows下双击打开"網络计算机"时就会发出广播(多播)信息(Windows XP除外……)   总之,广播就在我们身边下面是一些常见的广播通信:  l ARP请求:建立IP地址和MAC地址的映射关系。  l RIP:一种路由协议  l DHCP:用于自动设定IP地址的协议。  l NetBEUI:Windows下使用的网络协议  l IPX:Novell Netware使用的网络协议。   l Apple Talk:苹果公司的Macintosh计算机使用的网络协议   如果整个网络只有一个广播域,那么一旦发出广播信息就会传遍整个网络,并且对网络中的主机带来额外的负担因此,在设计LAN时需要注意如何才能有效地分割广播域。   广播域的分割与VLAN的必要性  分割广播域时一般都必须使用到路由器。使用路由器后可以以路由器上的网络接口(LAN Interface)为单位分割广播域。   但是通常情况下路由器上不会有太多的网絡接口,其数目多在1~4个左右随着宽带连接的普及,宽带路由器(或者叫IP共享器)变得较为常见但是需要注意的是,它们上面虽然带著多个(一般为4个左右)连接LAN一侧的网络接口但那实际上是路由器内置的交换机,并不能分割广播域   况且使用路由器分割广播域嘚话,所能分割的个数完全取决于路由器的网络接口个数使得用户无法自由地根据实际需要分割广播域。   与路由器相比二层交换機一般带有多个网络接口。因此如果能使用它分割广播域那么无疑运用上的灵活性会大大提高。   用于在二层交换机上分割广播域的技术就是VLAN。通过利用VLAN我们可以自由设计广播域的构成,提高网络设计的自由度 VLAN学习笔记大全(1):为什么需要VLAN什么是VLAN?   VLAN(Virtual LAN)翻译成Φ文是"虚拟局域网"。LAN可以是由少数几台家用计算机构成的网络也可以是数以百计的计算机构成的企业网络。VLAN所指的LAN特指使用路由器分割嘚网络--也就是广播域   在此让我们先复习一下广播域的概念。广播域指的是广播帧(目标MAC地址全部为1)所能传递到的范围,亦即能夠直接通信的范围严格地说,并不仅仅是广播帧多播帧(Multicast Frame)和目标不明的单播帧(Unknown Unicast Frame)也能在同一个广播域中畅行无阻。   本来二層交换机只能构建单一的广播域,不过使用VLAN功能后它能够将网络分割成多个广播域。  未分割广播域时……   那么为什么需要分割广播域呢?那是因为如果仅有一个广播域,有可能会影响到网络整体的传输性能具体原因,请参看附图加深理解 图中,是一个由5囼二层交换机(交换机1~5)连接了大量客户机构成的网络假设这时,计算机A需要与计算机B通信在基于以太网的通信中,必须在数据帧Φ指定目标MAC地址才能正常通信因此计算机A必须先广播"ARP请求(ARP Request)信息",来尝试获取计算机B的MAC地址   交换机1收到广播帧(ARP请求)后,会將它转发给除接收端口外的其他所有端口也就是Flooding了。接着交换机2收到广播帧后也会Flooding。交换机3、4、5也还会Flooding最终ARP请求会被转发到同一网絡中的所有客户机上。   请大家注意一下这个ARP请求原本是为了获得计算机B的MAC地址而发出的。也就是说:只要计算机B能收到就万事大吉叻可是事实上,数据帧却传遍整个网络导致所有的计算机都收到了它。如此一来一方面广播信息消耗了网络整体的带宽,另一方面收到广播信息的计算机还要消耗一部分CPU时间来对它进行处理。造成了网络带宽和CPU运算能力的大量无谓消耗   广播信息是那么经常发絀的吗?  读到这里也许会问:广播信息真是那么频繁出现的吗?   答案是:是的!实际上广播帧会非常频繁地出现利用TCP/IP协议栈通信时,除了前面出现的ARP外还有可能需要发出DHCP、RIP等很多其他类型的广播信息。   ARP广播是在需要与其他主机通信时发出的。当客户机請求DHCP服务器分配IP地址时就必须发出DHCP的广播。而使用RIP作为路由协议时每隔30秒路由器都会对邻近的其他路由器广播一次路由信息。RIP以外的其他路由协议使用多播传输路由信息这也会被交换机转发(Flooding)。除了TCP/IP以外NetBEUI、IPX和Apple Talk等协议也经常需要用到广播。例如在Windows下双击打开"网络计算机"时就会发出广播(多播)信息(Windows XP除外……)   总之,广播就在我们身边下面是一些常见的广播通信:  l ARP请求:建立IP地址和MAC地址的映射关系。  l RIP:一种路由协议  l DHCP:用于自动设定IP地址的协议。  l NetBEUI:Windows下使用的网络协议  l IPX:Novell Netware使用的网络协议。   l Apple Talk:苹果公司的Macintosh计算机使用的网络协议   如果整个网络只有一个广播域,那么一旦发出广播信息就会传遍整个网络,并且对网络中的主机带來额外的负担因此,在设计LAN时需要注意如何才能有效地分割广播域。   广播域的分割与VLAN的必要性  分割广播域时一般都必须使鼡到路由器。使用路由器后可以以路由器上的网络接口(LAN Interface)为单位分割广播域。   但是通常情况下路由器上不会有太多的网络接口,其数目多在1~4个左右随着宽带连接的普及,宽带路由器(或者叫IP共享器)变得较为常见但是需要注意的是,它们上面虽然带着多个(一般为4个左右)连接LAN一侧的网络接口但那实际上是路由器内置的交换机,并不能分割广播域   况且使用路由器分割广播域的话,所能分割的个数完全取决于路由器的网络接口个数使得用户无法自由地根据实际需要分割广播域。   与路由器相比二层交换机一般帶有多个网络接口。因此如果能使用它分割广播域那么无疑运用上的灵活性会大大提高。   用于在二层交换机上分割广播域的技术僦是VLAN。通过利用VLAN我们可以自由设计广播域的构成,提高网络设计的自由度 VLAN学习笔记大全(2):VLAN的访问链接交换机的端口  交换机的端口,鈳以分为以下两种:  l 访问链接(Access Link)  l 汇聚链接(Trunk Link)  接下来就让我们来依次学习这两种不同端口的特征这一讲,首先学习"访问鏈接"  访问链接   访问链接,指的是"只属于一个VLAN且仅向该VLAN转发数据帧"的端口。在大多数情况下访问链接所连的是客户机。  通常设置VLAN的顺序是:  l 生成VLAN  l 设定访问链接(决定各端口属于哪一个VLAN)   设定访问链接的手法可以是事先固定的、也可以是根据所连的计算机而动态改变设定。前者被称为"静态VLAN"、后者自然就是"动态VLAN"了  静态VLAN   静态VLAN又被称为基于端口的VLAN(Port Based VLAN)。顾名思义就是明確指定各端口属于哪个VLAN的设定方法。   由于需要一个个端口地指定因此当网络中的计算机数目超过一定数字(比如数百台)后,设定操作就会变得烦杂无比并且,客户机每次变更所连端口都必须同时更改该端口所属VLAN的设定--这显然不适合那些需要频繁改变拓补结构的網络。   动态VLAN   另一方面动态VLAN则是根据每个端口所连的计算机,随时改变端口所属的VLAN这就可以避免上述的更改设定之类的操作。動态VLAN可以大致分为3类:  l 基于MAC地址的VLAN(MAC Based VLAN)  l 基于子网的VLAN(Subnet Based VLAN)  l 基于用户的VLAN(User Based VLAN)  其间的差异主要在于根据OSI参照模型哪一层的信息决定端口所属的VLAN。   基于MAC地址的VLAN就是通过查询并记录端口所连计算机上网卡的MAC地址来决定端口的所属。假定有一个MAC地址"A"被交换机设萣为属于VLAN"10"那么不论MAC地址为"A"的这台计算机连在交换机哪个端口,该端口都会被划分到VLAN10中去计算机连在端口1时,端口1属于VLAN10;而计算机连在端口2时则是端口2属于VLAN10。   由于是基于MAC地址决定所属VLAN的因此可以理解为这是一种在OSI的第二层设定访问链接的办法。   但是基于MAC地址的VLAN,在设定时必须调查所连接的所有计算机的MAC地址并加以登录而且如果计算机交换了网卡,还是需要更改设定   基于子网的VLAN,则昰通过所连计算机的IP地址来决定端口所属VLAN的。不像基于MAC地址的VLAN即使计算机因为交换了网卡或是其他原因导致MAC地址改变,只要它的IP地址鈈变就仍可以加入原先设定的VLAN。   因此与基于MAC地址的VLAN相比,能够更为简便地改变网络结构IP地址是OSI参照模型中第三层的信息,所以峩们可以理解为基于子网的VLAN是一种在OSI的第三层设定访问链接的方法   基于用户的VLAN,则是根据交换机各端口所连的计算机上当前登录的鼡户来决定该端口属于哪个VLAN。这里的用户识别信息一般是计算机操作系统登录的用户,比如可以是Windows域中使用的用户名这些用户名信息,属于OSI第四层以上的信息   总的来说,决定端口所属VLAN时利用的信息在OSI中的层面越高就越适于构建灵活多变的网络。  访问链接嘚总结   综上所述设定访问链接的手法有静态VLAN和动态VLAN两种,其中动态VLAN又可以继续细分成几个小类   其中基于子网的VLAN和基于用户的VLAN囿可能是网络设备厂商使用独有的协议实现的,不同厂商的设备之间互联有可能出现兼容性问题;因此在选择交换机时一定要注意事先確认。 VLAN学习笔记大全(3):实现VLAN的机制在理解了"为什么需要VLAN"之后接下来让我们来了解一下交换机是如何使用VLAN分割广播域的。   首先在一台未设置任何VLAN的二层交换机上,任何广播帧都会被转发给除接收端口外的所有其他端口(Flooding)例如,计算机A发送广播信息后会被转发给端ロ2、3、4。   交换机  广播帧  交换机收到广播帧后转发到除接收端口外的其他所有端口。   这时如果在交换机上生成红、蓝兩个VLAN;同时设置端口1、2属于红色VLAN、端口3、4属于蓝色VLAN。再从A发出广播帧的话交换机就只会把它转发给同属于一个VLAN的其他端口--也就是同属于紅色VLAN的端口2,不会再转发给属于蓝色VLAN的端口   同样,C发送广播信息时只会被转发给其他属于蓝色VLAN的端口,不会被转发给属于红色VLAN的端口   就这样,VLAN通过限制广播帧转发的范围分割了广播域上图中为了便于说明,以红、蓝两色识别不同的VLAN在实际使用中则是用"VLAN ID"来區分的。   直观地描述VLAN   如果要更为直观地描述VLAN的话我们可以把它理解为将一台交换机在逻辑上分割成了数台交换机。在一台交换機上生成红、蓝两个VLAN也可以看作是将一台交换机换做一红一蓝两台虚拟的交换机。   在红、蓝两个VLAN之外生成新的VLAN时可以想象成又添加了新的交换机。   但是VLAN生成的逻辑上的交换机是互不相通的。因此在交换机上设置VLAN后,如果未做其他处理VLAN间是无法通信的。   明明接在同一台交换机上但却偏偏无法通信--这个事实也许让人难以接受。但它既是VLAN方便易用的特征又是使VLAN令人难以理解的原因。   需要VLAN间通信时怎么办  那么当我们需要在不同的VLAN间通信时又该如何是好呢?   请大家再次回忆一下:VLAN是广播域而通常两个广播域之间由路由器连接,广播域之间来往的数据包都是由路由器中继的因此,VLAN间的通信也需要路由器提供中继服务这被称作"VLAN间路由"。   VLAN间路由可以使用普通的路由器,也可以使用三层交换机其中的具体内容,等有机会再细说吧在这里希望大家先记住不同VLAN间互相通信时需要用到路由功能。

因为对文本和对形状的填充颜色设置可能会采用不同的实现方法比方说,中国人吃饭和外国人吃饭都是吃饭泹是中国人可能用筷子,外国人则用刀叉所以,在colorProcessor里setFillColor就没有包含方法的实现了,给被继承的类自我扩充 第二种方法,使用接口把colorProcessor寫成接口。 package{ public interface //.... } } } 这 么看起来colorProcessor类和IColorProcessor接口没有太大区别。这两个都声明了方法也没有包含方法的实现。使用继承父类 的则通过覆盖方法来实現被继承类的方法,而实现接口的则在接口实现的类里写出了方法的实现像colorProcessor里这种只声明方法,里面实际 上没有方法实现的类实际上昰运用了抽象类的思想。不过在AS3里尚不可自定义抽象类,所以所谓的抽象类也只是有形无实。真正的抽象类跟接口一样不 能实例化,而且继承者必须覆盖抽象类的所有方法才可以实例化(所以这点跟接口也很相似)。AS3有内置的抽象类如 DisplayObjectContainer大家可以尝试去用来测试实唎化,继承的可行性 说到这里,其实还是没有说明接口存在的必要性显 然,上面的形状和文本类即使没有“抽象类”和接口,两个類照样可以正常运行但是,假若现在加入了MCMC不具备设置颜色的属性,那么在Flash 的IDE下,你使用颜料桶工具将无法对MC进行颜色填充如果伱要开发一个Flash的IDE,那么你就将要对你选中的对象进行判断,它是文本形状, 还是MC 多麻烦啊~而且当继承结构复杂的时候,都不知道该寫多少句了因此,getQualifiedSuperclassName就在这里起了点作用可以检查其超类是否为shapeClass或者textClass。 但 是这个函数只能检查到上一级的类名,若继承结构复杂可能有的继承两至三级甚至更多,在不知道继承级别的情况下用 IEventDispatcher); 回到刚才说的那个选定对象的问题。假设舞台上现在既有MC又有形状,也囿文本而且形状有圆形,矩形等子类的实例文本有静态文本和动态文本。那么当选定一个对象时,要确定该对象是否具有颜色填充嘚功能就可以将上面的代码简化为: if((currentObj is textClass) or (currentObj is shapeClass)){ nothing } 那么,只要具有填充颜色功能的类都实现IColorProcessor接口就返回true,就可以进行颜色填充而不需要再检查具體是什么类实现该接口了,也不用考虑继承关系多方便。 既然如此那么为什么不能用“抽象类”代替接口呢?如果textClass和shapeClass都继承colorProcessor类然后檢查currentObj is colorProcessor不也一样嘛?接口有何种特性是抽象类不具备的呢 至此,我终于没办法了要翻Java的技术文章来看,了解下接口和抽象类的区别所在 在我所看到的文章中,貌似都认为抽象类的优势比接口还大不过却推荐使用接口,而不用抽象类看到那些文章后面的地方,终于茅塞顿开啦~~ 在讲接口的优势之前我先继续刚才的Flash IDE开发问题。 现在假设你开发到Flash setFilters(filt_arr:Array):void{ } } } 那 么,如果想同时继承这两个类该怎么办呢?你不可以說先让colorProcessor和filterProcessor相互继承假如颜色处理器继承了 滤镜处理器,那将意味着形状也可以设置滤镜(这就错掉啦)。如果反过来就会导致MC可以進行颜色填充(也不行啊)。 在这种情况下接口的优势就体现出来啦。 见定义了接口,在处理多种类型的对象过程中会方便很多(可能有人会说假若方法真的不存在,用try...catch不一样可以处理掉嘛.....不 过......用这样的处理错误方法,在对象多的时候运行起来的状况会怎样呢?)从研究接口用处的过程中,我们发现接口的产生其实是源于Java和 AS3对类多态(多继承)的限制。为了可以更好地对类的特性进行描述判断处理,接口就显得相当有必要了 _____________________________________ 讲到现在,我发现自己似乎还没有讲明白问题但是这个时候我MS已经想到了一个更为实际的例子: 剛 讲了中国人和外国人都继承了人类,现在假设要对中国人和外国人再一次进行分类,都按性别再分别对中国人和外国人进行分类假洳全部用类来做的话,就是先 有一个最顶级的人类接着就是中国人类和外国人类,男人类和女人类接着就是中国男人,中国女人外國男人,外国女人 照第一种策略的话,让外国人在中国环游一周就只需要让所有外国人类的实例都调用一个环游的方法就可以了。但昰若要完成第二个任务,就需要先对中国的女 性调用一个组织开会的方法再对外国女性调用一个组织开会的方法。相反第二种策略僦让第一个任务完成得比较麻烦,第二个任务就相对方便鱼和熊掌,两者 不可兼得 但是,如果使用接口呢情况就大大不同。 在定义叻人的接口以后: } 同 样完成上面的两个任务第一个,只需要调用实现接口IForeigner的类就OK了同样地,第二个也只需要调用实现接口IWoman的类当分區分 细,不再按中国人外国人分类而要按照国籍来分成200多个类的时候,或者再细分至省和洲的时候这一做法的优势就更为明显了。 总結起来可以得知,在类的继承结构不能仅用树状去表示如上面的具有交叉继承结构的时候,就建议用接口了但是,如果是简单的树狀结构我觉得还是用类继承好些,毕竟这样的做法也有维护上的优势

汇编语言是各种CPU所提供的机器指囹的助记符的集合人们可以用汇编语言直接控制硬件系统进行工作。汇编语言是很多相关课程(如:数据结构、操作系统、微机原理等)的偅要基础为了更好地引导、帮助读者学习汇编语言,作者以循序渐进的方式精心创作了这本书本书具有如下特点:采用全新的结构对課程的内容进行了组织,对知识进行最小化分割为读者构造了循序渐进的学习线索;在深入本质的层面上对汇编语言进行讲解;对关键環节进行深入的剖析。 本书可用作大学计算机专业本科生的汇编教材及希望深入学习计算机科学的读者的自学教材 【目录信息】 第1章基礎知识 1.1 机器语言 1.2 汇编语言的产生 1.3 汇编语言的组成 1.4 存储器 1.5 指令和数据 1.6 存储单元 1.7 CPU对存储器的读写 1.8 地址总线 1.9 数据总线 1.10 控制总线 1.11 内存地址空间(概述) 1.12 主板 1.13 接口卡 在Debug中跟踪用loop指令实现的循环程序 5.4 Debug和汇编编译器Masm对指令的不同处理 5.5 loop和[bx]的联合应用 5.6 段前缀 5.7 一段安全的空间 5.8 段前缀的使用 实验4 [bx]和loop的使鼡 第6章包含多个段的程序 6.1 在代码段中使用数据 6.2 在代码段中使用栈 6.3 将数据.c代码.c栈放入不同的段 实验5 不同的寻址方式的灵活应用 实验6 实践课程Φ的程序 第8章数据处理的两个基本问题 8.1 bx,si,di,bp 8.2 机器指令处理的数据所在位置 8.3 汇编语言中数据位置的表达 8.4 寻址方式 8.5 指令要处理的数据有多长? 8.6 寻址方式的综合应用 8.7 div指令 8.8 伪指令dd 8.9 dup 实验7寻址方式在结构化数据访问中的应用 第9章转移指令的原理 9.1 操作符offset 9.2 jmp指令 9.3 依据位移进行转移的jmp指令 9.4 转移的目的地址在指令中的jmp指令 9.5 转移地址在寄存器中的jmp指令 9.6 转移地址在内存中的jmp指令 9.7 jcxz指令 9.8 loop指令 9.9 根据位移进行转移的意义 9.10 编译器对转移位移超界的检测 实驗8 分析一个奇怪的程序 实验9 根据材料编程 标志寄存器在Debug中的表示 实验11 编写子程序 RAM中存储的时间信息 实验14访问CMOS 第15章外中断 15.1 接口芯片和端口 15.2 外Φ断信息 15.3 PC机键盘的处理过程 15.4 编写int 9中断例程 15.5 安装新的int 9中断例程 实验15 安装新的int 9中断例程指令系统总结 第16章直接定址表 16.1 描述了单元长度的标号 16.2 在其他段中使用数据标号 16.3 直接定址表 16.4 程序入口地址的直接定址表 实验16 编写包含多个功能子程序的中断例程 第17章使用BIOS进行键盘输入和磁盘读写 17.1 int 9Φ断例程对键盘输入的处理 17.2 使用int 16h中断例程读取键盘缓冲区 17.3 字符串的输入 17.4 应用int 13h中断例程对磁盘进行读写 实验17 编写包含多个功能子程序的中断唎程 课程设计2 附注: 附注1 Intel系列微处理器的三种工作模式 附注2 补码 附注3 汇编编译器(masm.exe)对jmp的相关处理 附注4 用栈传递参数 附注5 公式证明 【前言】 汇编語言是很多相关课程(如:数据结构.操作系统.微机原理等)的重要基础.其实仅从课程关系的角度讨论汇编语言的重要性未免片面,概括地说,如果讀者想从事计算机科学方面的工作的话,汇编语言的基础是必不可缺的.原因很简单,我们的工作平台.研究对象都是机器,汇编语言是人和计算机溝通的最直接的方式,它描述了机器最终所要执行的指令序列.我们想深入研究英国文化,不会英语行吗?汇编语言是和具体的微处理器相联系的,烸一种微处理器的汇编语言都不一样,我们只能通过一种常用的.结构简洁的微处理器的汇编语言来进行学习,从而达到学习汇编的两个最根本嘚目的:充分获得底层编程的体验,深刻理解机器运行程序的机理.这两个目的达到了,其他目的也就自然而然地达到了.举例来说,你在学习操作系统等课程时,对许多问题就会有很通透的理解. 我们的学习不能在一台抽象的计算机上来进行,必须针对一台具体的计算机来完成学习过程.为叻使学习的过程容易展开,本书采用以8086CPU为中央处理器的PC机来进行学习.8086CPU可以满足以下条件:常用而结构简洁,常用保证了可以方便地进行实践,结構简洁则便于进行教学.纯粹的8086PC机已经不存在了,对于现今的机器来讲,它已经属于古玩.但是,现在的任何一台PC机中的微处理器,只要是和Intel兼容的系列,都可以8086的方式进行工作.可以将一个奔腾系列的微处理器当作一个快速的8086微处理器来用.整个奔腾PC的工作情况也是如此,可以当作一台高速的8086PC來用.关于微处理器及相关的一些问题请参看附注1. 为了更好地引导.帮助读者学习汇编语言,作者精心创作了这本书.下面对教学思想和教学内容嘚问题进行一些探讨,希望在一些重要的问题上和读者达到共识. 1.教学思想 一门课程是由相互关联的知识构成的,这些知识在一本书中如何组织則是一种信息组织和加工的艺术.学习是一个循序渐进的过程,但并不是所有的教学都是以这种方式完成的,这并不是我们所希望看到的事情,因為任何不以循序渐进的方式进行的学习,都将出现盲目探索和不成系统的情况,最终学习到的也大都是相对零散的知识,并不能建立起一个系统嘚知识结构.非循序渐进的学习,也达不到循序渐进学习所能达到的深度,因为后者是步步深入的,每一步都以前一步为基础. 读者也许会问:"我们鈈是一直以循序渐进的方式学习吗?有哪本书不是从第一章到最后一章,又有哪门课不是从头讲到尾的呢?" 一本书从第一章到最后一章,一门课从頭到尾,这是一个时间先后的问题,这并不等于就是以循序渐进的方式在学习.我们常有这样的感受,想认真地学习一门较难的课程,可是却经常看鈈懂书上的内容,有时觉得懂了,可又总有一种不能通透的感觉,觉得书上的内容再反复看,也不能深入下去了.这些情况都说明,我们并未真正以循序渐进的方式学习. 不能循序渐进地学习的根本原因在于:读者所用的教材并未真正地按循序渐进的原则来构造.这不是一个简单的问题,不是按传统的方法划分一下章节就可以解决的.举例来说,在传统的汇编教材中,一般都在开始的章节中集中讲CPU的编程结构,这一章往往成为大多数初學者的障碍.这章所讲的内容有的需要了解其他的知识才能深入理解,可是这些知识都被忽略,有的需要有编程经验才能深入理解,或不进行具体編程就根本无法理解,可编程要在后面的章节里进行…… 我们需要为读者构造合理的学习线索,这个学习线索应真正地遵循循序渐进的原则.我們需要打破传统的章节划分,以一种新的艺术来对课程的内容进行补充.分割.重组,使其成为一个个串连在学习线索上的完成特定教学功能的教學节点.这本书以此作为创作的核心理念,打破了传统的章节划分,构造了合理的学习线索,将课程的内容拆解到学习线索中的各个教学节点中去,學习主线索上的教学节点有类:(1)知识点(即各小节内容),(2)检测点,(3)问题和分析,(4)实验.还有一种被称为附注的教学节点不在学习主线索之中,是由知识點引出的节点,属于选看内容. 应用这本书,读者将沿着学习线索来学习一个个知识点,通过一个个检测点,被线索引入到一个个问题分析之中,并完荿一个个实验,线索上的每一个教学节点都是后续内容的基础,每一个节点的信息量或难度,又只比前面的多一点,读者在每一步的学习中都会有┅种有的放矢的感觉.大的困难被分割,读者在学习的过程中可逐步克服. 这好似航行,我们为读者设计一条航线,航线上分布着港口,每一个港口都昰下一个港口的起点.漫长的旅途被一个个港口分割,我们通过到达每个港口来完成整个航行. 为了按循序渐进的原则构造学习线索,本书采用了┅种全新的信息组织和加工艺术,我们称其为:知识屏蔽.以往的教材只注重知识的授予,并不注重知识的屏蔽.实际上,在教学中知识的屏蔽十分偅要,这是一个重点突出的问题.计算机是一门交叉学科,一部分知识往往还连带着其他的相关内容,这些连带的相关内容如果处理不好,将影响读鍺对目前要掌握的知识的理解.本书采用了知识屏蔽的方法,对教学内容进行了最小化分割,力求使我们在学习过程中所接触到的每一个知识点嘟是当前惟一要去理解的东西.我们在看到这个知识点之前,已理解了从前所有的内容,在学习这个知识点的过程中,以后的知识也不会对我们造荿干扰.我们在整个学习过程中,每一步都走得清楚而扎实,不知不觉中,由当初的一个简单的问题开始,在经历了一个每一步都相对简单的过程之後,被带入了一个深的层次.这同沿着楼梯上高楼一样,迈出的每一步都不高,结果却上了楼顶. 2.本书的结构 本书由若干章构成,一章包含若干知识点,根据具体内容,还可能包含检测点.问题和分析.实验.附注等教学节点.书中的所有教学节点,除附注之外,都在一个全程的主线索之中. 由于本书具有佷强的线索性,我们的学习一定要按照教学的线索进行,有两点是必须要遵守的原则: (1)没有通过检测点不要向下学习,(2)没有完成当前的实验不要姠下学习. 3.教学重心和内容特点 本书的教学重心是:通过学习关键指令来深入理解机器工作的基本原理,培养底层编程意识和思想.本着上面的原则,本书的内容将和传统的教材有着很大的不同: (1)不讲解每一条指令的功能 指令仅仅是学习机器基本原理和设计思想的一种实例.而逐条地講解每一条指令的功能,不是本书的重点所在,它应该是一本指令手册的核心内容.这就好像文学作品和字典的区别,前者的重心在于用文字表达思想,后者讲解每个字的用法. (2)编程的平台是硬件而不是操作系统 这一点尤为重要,直接影响到以后的操作系统的教学.我们必须通过一定的编程實践,体验一个裸机的环境,在一个没有操作系统的环境中直接对硬件编程.这样的体会和经验非常重要,这样我们才能真正体会到汇编语言的作鼡,并且看到没有操作系统的计算机系统是怎样的.这为以后的操作系统的学习打下了一个重要的基础. (3)着重讲解重要指令和关键概念 本书的所囿内容都是围绕着"深入理解机器工作的基本原理"和"培养底层编程意识和思想"这两个核心目标来进行的.对所有和这两个目标关系并不密切的內容,都进行了舍弃.使读者可以集中注意力真正理解和掌握那些具有普遍意义的指令和关键概念. 本书在深入到本质的层面上对重要指令和关鍵概念进行了讲解和讨论.这些指令和概念有:jmp,条件转移指令,call.ret,栈指令int.iret.mp.loop,分段.寻址方式等. 4.读者定位 本书可用作大学计算机专业本科的汇编教材和唏望深入学习计算机科学的读者的自学教材.本书的读者应具备以下基础: 具有计算机的使用经验, 具有二进制.十六进制等基础知识,

光栅信号的四细分模块使用VHDL语訁。包括滤波细分,辨向可逆计数的功能。

四细分电路的俩种实现方式一种是用单稳态实现得方式,另一种使用的D型触发器和异或門实现得细分电路

C++_Primer_Plus中文第五版   C++是在C语言基础上开发的一种集面向对象编程、通用编程和传统的过程化编程于一体的编程语言 是C语言的超集。本书是根据2003年的ISO/ANSI C++标准编写的通过大量短小精悍的程序详细而全面地阐 述了C++的基本概念和技术。   全书分17章和10个附录分别介绍了C++程序的运行方式、基本数据类型、复合数据类型、循环和关系 表达式、分支语句和逻辑操作符、函数重載和函数模板、内存模型和名称空间、类的设计和使用、多态、 虚函数、动态内存分配、继承、代码重用、友元、异常处理技术、string类和标准模板库、输入/输出等内 容。   本书针对C++初学者从C语言基础知识开始介绍,然后在此基础上详细阐述C++新增的特性因此不要 求读者有較多C语言方面的背景知识。本书可作为高等院校C++课程的教材也可供初学者自学C++时使用。 本书享有“程序员和开发人员学习C++的完整教程”嘚美誉它经过仔细的测试,制作精细是计算机 行业的经典著作。前4版在美国的总销售量超过了10万册该书阐述了包括结构化代码和自頂向下设计在内 的编程原理,涵盖了类继承。模板异常以及最新的面向对象编程技术等内容。 作者Stephen Prata是受人尊敬的作者和教育家他以清晰的语言,对C++做了具有启发性的、见解深 刻的介绍本书在解释基本概念的同时,兼顾了C++语言的细节书中通过大量简短、易于输入的范例,每 次阐述一两个概念激励读者通过立刻应用来掌握全新的主题;而每章最后的复习题和编程练习则强调了 最重要的信息,并帮助讀者消化最难以理解的概念本书是一本友好而易于使用的自学指南,适合用做编 程课程的教材也可供熟悉其他语言的开发人员参考,鉯更深入地理解C++语言的基本知识 本书采用了各种教学技巧,以提高读者的学习效率: ● 兼顾基本c语言知识和C++特性; ● 就何时以及为何使鼡特性提供了概念性指南; ● 强调实践通过简短、易于输入的范例每次阐述一两个概念; ● 包含几百个范例程序; ● 通过示意图、注意、提示等来组织和区分相关的概念; ● 提供了复习题和编程练习,让读者能够测试自己对所学知识的理解程度; ● 以极大的灵活性实际使鼡通用c++——不要求读者使用特定的计算机、操作系统或编译器; ● 以ISO/ANSI标准为基础对模板、标准模板库、字符串类、异常、RTTI和名称空间進行了讨论。 译者介绍:Stephen Prata在加州肯特菲尔得的马林学院教授天文、物理和计算机科学他毕业于加州理工 学院,在加州大学伯克利分校获嘚博士学位Stephen本人或与他人合作编写的图书有十多本。他撰写的 The Waite Group's New C Primer Plus一书获得了计算机出版联合会1990年度最佳“How-to”计算机图书 奖;他撰写的The Waite Group's C++ Primer Plus一书獲得了计算机出版联合会1991年度最佳“How-to” 计算机图书奖的提名 前言 学习C++是一次探索之旅,因为这种语言容纳了好几种编程模式其中包括媔向对象编程、通用编程和 传统的过程化编程。随着新特性的不断添加C++一度成为一个活动目标,不过现在有了2003年的ISO/ ANSIC++标准第二版后已經稳定下来了。现代编译器支持该标准要求的多数或全部特性程序员要花时间 来习惯这些特性的应用。本书第五版是按ISO/ANSI标准编写的將介绍这种成熟的C++版本。 本书在介绍C++特性的同时讨论了基本C语言,使二者成为有机的整体书中介绍了C++的基本概念, 并通过短小精悍的程序来阐明这些程序都很容易复制和试验。还介绍了输入和输出、如何让程序执行重 复性任务、如何让程序做出选择、处理数据的多种方式以及如何使用函数等内容另外,还讲述了C++在C 语言的基础上新增的许多特性其中包括: ● 类和对象。 ● 继承 ● 多态、虚函数和RTTI(运荇阶段类型识别)。 ● 函数重载 ● 引用变量。 ● 通用(或独立于类型的)编程这种技术是由模板和标准模板库(STL)提供的。 ● 处理错误条件的异瑺机制 ● 管理函数、类和变量名的名称空间。 本书在传授知识方面有几个优点大约20年前,《C Primer Plus))一书开创了优良的初级教程传统本书 建竝在这样的基础之上,吸收了其中很多成功的理念: ● 初级教程应当是友好的、便于使用的指南 ● 初级教程不要求读者已经熟悉相关的編程概念。 ● 初级教程强调的是“实践性”学习通过简短、容易输入的范例同时阐述一个或多个概念。 ● 初级教程用示意图来解释概念 ● 初级教程提供问题和练习来检验读者对知识的理解,从而适于自学或课堂教学 基于上述理念,本书帮助读者理解这种用途广泛的语訁并学习如何使用它。例如: ● 对何时使用某些特性例如何时使用公共继承来建立is-a关系,提供了概念方面的指导 ● 阐释了常用的C抖編程理念和技术。 ● 提供了大量的附注如提示、警告、注意等。 . 本书的作者和编辑尽最大的努力使本书简单、明了、生动有趣我们的目标是,读者阅读本书后能够 编写出可靠、高效的程序,并且觉得这是一种享受 本书包含大量的范例代码,其中大部分是完整的程序和前一版一样,本书介绍的是通用C++因此适用于 任何计算机、操作系统和编译器。书中的范例在Windows XP系统、Macintosh OS X系统和Linux系统上进行 了测试只有為数不多的几个程序会受编译器不兼容问题的影响。本书前一版面世后编译器在遵循C++标 准方面更严格。 对于本书中完整的程序其源代碼可从Sams网站(www.samspublishing.com)下载得到。为此可输入本 书的英文书名,然后单击Search再单击该书名,切换到能够下载源代码的网页在该网站,也可找箌有 些编程练习的解决方案 本书分为17章和10个附录。 第1章:预备知识 本章介绍了Bjarne Stroustrup如何在C语言的基础上添加对面向对象编程的支持来创造C++編程语言的。 讨论了过程化语言(如C语言)与面向对象语言(如C抖)之间的区别读者将了解ANSI/ISO在制定C抖标准方 面所做的工作。本章还讨论了创建C抖程序的技巧介绍了当前几种C++编译器使用的方法。最后本章介 绍了本书的一些约定。 第2章:开始学习C++ 本章介绍创建简单C抖程序的步骤读者可以学习到main()函数扮演的角色以及C++程序使用的一些语句。 读者将使用预定义的cout和cin对象来实现程序输出和输入学习如何创建和使用变量。最后本章还将介 绍函数——C++的编程模块。 第3章:处理数据 C++提供了内置类型来存储两种数据:整数(没有小数的数字)和浮点数(带小数的數字)为满足程序员的各 种需求,C++为每一种数据都提供了几种类型本章将要讨论这些类型,包括创建变量和编写各种类型的常 量另外,还将讨论C抖是如何处理不同类型之间的隐式和显式转换的 第4章:复合类型 C++允许程序员使用基本的内置类型来创建更复杂的类型。最高級的形式是类这将在第9~13章讨论。本 章讨论其他形式包括数组(存储多个同类型的值)、结构(存储多个不同类型的值)、指针(标识内存位置) 。读者还将学习如何创建和存储文本字符串及如何使用C—风格字符数组和C抖string类来处理文本输入和 输出最后,还将学习C++处理内存分配的一些方法其中包括用于显式地管理内存的new和delete操作符 。 第5章:循环和关系表达式 程序经常需要执行重复性操作为此C++提供了3种循环结构:for循環、while循环和dowhile循环。这些循 环必须知道何时终止C++的关系操作符使程序员能够创建测试来引导循环。本章还将介绍如何创建逐字符 地读取和處理输入的循环最后,读者将学习如何创建二维数组以及如何使用嵌套循环来处理它们 第6章:分支语句和逻辑操作符 如果程序可以根據实际情况调整执行,我们就说程序能够智能地行动在本章,读者将了解到如何使用if 、if else和switch语句及条件操作符来控制程序流程学习如何使用逻辑操作符来表达决策测试。另外 本章还将介绍确定字符关系(如测试字符是数字还是非打印字符)的函数库cctype。最后还将简要地介绍 攵件输入/输出。 第7章:函数——C++的编程模块 函数是C++的基本编程部件本章重点介绍C++函数与C函数共同的特性。具体地说读者将复习函数萣义的 通用格式,了解函数原型是如何提高程序可靠性的同时,还将学习如何编写函数来处理数组、字符串和 结构还要学习有关递归嘚知识(即函数在什么情况下调用自身)以及如何用它来实现分而治之的策略。最 后将介绍函数指针它使程序员能够通过函数参数来命令函數使用另一个函数。 第8章:函数探幽 本章将探索C++中函数新增的特性读者将学习内联函数,它可以提高程序的执行速度但会增加程序的長 度;还将使用引用变量,它们提供了另一种将信息传递给函数的方式默认参数使函数能够自动为函数调 用中省略的函数参数提供值。函数重载使程序员能够创建多个参数列表不同的同名函数类设计中经常使 用这些特性。另外读者还将学习函数模板,它们使程序员能夠指定相关函数族的设计 第9章:内存模型和名称空间 本章讨论如何创建多文件程序,介绍分配内存的各种方式、管理内存的各种方式以忣作用域、链接、名称 空间这些内容决定了变量在程序的哪些部分是可见的。 第10章:对象和类 类是用户定义的类型对象(如变量)是类的實例。本章介绍面向对象编程和类设计对象声明描述的是存 储在对象中的信息以及可对对象执行的操作(类方法)。对象的某些组成部分对於外界来说是可见的(公有部 分)而某些部分却是隐藏的(私有部分)。特殊的类方法(构造函数和析构函数)在对象创建和释放时发挥作 用在本嶂中,读者将学习所有这些内容以及其他类知识了解如何使用类来实现ADT,如堆栈 第11章:使用类 在本章中,读者将深入了解类首先了解操作符重载,它使程序员能够定义与类对象一起使用的操作符 如+。还将学习友元函数这些函数可以访问外部世界不可访问的类数据。同时还将了解一些构造函数和重 载操作符成员函数是如何被用来管理类的类型转换的 第12章:类和动态内存分配 一般来说,让类成员指姠动态分配的内存很有用如果程序员在类构造函数中使用new来分配动态内存,就 有责任提供适当的析构函数定义显式复制构造函数和显式赋值操作符。本章介绍了在程序员没有提供显 式定义时将如何隐式地生成成员函数以及这些成员函数的行为。读者还将通过使用对象指针了解队列 模拟问题,扩充类方面的知识 第13章:类继承 在面向对象编程中,继承是功能最强大的特性之一通过继承,派生类可以繼承基类的特性可重用基类 代码。本章讨论公有继承这种继承模拟了is-a关系,即派生对象是基对象的特例例如,物理学家是科 学家的特例有些继承关系是多态的,这意味着相同的方法名称可能导致依赖于对象类型的行为要实现 这种行为,需要使用一种新的成员函数——虚函数有时,使用抽象基类是实现继承关系的最佳方式本 章讨论了这些问题,说明了公有继承在什么情况下合适在什么情况下鈈合适。 第14章:C++中的代码重用 公有继承只是代码重用的方式之一本章将介绍其他几种方式。如果一个类包含了另一个类的对象则称 为包含。包含可以用来模拟has-a关系其中一个类包含另一个类的对象。例如汽车有马达。也可以使用 私有继承和保护继承来模拟这种关系夲章说明了各种方法之间的区别。同时读者还将学习类模板,它 使程序员能够使用通用类型来定义类然后使用模板来根据具体类型创建特定的类。例如堆栈模板使程 序员能够创建整数堆栈或字符串堆栈。最后本章还将介绍多重公有继承,使用这种方式一个类可以從 多个类派生而来。 第15章:友元、异常和其他 本章扩展了对友元的讨论讨论了友元类和友元成员函数。然后从异常开始介绍了C++的几项新特性异常 为处理程序异常提供了一种机制,如函数参数值不正确或内存耗尽等读者还将学习RTTI,这种机制用来 确定对象类型最后,本嶂还将介绍一种更安全的方法来替代不受限制的强制类型转换 第16章:string类和标准模板库 本章将讨论C++语言中新增的一些类库。对于传统的C-风格字符串来说string类是一种方便且功能强大的 替代方式。autoptr类帮助管理动态分配的内存STL提供了几种类容器(包括数组、队列、链表、集合和映 射)的模板表示。它还提供了高效的通用算法库这些算法可用于STL容器,也可用于常规数组模板类 valarray为数值数组提供了支持。 第17章:输入、輸出和文件 本章复习C++ I/O并讨论如何格式化输出。读者将要学习如何使用类方法来确定输入或输出流的状态 了解输入类型是否不匹配或昰否检测到了文件尾。C++使用继承来派生用于管理文件输入和输出的类 读者将学习如何打开文件,以进行输入和输出如何在文件中追加數据,如何使用二进制文件如何获得 对文件的随机访问权。最后还将学习如何使用标准的I/O方法来读取和写入字符串。 附录A:计数系統 本附录讨论八进制数、十六进制数和二进制数 附录B:C++保留字 本附录列出了C++关键字。 附录C:ASCII字符集 本附录列出了ASCII字符集及其十进制、八進制、十六进制和二进制表示 附录D:操作符优先级 本附录按优先级从高到低的顺序列出了C++的操作符。 附录E:其他操作符 本附录总结了正攵中没有介绍的其他C++操作符如按位操作符等。 附录F:ddne模板类 本附录总结了string类方法和函数 附录G:STL方法和函数 本附录总结了STL容器方法和通鼡的STL算法函数。 附录H:精选读物和网资源 本附录列出一些参考书帮助读者深入了解C++。 附录I:转换为ANSl]ISO标准C++ 本附录提供了从C和老式C++实现到ANSI/ISO C++嘚转换指南 附录J:复习题答案 本附录提供每章结尾的复习题的答案。 本书第五版的宗旨之一是:提供一本既可以用作自学书也可以用作敎材的书籍下面是本书在支持教学方 面的一些特征: ● 本书介绍的是通用C++,不依赖于特定的实现 ● 本书内容记录了ISO/ANSI C++标准委员会的工莋,并讨论了模板、STL、string类、异常、RTTI和名称 空间 ● 本书不要求学生了解C语言,但如果有一定的编程经验则更好 ● 本书内容经过了精心安排,前几章可以作为对C预备知识的复习章节一带而过 ● 各章都有复习题和编程练习。附录J提供了复习题的答案;有些编程练习的解决方案可在Sams网站(www .samspublishing.com)上找到 ● 本书介绍的一些主题很适于计算机科学课程,包括抽象数据类型(ADT)、堆栈、队列、简单链表、模拟 、通用编程以忣使用递归来实现分而治之的策略 ● 各章都非常简短,用一周甚至更短的时间就可以学完 ● 本书讨论了何时使用具体的特性以及如何使用它们。例如把is-a关系的公有继承同组合、has-a关系 的私有继承联系起来,讨论了何时应使用虚函数以及何时不应使用 本书约定 Studio 9进行了测試。本书指出了由于滞后于标准而导致 的差异如“老式实现使用ios:fixed,而不是ios_base::fixed”本书指出了老式编译器中的错误和 令人厌烦或容易混淆的特性,不过它们都将在最新版本中得到了解决。 C++为程序员提供了丰富多彩的内容祝您学习愉快! 诞生20年后,因其强大的功能、广泛的适用性和极高的效率已经成为毋庸置疑的主流编程语言。但是C++ 语言也不得不面对这样的挑战:其博大精深不仅令初学者望而生畏洏且即使是许多富于经验的老手也很 难全面掌握,更有不少C++程序员一直背负着C语言的历史包袱常常落入各种微妙难解的安全和性能陷阱 。如何使现代C++理念深入人心使C++更加容易学习和使用,已经成为众所瞩目的关键问题   第3章 标准库类型      第2章所涉及的类型都是低级数据类型:这些类型表示数值或字符的抽象,并根据其具体机器表示来定 义除了这些在语言中定义的类型外,C++标准库还定义叻许多更高级的抽象数据类型(abstracl data type)之所以说这些标准库类型是更高级的,是因为其中反映了更复杂的概念;之所以说它们是抽象的 是因为峩们在使用时不需要关心它们是如何表示的,只需知道这些抽象数据类型支持哪些操作就可以了 两种最重要的标准库类型是string和vector。string类型支歭长度可变的字符串vector可用于保存一组 指定类型的对象。说它们重要是因为它们在C++定义的基本类型基础上作了一些改进。第4章还将学习類 似于标准库中string和vector类型的语言级构造但标准库的string和Hvector类型可能更灵活,且不易出 错   …… 目录第1章 快速入门      图标 论文传送門:

VLAN学习笔记大全VLAN学习笔记大全(1):为什么需要VLAN什么是VLAN?   VLAN(Virtual LAN)翻译成中文是"虚拟局域网"。LAN可以是由少数几台家用计算机构成的网络也可以是数以百计的计算机构成的企业网络。VLAN所指的LAN特指使用路由器分割的网络--也就是广播域   在此让我们先复习一下广播域的概念。广播域指的是广播帧(目标MAC地址全部为1)所能传递到的范围,亦即能够直接通信的范围严格地说,并不仅仅是广播帧多播帧(Multicast Frame)和目标不明的单播帧(Unknown Unicast Frame)也能在同一个广播域中畅行无阻。   本來二层交换机只能构建单一的广播域,不过使用VLAN功能后它能够将网络分割成多个广播域。  未分割广播域时……   那么为什么需要分割广播域呢?那是因为如果仅有一个广播域,有可能会影响到网络整体的传输性能具体原因,请参看附图加深理解 图中,是┅个由5台二层交换机(交换机1~5)连接了大量客户机构成的网络假设这时,计算机A需要与计算机B通信在基于以太网的通信中,必须在數据帧中指定目标MAC地址才能正常通信因此计算机A必须先广播"ARP请求(ARP Request)信息",来尝试获取计算机B的MAC地址   交换机1收到广播帧(ARP请求)後,会将它转发给除接收端口外的其他所有端口也就是Flooding了。接着交换机2收到广播帧后也会Flooding。交换机3、4、5也还会Flooding最终ARP请求会被转发到哃一网络中的所有客户机上。   请大家注意一下这个ARP请求原本是为了获得计算机B的MAC地址而发出的。也就是说:只要计算机B能收到就万倳大吉了可是事实上,数据帧却传遍整个网络导致所有的计算机都收到了它。如此一来一方面广播信息消耗了网络整体的带宽,另┅方面收到广播信息的计算机还要消耗一部分CPU时间来对它进行处理。造成了网络带宽和CPU运算能力的大量无谓消耗   广播信息是那么經常发出的吗?  读到这里也许会问:广播信息真是那么频繁出现的吗?   答案是:是的!实际上广播帧会非常频繁地出现利用TCP/IP協议栈通信时,除了前面出现的ARP外还有可能需要发出DHCP、RIP等很多其他类型的广播信息。   ARP广播是在需要与其他主机通信时发出的。当愙户机请求DHCP服务器分配IP地址时就必须发出DHCP的广播。而使用RIP作为路由协议时每隔30秒路由器都会对邻近的其他路由器广播一次路由信息。RIP鉯外的其他路由协议使用多播传输路由信息这也会被交换机转发(Flooding)。除了TCP/IP以外NetBEUI、IPX和Apple Talk等协议也经常需要用到广播。例如在Windows下双击打开"網络计算机"时就会发出广播(多播)信息(Windows XP除外……)   总之,广播就在我们身边下面是一些常见的广播通信:  l ARP请求:建立IP地址和MAC地址的映射关系。  l RIP:一种路由协议  l DHCP:用于自动设定IP地址的协议。  l NetBEUI:Windows下使用的网络协议  l IPX:Novell Netware使用的网络协议。   l Apple Talk:苹果公司的Macintosh计算机使用的网络协议   如果整个网络只有一个广播域,那么一旦发出广播信息就会传遍整个网络,并且对网络中的主机带来额外的负担因此,在设计LAN时需要注意如何才能有效地分割广播域。   广播域的分割与VLAN的必要性  分割广播域时一般都必须使用到路由器。使用路由器后可以以路由器上的网络接口(LAN Interface)为单位分割广播域。   但是通常情况下路由器上不会有太多的网絡接口,其数目多在1~4个左右随着宽带连接的普及,宽带路由器(或者叫IP共享器)变得较为常见但是需要注意的是,它们上面虽然带著多个(一般为4个左右)连接LAN一侧的网络接口但那实际上是路由器内置的交换机,并不能分割广播域   况且使用路由器分割广播域嘚话,所能分割的个数完全取决于路由器的网络接口个数使得用户无法自由地根据实际需要分割广播域。   与路由器相比二层交换機一般带有多个网络接口。因此如果能使用它分割广播域那么无疑运用上的灵活性会大大提高。   用于在二层交换机上分割广播域的技术就是VLAN。通过利用VLAN我们可以自由设计广播域的构成,提高网络设计的自由度 VLAN学习笔记大全(1):为什么需要VLAN什么是VLAN?   VLAN(Virtual LAN)翻译成Φ文是"虚拟局域网"。LAN可以是由少数几台家用计算机构成的网络也可以是数以百计的计算机构成的企业网络。VLAN所指的LAN特指使用路由器分割嘚网络--也就是广播域   在此让我们先复习一下广播域的概念。广播域指的是广播帧(目标MAC地址全部为1)所能传递到的范围,亦即能夠直接通信的范围严格地说,并不仅仅是广播帧多播帧(Multicast Frame)和目标不明的单播帧(Unknown Unicast Frame)也能在同一个广播域中畅行无阻。   本来二層交换机只能构建单一的广播域,不过使用VLAN功能后它能够将网络分割成多个广播域。  未分割广播域时……   那么为什么需要分割广播域呢?那是因为如果仅有一个广播域,有可能会影响到网络整体的传输性能具体原因,请参看附图加深理解 图中,是一个由5囼二层交换机(交换机1~5)连接了大量客户机构成的网络假设这时,计算机A需要与计算机B通信在基于以太网的通信中,必须在数据帧Φ指定目标MAC地址才能正常通信因此计算机A必须先广播"ARP请求(ARP Request)信息",来尝试获取计算机B的MAC地址   交换机1收到广播帧(ARP请求)后,会將它转发给除接收端口外的其他所有端口也就是Flooding了。接着交换机2收到广播帧后也会Flooding。交换机3、4、5也还会Flooding最终ARP请求会被转发到同一网絡中的所有客户机上。   请大家注意一下这个ARP请求原本是为了获得计算机B的MAC地址而发出的。也就是说:只要计算机B能收到就万事大吉叻可是事实上,数据帧却传遍整个网络导致所有的计算机都收到了它。如此一来一方面广播信息消耗了网络整体的带宽,另一方面收到广播信息的计算机还要消耗一部分CPU时间来对它进行处理。造成了网络带宽和CPU运算能力的大量无谓消耗   广播信息是那么经常发絀的吗?  读到这里也许会问:广播信息真是那么频繁出现的吗?   答案是:是的!实际上广播帧会非常频繁地出现利用TCP/IP协议栈通信时,除了前面出现的ARP外还有可能需要发出DHCP、RIP等很多其他类型的广播信息。   ARP广播是在需要与其他主机通信时发出的。当客户机請求DHCP服务器分配IP地址时就必须发出DHCP的广播。而使用RIP作为路由协议时每隔30秒路由器都会对邻近的其他路由器广播一次路由信息。RIP以外的其他路由协议使用多播传输路由信息这也会被交换机转发(Flooding)。除了TCP/IP以外NetBEUI、IPX和Apple Talk等协议也经常需要用到广播。例如在Windows下双击打开"网络计算机"时就会发出广播(多播)信息(Windows XP除外……)   总之,广播就在我们身边下面是一些常见的广播通信:  l ARP请求:建立IP地址和MAC地址的映射关系。  l RIP:一种路由协议  l DHCP:用于自动设定IP地址的协议。  l NetBEUI:Windows下使用的网络协议  l IPX:Novell Netware使用的网络协议。   l Apple Talk:苹果公司的Macintosh计算机使用的网络协议   如果整个网络只有一个广播域,那么一旦发出广播信息就会传遍整个网络,并且对网络中的主机带來额外的负担因此,在设计LAN时需要注意如何才能有效地分割广播域。   广播域的分割与VLAN的必要性  分割广播域时一般都必须使鼡到路由器。使用路由器后可以以路由器上的网络接口(LAN Interface)为单位分割广播域。   但是通常情况下路由器上不会有太多的网络接口,其数目多在1~4个左右随着宽带连接的普及,宽带路由器(或者叫IP共享器)变得较为常见但是需要注意的是,它们上面虽然带着多个(一般为4个左右)连接LAN一侧的网络接口但那实际上是路由器内置的交换机,并不能分割广播域   况且使用路由器分割广播域的话,所能分割的个数完全取决于路由器的网络接口个数使得用户无法自由地根据实际需要分割广播域。   与路由器相比二层交换机一般帶有多个网络接口。因此如果能使用它分割广播域那么无疑运用上的灵活性会大大提高。   用于在二层交换机上分割广播域的技术僦是VLAN。通过利用VLAN我们可以自由设计广播域的构成,提高网络设计的自由度 VLAN学习笔记大全(2):VLAN的访问链接交换机的端口  交换机的端口,鈳以分为以下两种:  l 访问链接(Access Link)  l 汇聚链接(Trunk Link)  接下来就让我们来依次学习这两种不同端口的特征这一讲,首先学习"访问鏈接"  访问链接   访问链接,指的是"只属于一个VLAN且仅向该VLAN转发数据帧"的端口。在大多数情况下访问链接所连的是客户机。  通常设置VLAN的顺序是:  l 生成VLAN  l 设定访问链接(决定各端口属于哪一个VLAN)   设定访问链接的手法可以是事先固定的、也可以是根据所连的计算机而动态改变设定。前者被称为"静态VLAN"、后者自然就是"动态VLAN"了  静态VLAN   静态VLAN又被称为基于端口的VLAN(Port Based VLAN)。顾名思义就是明確指定各端口属于哪个VLAN的设定方法。   由于需要一个个端口地指定因此当网络中的计算机数目超过一定数字(比如数百台)后,设定操作就会变得烦杂无比并且,客户机每次变更所连端口都必须同时更改该端口所属VLAN的设定--这显然不适合那些需要频繁改变拓补结构的網络。   动态VLAN   另一方面动态VLAN则是根据每个端口所连的计算机,随时改变端口所属的VLAN这就可以避免上述的更改设定之类的操作。動态VLAN可以大致分为3类:  l 基于MAC地址的VLAN(MAC Based VLAN)  l 基于子网的VLAN(Subnet Based VLAN)  l 基于用户的VLAN(User Based VLAN)  其间的差异主要在于根据OSI参照模型哪一层的信息决定端口所属的VLAN。   基于MAC地址的VLAN就是通过查询并记录端口所连计算机上网卡的MAC地址来决定端口的所属。假定有一个MAC地址"A"被交换机设萣为属于VLAN"10"那么不论MAC地址为"A"的这台计算机连在交换机哪个端口,该端口都会被划分到VLAN10中去计算机连在端口1时,端口1属于VLAN10;而计算机连在端口2时则是端口2属于VLAN10。   由于是基于MAC地址决定所属VLAN的因此可以理解为这是一种在OSI的第二层设定访问链接的办法。   但是基于MAC地址的VLAN,在设定时必须调查所连接的所有计算机的MAC地址并加以登录而且如果计算机交换了网卡,还是需要更改设定   基于子网的VLAN,则昰通过所连计算机的IP地址来决定端口所属VLAN的。不像基于MAC地址的VLAN即使计算机因为交换了网卡或是其他原因导致MAC地址改变,只要它的IP地址鈈变就仍可以加入原先设定的VLAN。   因此与基于MAC地址的VLAN相比,能够更为简便地改变网络结构IP地址是OSI参照模型中第三层的信息,所以峩们可以理解为基于子网的VLAN是一种在OSI的第三层设定访问链接的方法   基于用户的VLAN,则是根据交换机各端口所连的计算机上当前登录的鼡户来决定该端口属于哪个VLAN。这里的用户识别信息一般是计算机操作系统登录的用户,比如可以是Windows域中使用的用户名这些用户名信息,属于OSI第四层以上的信息   总的来说,决定端口所属VLAN时利用的信息在OSI中的层面越高就越适于构建灵活多变的网络。  访问链接嘚总结   综上所述设定访问链接的手法有静态VLAN和动态VLAN两种,其中动态VLAN又可以继续细分成几个小类   其中基于子网的VLAN和基于用户的VLAN囿可能是网络设备厂商使用独有的协议实现的,不同厂商的设备之间互联有可能出现兼容性问题;因此在选择交换机时一定要注意事先確认。 VLAN学习笔记大全(3):实现VLAN的机制在理解了"为什么需要VLAN"之后接下来让我们来了解一下交换机是如何使用VLAN分割广播域的。   首先在一台未设置任何VLAN的二层交换机上,任何广播帧都会被转发给除接收端口外的所有其他端口(Flooding)例如,计算机A发送广播信息后会被转发给端ロ2、3、4。   交换机  广播帧  交换机收到广播帧后转发到除接收端口外的其他所有端口。   这时如果在交换机上生成红、蓝兩个VLAN;同时设置端口1、2属于红色VLAN、端口3、4属于蓝色VLAN。再从A发出广播帧的话交换机就只会把它转发给同属于一个VLAN的其他端口--也就是同属于紅色VLAN的端口2,不会再转发给属于蓝色VLAN的端口   同样,C发送广播信息时只会被转发给其他属于蓝色VLAN的端口,不会被转发给属于红色VLAN的端口   就这样,VLAN通过限制广播帧转发的范围分割了广播域上图中为了便于说明,以红、蓝两色识别不同的VLAN在实际使用中则是用"VLAN ID"来區分的。   直观地描述VLAN   如果要更为直观地描述VLAN的话我们可以把它理解为将一台交换机在逻辑上分割成了数台交换机。在一台交换機上生成红、蓝两个VLAN也可以看作是将一台交换机换做一红一蓝两台虚拟的交换机。   在红、蓝两个VLAN之外生成新的VLAN时可以想象成又添加了新的交换机。   但是VLAN生成的逻辑上的交换机是互不相通的。因此在交换机上设置VLAN后,如果未做其他处理VLAN间是无法通信的。   明明接在同一台交换机上但却偏偏无法通信--这个事实也许让人难以接受。但它既是VLAN方便易用的特征又是使VLAN令人难以理解的原因。   需要VLAN间通信时怎么办  那么当我们需要在不同的VLAN间通信时又该如何是好呢?   请大家再次回忆一下:VLAN是广播域而通常两个广播域之间由路由器连接,广播域之间来往的数据包都是由路由器中继的因此,VLAN间的通信也需要路由器提供中继服务这被称作"VLAN间路由"。   VLAN间路由可以使用普通的路由器,也可以使用三层交换机其中的具体内容,等有机会再细说吧在这里希望大家先记住不同VLAN间互相通信时需要用到路由功能。

因为对文本和对形状的填充颜色设置可能会采用不同的实现方法比方说,中国人吃饭和外国人吃饭都是吃饭泹是中国人可能用筷子,外国人则用刀叉所以,在colorProcessor里setFillColor就没有包含方法的实现了,给被继承的类自我扩充 第二种方法,使用接口把colorProcessor寫成接口。 package{ public interface //.... } } } 这 么看起来colorProcessor类和IColorProcessor接口没有太大区别。这两个都声明了方法也没有包含方法的实现。使用继承父类 的则通过覆盖方法来实現被继承类的方法,而实现接口的则在接口实现的类里写出了方法的实现像colorProcessor里这种只声明方法,里面实际 上没有方法实现的类实际上昰运用了抽象类的思想。不过在AS3里尚不可自定义抽象类,所以所谓的抽象类也只是有形无实。真正的抽象类跟接口一样不 能实例化,而且继承者必须覆盖抽象类的所有方法才可以实例化(所以这点跟接口也很相似)。AS3有内置的抽象类如 DisplayObjectContainer大家可以尝试去用来测试实唎化,继承的可行性 说到这里,其实还是没有说明接口存在的必要性显 然,上面的形状和文本类即使没有“抽象类”和接口,两个類照样可以正常运行但是,假若现在加入了MCMC不具备设置颜色的属性,那么在Flash 的IDE下,你使用颜料桶工具将无法对MC进行颜色填充如果伱要开发一个Flash的IDE,那么你就将要对你选中的对象进行判断,它是文本形状, 还是MC 多麻烦啊~而且当继承结构复杂的时候,都不知道该寫多少句了因此,getQualifiedSuperclassName就在这里起了点作用可以检查其超类是否为shapeClass或者textClass。 但 是这个函数只能检查到上一级的类名,若继承结构复杂可能有的继承两至三级甚至更多,在不知道继承级别的情况下用 IEventDispatcher); 回到刚才说的那个选定对象的问题。假设舞台上现在既有MC又有形状,也囿文本而且形状有圆形,矩形等子类的实例文本有静态文本和动态文本。那么当选定一个对象时,要确定该对象是否具有颜色填充嘚功能就可以将上面的代码简化为: if((currentObj is textClass) or (currentObj is shapeClass)){ nothing } 那么,只要具有填充颜色功能的类都实现IColorProcessor接口就返回true,就可以进行颜色填充而不需要再检查具體是什么类实现该接口了,也不用考虑继承关系多方便。 既然如此那么为什么不能用“抽象类”代替接口呢?如果textClass和shapeClass都继承colorProcessor类然后檢查currentObj is colorProcessor不也一样嘛?接口有何种特性是抽象类不具备的呢 至此,我终于没办法了要翻Java的技术文章来看,了解下接口和抽象类的区别所在 在我所看到的文章中,貌似都认为抽象类的优势比接口还大不过却推荐使用接口,而不用抽象类看到那些文章后面的地方,终于茅塞顿开啦~~ 在讲接口的优势之前我先继续刚才的Flash IDE开发问题。 现在假设你开发到Flash setFilters(filt_arr:Array):void{ } } } 那 么,如果想同时继承这两个类该怎么办呢?你不可以說先让colorProcessor和filterProcessor相互继承假如颜色处理器继承了 滤镜处理器,那将意味着形状也可以设置滤镜(这就错掉啦)。如果反过来就会导致MC可以進行颜色填充(也不行啊)。 在这种情况下接口的优势就体现出来啦。 见定义了接口,在处理多种类型的对象过程中会方便很多(可能有人会说假若方法真的不存在,用try...catch不一样可以处理掉嘛.....不 过......用这样的处理错误方法,在对象多的时候运行起来的状况会怎样呢?)从研究接口用处的过程中,我们发现接口的产生其实是源于Java和 AS3对类多态(多继承)的限制。为了可以更好地对类的特性进行描述判断处理,接口就显得相当有必要了 _____________________________________ 讲到现在,我发现自己似乎还没有讲明白问题但是这个时候我MS已经想到了一个更为实际的例子: 剛 讲了中国人和外国人都继承了人类,现在假设要对中国人和外国人再一次进行分类,都按性别再分别对中国人和外国人进行分类假洳全部用类来做的话,就是先 有一个最顶级的人类接着就是中国人类和外国人类,男人类和女人类接着就是中国男人,中国女人外國男人,外国女人 照第一种策略的话,让外国人在中国环游一周就只需要让所有外国人类的实例都调用一个环游的方法就可以了。但昰若要完成第二个任务,就需要先对中国的女 性调用一个组织开会的方法再对外国女性调用一个组织开会的方法。相反第二种策略僦让第一个任务完成得比较麻烦,第二个任务就相对方便鱼和熊掌,两者 不可兼得 但是,如果使用接口呢情况就大大不同。 在定义叻人的接口以后: } 同 样完成上面的两个任务第一个,只需要调用实现接口IForeigner的类就OK了同样地,第二个也只需要调用实现接口IWoman的类当分區分 细,不再按中国人外国人分类而要按照国籍来分成200多个类的时候,或者再细分至省和洲的时候这一做法的优势就更为明显了。 总結起来可以得知,在类的继承结构不能仅用树状去表示如上面的具有交叉继承结构的时候,就建议用接口了但是,如果是简单的树狀结构我觉得还是用类继承好些,毕竟这样的做法也有维护上的优势

我要回帖

更多关于 gis不同属性表合并 的文章

 

随机推荐