⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chap02.html

📁 VC实例 通过经典实例讲解 是word格式的 阅读方便
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb_2312-80">
<META NAME="Generator" CONTENT="Microsoft Word 97">
<TITLE>第二章 面向对象编程与C++语言</TITLE>
<META NAME="Template" CONTENT="D:\Office95\Template\Manuscripts\32开图书模板.dot">
</HEAD>
<BODY>

<FONT FACE="黑体" LANG="ZH-CN" SIZE=5><P ALIGN="CENTER">第二章</FONT><FONT FACE="Arial" SIZE=5> </FONT><FONT FACE="黑体" LANG="ZH-CN" SIZE=5>面向对象编程与</FONT><FONT FACE="Arial" SIZE=5>C++</FONT><FONT FACE="黑体" LANG="ZH-CN" SIZE=5>语言</P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">面向对象的编程是当前程序设计中的热门话题,在这方面已有很多的书籍和其它文献可供参考,而且,全面的讲述面向对象的编程技术也不是本书的任务,在这里,本章仅仅介绍使用</FONT><FONT SIZE=3>Visual C++</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>进行面向对象编程中所用到的一些关键概念,这些概念是进一步学习</FONT><FONT SIZE=3>Visual C++</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>所必须的。除了介绍面向对象编程和</FONT><FONT SIZE=3>C++</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>语言的基本概念外,本章还介绍了在使用</FONT><FONT SIZE=3>C++</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的类时所需注意的一些问题。</P>
<P ALIGN="JUSTIFY">另一个需要注意的问题是,尽管本章会介绍面向对象编程和</FONT><FONT SIZE=3>C++</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>语言的基本概念,但是,我们仍然假定阅读本书的读者具有</FONT><FONT SIZE=3>C++</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>语言的基础知识,至少,需要使用过</FONT><FONT SIZE=3>C++</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>中的类和对象,并且对它们有一定的了解。本章也会介绍类和对象的概念以及如何使用它们,但是,假设你在阅读这些内容之前,对它们还是一无所知,那么,我们建议你最好先看一下一些专门介绍面向对象编程和</FONT><FONT SIZE=3>C++</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>语言的入门知识,本书不需要你非常深入的了解这些内容,因为我们假定你懂得</FONT><FONT SIZE=3>C++</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>语言,但不假定你精通</FONT><FONT SIZE=3>C++</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>语言,本章正是写给那些虽然能够使用</FONT><FONT SIZE=3>C++</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>语言中的类和对象进行编程,但是对一些概念的认识还不够清晰的</FONT><FONT SIZE=3>C++</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>初学者。如果你已经对</FONT><FONT SIZE=3>C++</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>语言以及它在</FONT><FONT SIZE=3>Visual C++</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>中的实现非常之熟悉,那么,你也可以暂时跳过本章的内容,继续阅读本书的其它章节。</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">本章所要讲述的内容包括:</P>

<UL>
<P ALIGN="JUSTIFY"><LI>面向对象的编程的编程技术</LI></P>
<P ALIGN="JUSTIFY"><LI>对象及其特点</LI></P>
<P ALIGN="JUSTIFY"><LI>使用</FONT><FONT SIZE=3>C++</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>中的类</LI></P>
<P ALIGN="JUSTIFY"><LI>从已有的类中派生新的类</LI></P>
<P ALIGN="JUSTIFY"><LI>多态及其在</FONT><FONT SIZE=3>C++</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>中的实现</LI></P>
<P ALIGN="JUSTIFY"><LI>类模板</LI></P></UL>

</FONT><FONT FACE="仿宋_GB2312" LANG="ZH-CN" SIZE=4><P ALIGN="CENTER">第一节</FONT><FONT SIZE=4> </FONT><FONT FACE="仿宋_GB2312" LANG="ZH-CN" SIZE=4>面向对象的编程技术</P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">本节阐述面向对象的程序设计方法中的若干重要概念、方法和思想。在刚开始的时候,也许你对这些概念还不大能搞得清楚,但是,随着对</FONT><FONT SIZE=3>C++</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的使用和了解的深入,当你再回过头来仔细推敲这些概念,就会发现对它们有了新的认识。</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">传统的“结构化程序设计”方法是由荷兰学者</FONT><FONT SIZE=3>Dijkstra</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>在</FONT><FONT SIZE=3>70</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>年代提出的,它把面向机器代码的程序抽象为三种基本程序结构:顺序结构、选择结构和重复结构,并提出了一系列的设计原则,如自上而下、逐步求精、模板化编程等。根据这些原则,按照程序所需实现的功能,自上而下层层展开。上层是定义算法的模块,最下层是实现算法的模块。按照这样的规范构成的模块是高度功能性的,有很强的内聚力。但各模块的数据处于实现功能的从属地位,因此,各模块与数据间的相关性就较差,无论把数据分放在各个模块里还是作为全局量放在总控模块中,模块之间都有很大的耦合力。在</FONT><FONT SIZE=3>Windows</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>程序中,多个模块是并发执行的,这样,这种耦合力就会极易导致程序系统出现混乱。</P>
<P ALIGN="JUSTIFY">而且,在传统的语言中,程序是由传递参数的程序和函数的集合组成,每个过程处理它的参数,并可能返回某个值,这种程序是以过程为中心的。在传统的面向过程的程序设计中,程序员必须基于过程来组织模块,这必然会导致程序的结构与应用领域中结构差异很大。</P>
<P ALIGN="JUSTIFY">现行程序设计方法的另一个大的缺点是围绕着各种软件系统中关键结构的作用域与可见性。许多重要的函数或过程的实现主要地取决于关键的数据结构。如果一个或多个这样的数据结构了发生了变化,这种变化将涉及到许多方面,许多函数和过程必须重写。有时几个关键的数据结构发生变化,将导致整个软件系统的结构崩溃。随着软件规模和复杂性的增长,这种缺陷日益明显。当程序达到一定规模后,为了修改一个小的错误,常可能引出多个大的错误,究其原因,问题就出在传统的程序设计方式上。</P>
<P ALIGN="JUSTIFY">而当前的软件应用领域已从传统的科学计算和事务处理扩展到了其它的很多方面,如人工智能、计算机辅助设计和辅助制造等,所需处理的数据也已从简单的数字和字符串发展为记录在各种介质上并且有多种格式的多媒体数据,如数字、正文、图形、声音和影像等。数据量和数据类型的空前激增导致了许多程序的规模和复杂性均接近或达到了用结构化程序设计方法无法管理的程度。</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">为了最大限度的得用已有的资源和减少程序开发的工作量,需要有一种比传统的过程式结构化程序设计方法抽象能力更强的新方法,面向对象的程序设计方法正是在这种背景下诞生的。</P>
</FONT><FONT FACE="Arial"><P>2.1.1 </FONT><FONT FACE="黑体" LANG="ZH-CN">面向对象的程序设计</P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">面向对象的程序的最根本的目的就是使程序员更好的理解和管理庞大而复杂的程序,它在结构化程序设计的基础上完成进一步的抽象。这种在设计方法上更高层次的抽象正是为了适应目前软件开发的特点。</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">最早的“面向对象”设计语言是</FONT><FONT SIZE=3>Smalltalk</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>语言,该语言是</FONT><FONT SIZE=3>1972</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>年美国</FONT><FONT SIZE=3>Xeron</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>公司</FONT><FONT SIZE=3>Palo Alto</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>研究中心为快速处理各种信息而在</FONT><FONT SIZE=3>Alto</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>个人机上研制的软件,</FONT><FONT SIZE=3>1983</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>年正式发行了</FONT><FONT SIZE=3>Smalltalk 2.0</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>版。</FONT><FONT SIZE=3>Smalltalk 80</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>被认为是最纯的面向对象的语言,该语言只有一种数据类型</FONT><FONT SIZE=3>—</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>对象。</FONT><FONT SIZE=3>Smalltalk</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>未能推广,</FONT><FONT SIZE=3>Alto</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>机上的软件也从未出售过,但它所开创的面向对象程序设计方法将结构化程序设计的抽象层次又增高了一层,对程序设计方法产生的影响是巨大的。继</FONT><FONT SIZE=3>Smalltalk</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>之后,出现了许多的面向对象的程序设计语言,如</FONT><FONT SIZE=3>Eiffel</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>、</FONT><FONT SIZE=3>Clos</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>、</FONT><FONT SIZE=3>C++</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>和</FONT><FONT SIZE=3>Objective-C</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>等,其它的非面向对象的程序设计语言,如</FONT><FONT SIZE=3>Pascal</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>、</FONT><FONT SIZE=3>Basic</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>等也引进了新的面向对象的机制,产生了新的</FONT><FONT SIZE=3>Object Pascal</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>、</FONT><FONT SIZE=3>Visual Basic</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>等面向对象的变种。</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">使用面向对象的程序设计方法绝非是要摒弃现有的结构化程序设计方法,相反,它是在充分吸收结构化程序设计优点的基础上,引进了一些新的、强有力的概念,从而开创了程序设计工作的新天地。面向对象的程序设计方法把可重复使用性视为软件开发的中心问题,通过装配可重用的部件来生产软件,而不是像目前编程所用的那样,通过调用函数库中的函数来实现。这里要注意,我们是基于应用程序这一个层次来阐述这些问题是,事实上,在对象内部的实现上,我们常常使用过程式的结构化程序设计方法,也常常调用</FONT><FONT SIZE=3>C/C++</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>函数库中的很多有用的函数,然而从程序的总体结构上说,它是由一系列对象构成的,对象之间能够以某种方式进行通信和协作,从而实现程序的具体功能。</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">面向对象的程序设计中最基本的概念是对象,一般意义上的对象指的是一个实体的实例,在这个实体中包括了特定的数据和对这些数据进行操作的函数。对于面向对象的程序设计,一个对象具有状态</FONT><FONT SIZE=3>(state)</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>、行为</FONT><FONT SIZE=3>(behavior)</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>和标识</FONT><FONT SIZE=3>(identity)</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>。对象的状态包括它的属性和这些属性的当前值。对象的行为包括可以进行的操作以及所伴随的状态的变化。对象的标识用来区别于其它的对象。而一个</FONT><FONT SIZE=3>COM</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>对象的行为由它所支持的接口来定义。我们通常不显式的指定</FONT><FONT SIZE=3>COM</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>对象的状态,而被其接口所包含。使用</FONT><FONT SIZE=3>IUnknown::QueryInterface</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>在接口之间进行移动的能力定义了</FONT><FONT SIZE=3>COM</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>对象的标识。</P>
<P ALIGN="JUSTIFY">对象的核心概念就是通常所说的“封装性”</FONT><FONT SIZE=3>(encapsulation)</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>、“继承性”</FONT><FONT SIZE=3>(inheritance)</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>和“多态性”</FONT><FONT SIZE=3>(polymorphism)</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>,下面我们分别阐述其具体含义。</P>
</FONT><FONT FACE="Arial"><P>2.1.2 </FONT><FONT FACE="黑体" LANG="ZH-CN">封装</P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">按照面向对象编程原定义,所谓的封装性是指隐藏类</FONT><FONT SIZE=3>(class)</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>为支持和实施抽象所作的内部工作的过程。类的接口是公有的,它定义了一个类所能完成的功能,而这些接口的实现是私有的或受保护的,它定义了类完成这些功能所作的具体操作。对于使用这些类的编程者来说,只需要知道类所能完成的功能,而不需要知道这些功能具体是如何实现。拿我们所常的手表作为例子,在使用手表时,我们只需要知道手表所能完成的功能和如何使用手表来完成这些功能,这些内容相当于对象的接口。我们不需要知道在手表的内部,这些功能是如何实现的,因此,对于手表来说,无论手表使用的是一般的机械摆,还是石英振荡器,只要它们的使用方法是完全一样的,用户就没有必要知道这个不同。另一个例子的集成电路芯片,我们只需要知道该芯片的每一个引脚的电气参数和功能,而不必知道这些功能在芯片的内部是如何实现的,就可以使用该芯片来组装电路。如果仅就封装性而言,这里的手表和集成电路芯片就相当于面向对象的编程中的对象。下面我们再举一个例子,众所周知,</FONT><FONT SIZE=3>Win32</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>操作平台目前包括</FONT><FONT SIZE=3>Windows 95</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>和</FONT><FONT SIZE=3>Windows NT</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>,而事实上,</FONT><FONT SIZE=3>Windows 95</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>和</FONT><FONT SIZE=3>Windows NT</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>使用了完全不同的内核,对于很多同样的操作,在</FONT><FONT SIZE=3>Windows 95</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>和</FONT><FONT SIZE=3>Windows NT</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>两个操作系统下的实现方式是不同,但两个操作系统都提供了同样的</FONT><FONT SIZE=3>Win32</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>应用程序编程接口</FONT><FONT SIZE=3>(API)</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>,这样,我们所编写的应用程序只需要和</FONT><FONT SIZE=3>Win32</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>应用程序编程接口打交道,而没有必要知道具体的每一个</FONT><FONT SIZE=3>Win32 API</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>函数在操作系统中是如何实现的。换一种说法就是,</FONT><FONT SIZE=3>Windows 95</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>和</FONT><FONT SIZE=3>Windows NT</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>封装了</FONT><FONT SIZE=3>Win32 API</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>函数的具体实现。</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">一个类在定义数据的同时也定义了对这些数据的操作,这些操作称作方法</FONT><FONT SIZE=3>(method)</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>。按照面向对象的定义,方法就是对对象中的数据的访问。在</FONT><FONT SIZE=3>C++</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>中,对对象中的数据的访问是通过公有成员函数来进行的,这些公有成员函数可以在对象的外部进行调用,它们提供了对象的外部接口。而对于这些接口的内部的实现在对象的外部的不可见的,这些实现包括了类内部所使用的数据结构和支持公有方法的实现的私有成员函数,通常,这些数据成员和成员函数是私有的,它们只能为类中成员函数所访问,而不能从类的外部进行访问。</P>
<P ALIGN="JUSTIFY">访问一个方法的过程称为向这个对象发送一个消息</FONT><FONT SIZE=3>(message)</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>,对象的工作是靠消息来激发的,对象之间也是通过消息发生联系的,即请求其它对象做什么或响应其它对象的请求是通过发送或接收消息来实现的。</P>

<UL>
</FONT><FONT FACE="黑体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY"><LI>注意:</LI></P>
</FONT><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY"><LI>这里的所说消息和在</FONT><FONT SIZE=3>Windows</FONT><FONT FACE="楷体_GB2312" LANG="ZH-CN" SIZE=3>编程中所常说的消息是两个不同术语,尽管在某些方面两者的确有很多相象之处。</LI></P></UL>

</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">封装可避免许多维护性问题。如果一个基本数据类型的结构被修改了,例如一个链表修改成了一个数组,除类中的访问该数据的方法的代码外,软件系统的其余部分是不受影响的,因为基本数据在外部是不可见的,只能通过公有方法的接口与基本数据发生联系,改变一个类的实现,丝毫不影响使用这个类的程序员,从而大大的减少了应用程序出错的可能性。</P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=1><P ALIGN="CENTER"><IMG SRC="Image246.gif" tppabs="http://166.111.167.223/computer/cai/visual_c++_5.0_programming/Image246.gif" WIDTH=544 HEIGHT=346></P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=1><P ALIGN="CENTER">图</FONT><FONT SIZE=1>2.1 </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=1>自然世界中的继承关系</P>
</FONT><FONT FACE="Arial"><P>2.1.3 </FONT><FONT FACE="黑体" LANG="ZH-CN">继承</P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">类支持层次机制,因此我们可以借用可重用性部件来很容易的从一个或多个已有类出发,来生产各种更符合我们要求的新类。假设我们从类</FONT><FONT SIZE=3>A</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>出发来派生新的类</FONT><FONT SIZE=3>B</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>,那么我们称类</FONT><FONT SIZE=3>A</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>为类</FONT><FONT SIZE=3>B</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的基类</FONT><FONT SIZE=3>(base class)</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>,类</FONT><FONT SIZE=3>B</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>为类</FONT><FONT SIZE=3>A</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的派生类</FONT><FONT SIZE=3>(derived class)</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>,类</FONT><FONT SIZE=3>B</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>继承了类</FONT><FONT SIZE=3>A</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>中的各种行为和状态,并可添加自己的成员变量和成员函数。</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">我们先来看一个例子,图</FONT><FONT SIZE=3>2.1</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>给出了自然世界中的生物的一种继承层次图,最高层次的生物类代表了层次结构中最一般的概念,较低层次的类表示由上一层的类</FONT><FONT SIZE=3>(</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>即其基类</FONT><FONT SIZE=3>)</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>所派生的特殊的概念。如上面的继承关系,动物类从其基类</FONT><FONT SIZE=3>—</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>生物类中继承生物类的所有属性和行为,并且定义了动物类所特有的属性和行为,类似的,脊椎动物类从动物类那儿继承了所有的属性和行为,并且定义了自身特有的属性和行为;……,人类从灵长动物类那儿继承了所有的属性和行为,并且定义了人类所特有的属性和行为。</P>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -