第3章-面向对象编程优秀PPT.ppt

上传人:1398****507 文档编号:86668116 上传时间:2023-04-14 格式:PPT 页数:42 大小:668KB
返回 下载 相关 举报
第3章-面向对象编程优秀PPT.ppt_第1页
第1页 / 共42页
第3章-面向对象编程优秀PPT.ppt_第2页
第2页 / 共42页
点击查看更多>>
资源描述

《第3章-面向对象编程优秀PPT.ppt》由会员分享,可在线阅读,更多相关《第3章-面向对象编程优秀PPT.ppt(42页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 1 13.1 对象和类对象和类每一个有明确意义和边界的事物都可以看作是一个对象(Object),这些对象有自己的属性,对象与对象之间还有确定的相互关系。例如,日常生活中运用的电视机就可以看作是一个对象,它可以接收微波信号,可以在屏幕上显示微波信号中包含的信息。此外,我们每个人都可以看作是一个对象,每人都有自己的特性:宠爱看电视或不宠爱看电视。我们与电视机之间还具有确定的关系:当按下电源按钮后,电视机才可以接收微波信号;同时,电视节目还可以让我们兴奋、悲观或者惊惶等

2、。我们可以把具有相像特征的事物归为一类,也就是把具有相同属性的对象看成一个类(Class)。比如,全部的电视机可以归成一个“电视机类”,全部的人可以归成一个“人类”。在面对对象的程序分析和设计技术中,“类”就是对具有相同属性和相同操作的一组相像对象的定义。从另一个角度来看,对象就是类的一个实例。南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 2 2在程序设计阶段,一个特别重要的工作就是依据面对对象的方法去分析所要解决的问题。也就是清晰所要解决的问题中有多少实体,每一个实体所具有的属性,各个实体之间的关系等。然后

3、把具有相同属性和相同操作的实体划分为一个类,明确每个类的属性和方法。一个困难的问题总是可以分成若干个比较简洁的问题,一个困难的类也往往是有一些比较简洁的类组成。在Delphi中,系统已经定义了各种各样的丰富的类,我们可以干脆运用它们。在定义类的时候,也可以由这些类的对象组成。一个类是一个数据类型,就像记录一样,是一种数据结构。南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 3 3此外,一个类的上层可以有父类,下层可以有子类。这种层次结构又叫做继承性,也就是可以在一个基类的基础上派生出一个新类,新类不仅具有基类的

4、属性和方法,而且还可以有自己的一些独特的属性和方法。这样,就可以在不同的类之间共享数据结构和程序代码,削减了冗余代码,增加了系统的健壮性,加快了系统的开发进度,并且使得系统的维护和修改工作变得简洁多了。南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 4 43.1.1 类的定义在Object Pascal语言中,类和记录比较相像,也是一个构造类型。定义格式如下:typeclassName=class(ancestorClass)memberListend;其中classname表示新声明类的标识符,ancesto

5、rClass表示新声明类的基类,类的名称通常是一个以T开头的标识符,memberList部分是类的成员,南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 5 5可以声明一些变量和对象,也可以声明一些过程与函数。组成类的成员有三种:数据域、属性和方法。数据域一般是类中运用的各种变量。与记录类型变量相像,类数据域存在于每一个该类的实例中。属性事实上也是类的一个数据域,但是属性还被用于类的接口。用户在声明属性时可以指定属性被赋值或者值被修改时进行的操作。类实例的属性对该实例 以外的程序来说,属性更像一个一般的数据域。例

6、如:定义一个TMyClass类typeTMyClass=class(TObject)end;南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 6 63.1.2 数据域类中的数据域就像一个属于某个对象的变量。数据域可以是任何一种类型甚至也可以是一个类的实例。在实际运用中类中的数据域通常都被声明为私有的。假如用户要把数据域声明为类类型,可以像声明其他类型变量一样操作。在定义类时要留意,全部对数据域的声明要在属性和方法的前面。例如:Type TMyClass=class(TObject)x:integer;/定义一个类

7、的数据整型变量xend;南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 7 73.1.3 方法方法(method)是属于某个类的函数或过程。在类中方法的声明被分成两个部分,一个是函数与过程的头部,另一个是函数与过程的定义部分。这种声明方式与函数、过程的前置声明特别类似。但在定义部分的标识符前要加类标识符和“.”来限定隶属关系。例如:Type TMyClass=class(TObject)/在TMyClass类中声明一个方法DoSomething,该方法是一个过程procedure DoSomething;/在T

8、MyClass类中声明一个方法GetSomething,该方法是一个函数function GetSomething:String;end;南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 8 8procedure TMyClass.DoSomething;/方法方法DoSomething过程的定义过程的定义beginend;function TMyClass.GetSomething:String;/方法方法GetSomething函数的定义函数的定义beginend;方法依据其头部引导字的不同可以分成四种:函数

9、、过方法依据其头部引导字的不同可以分成四种:函数、过程、构造和析构。其中构造和析构是分别用于在运用时程、构造和析构。其中构造和析构是分别用于在运用时创建一个类的对象实例和释放类对象实例。创建一个类的对象实例和释放类对象实例。南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 9 93.1.4 属性属性(property)是对象状态和行为的特征值,是类中数据的外在表现。外部代码通过属性访问类中的数据。因此属隐藏了类中数据和方法的实现细微环节。如窗体的Caption属性确定了窗体的标题。属性是类中可以在“读/写”时执行

10、指定方法的数据域;有的属性是可读写(read-write);有的属性只能读不能写,称为只读(read-only)属性。事务事务(event)是基于一种消息处理机制,是系统向窗口发送消息的结果。Delphi的事务是在收到相应的Windows消息后被触发的。如用户单击按钮,就会触发按钮的单击事务。可以为按钮的单击事务编写处理程序。当程序运行时,用户单击按钮,系统就执行该按钮上的用户编写事务处理程序。南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 10103.2 类的特性类的特性南昌理工学院计算机系南昌理工学院计算机

11、系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 11113.2.1 封装与继承在Delphi中,假如不指明父类,则默认的父类为TObject类,也就是干脆从TObject类派生出一个新类。TObject类是在System单元中定义的。类的全部成员都有一个标明“能见度”的属性,它们是由保留字private、protected、public、published来说明的。通过这些保留字,可以限制对类中成员的访问权限。每个保留字的具体含义如下:1.private 具有private属性的成员称为私有成员,不能被类所在单元以外的程序访问。也就是说,一个私有的

12、属性不行以在所在模块之外的其他模块中读写,一个私有的方法也不行以在所在模块之外的其他模块中被调用。南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 12122.protected具有protected属性的成员称为爱护成员,可以被该类的全部派生类访问,并且成为派生类的私有成员。3.public具有public属性的成员称为公有成员,可以被该类以外的类访问。假如两个类不在同一个单元文件中,则要在uses语句中包括被访问的类所在的单元名称。4.published具有published属性的成员称为发行类型成员,它的访

13、问权限基本与公有成员相同,只是在设计期间也可以被访问。通常发行类型的成员用在组件类的声明中,这样,就可以在对象监视器中访问组件的发行类型的成员。除了在类封装的时候可以限制成员的访问权限外,在后面介绍的单元文件中也可以限制对变量、对象、函数和过程等的访问权限。为了使软件系统具有良好的平安性、健壮性,应当留意这些限制权限的用法。南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 1313实例讲解【例3.1】该例说明白类的权限的运用。program Project1;$APPTYPE CONSOLEtype THuman

14、=class/定义一个人类 private Name:String;/姓名 public Age:integer;/年龄 procedure SetName(xm:String);function GetName:String;end;南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 1414procedure THuman.SetName(xm:String);begin Name:=xm;end;function THuman.GetName:String;begin result:=Name;end;var

15、 man:THuman;begin man:=THuman.Create;南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 1515man.SetName(张三);writeln(姓名:,man.GetName);man.Age:=20;writeln(年龄:,man.Age);writeln(按下回车键退出。);readln;end.南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 1616说明:例程中的THuman类默认从TOb

16、ject类派生而来,在类中定义了两个私有成员变量Name是字符串型和Age是整型。由于Name是私有的数据,所以不能被类所在单元以外的程序访问。因些我们定义两个公有方法SetName和GetName分别来给Name赋值和得到Name的值。这就体现了类的封装性。而Age是公有的数据,因此可以不须要公有方法来给Age赋值和获得Age赋值。南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 17173.2.2 构造函数和析构函数构造函数和析构函数在完成了类的封装之后,就可以运用这个类了。具体的步骤如下:1)声明类的一个变

17、量。这时可以将类作为一种数据类型来看待。2)调用类的一个特殊函数构造函数来进行一些初始化工作,比如依据类的结构来安排内存资源,完成对象的创建。3)对类的实例对象进行操作、运用。可以修改对象的属性或调用对象的方法。4)运用完毕,调用类的另一个特殊函数析构函数,删除创建的对象,同时释放相应的内存资源等。此外,还可以调用free过程释放对象占用的资源。南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 1818构造函数和析构函数是类定义中两个特别重要的函数,它们完成的功能正好相反,它们的定义也比较特殊。在声明白类的一个变

18、量后,并没有实际创建该类的对象,只是定义了一个指向该类对象的指针,有时也称之为类的引用。对象的创建和初始化工作是由类的构造函数来完成的。在类的构造函数中,不仅可以依据类的结构为类的对象安排内存空间,而且还可以打开文件或数据库,读取一些初始数据,或者限制一些设备进行复位等。在定义构造函数的时候,不是运用保留字func tion,而是运用保留字constructor,通常函数名运用Create。假如在定义类的时候没有定义构造函数,则系统会自动为该类生成一个默认的构造函数。构造函数必需运用默认的函数调用约定方式,也就是运用register指令字方式。南昌理工学院计算机系南昌理工学院计算机系 Delp

19、hi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 1919我们也可以自定义一个或多个构造函数。自定义的构造函数可以有参数列表,可以重载构造函数。一般在自定义的构造函数的函数体中,在起先部分运用inherited保留字来调用父类的构造函数。假如在创建并初始化对象时,调用构造函数发生错误,则会自动调用析构函数来删除这个没有完成的对象。析构函数的作用是将对象删除并释放相应的内存资源,此外还可以在这之前保存一些数据信息并关闭文件或数据库等,或者对一些设备进行复位并关机。在定义析构函数的时候,运用保留字destructor代替通常函数的function,函数名为Destr

20、oy。南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 2020假如在定义类的时候没有定义析构函数,则系统会自动为该类生成一个默认的析构函数。析构函数也必需运用默认的函数调用约定方式,也就是运用register指令字方式。我们也可以自定义析构函数。自定义的析构函数在结尾部分运用inherited保留字来调用父类的析构函数。在释放对象占用的资源时也可以运用TObject类的成员过程Free。运用Free过程可以删除一个对象,假如该对象不为nil,则会自动调用析构函数。通常在运行时创建的对象应当调用Free过程来代替

21、析构函数。因为假如对象没有被初始化,则调用析构函数时就会出错,而调用Free过程就没有问题。南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 2121实例讲解【例3.2】该例说明白类的封装和运用。program Project1;$APPTYPE CONSOLEtype THuman=class/人类 private Age:integer;/年龄 public Name:String;/姓名 function GetAge:integer;/获得年龄 procedure SetAge(nl:integer);/

22、设置年龄 end;TStudent=class(THuman)/学生类南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 2222 public SchoolName:String;/学校名称 procedure ShowInf;/显示学生信息 end;TTeacher=class(THuman)/老师类 public Wage:double;/薪水 constructor Create(gz:double);destructor Destroy;override;end;南昌理工学院计算机系南昌理工学院计算机系

23、Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 2323function THuman.GetAge:integer;/获得人员的年龄获得人员的年龄begin Result:=Age;end;procedure THuman.SetAge(nl:integer);begin Age:=nl;/设置人员的年龄设置人员的年龄end;procedure TStudent.ShowInf;/显示学生的信息显示学生的信息begin writeln(姓名:姓名:,Name,年龄:年龄:,GetAge,学校:学校:,SchoolName);end;南昌理工学院计算机

24、系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 2424constructor TTeacher.Create(gz:Double);/老师类的老师类的构造函数构造函数begin inherited Create;/调用父类的构造函数调用父类的构造函数 writeln(调用老师类的构造函数。调用老师类的构造函数。);Wage:=gz;end;destructor TTeacher.Destroy;/老师类的析构函数老师类的析构函数begin writeln(姓名为:姓名为:,Name,的老师类对象被删除。的老师类对象被删除。);

25、inherited Destroy;/调用父类的析构函数调用父类的析构函数end;南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 2525var S1:TStudent;/声明一个学生类的变量声明一个学生类的变量 T1:TTeacher;/声明一个老师类的变量声明一个老师类的变量begin S1:=TStudent.Create;/调用默认的构造函数创建对象调用默认的构造函数创建对象 S1.Name:=张三张三;S1.SetAge(19);S1.SchoolName:=某某理工学院某某理工学院;S1.ShowI

26、nf;/显示学生信息显示学生信息 S1.Destroy;/调用默认的析构函数调用默认的析构函数南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 2626 T1:=TTeacher.Create(1600.50);/调用构造函数创建对象 T1.Name:=陈建辉;T1.Age:=29;/显示老师信息 writeln(姓名:,T1.Name,年龄:,T1.Age,月薪:,T1.Wage);T1.Destroy;/调用自定义的析构函数 writeln(按下回车键退出。);readln;end.南昌理工学院计算机系南昌理

27、工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 2727南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 2828说明:例程中的THuman类默认从TObject类派生而来,然后它又派生出两个子类:TStudent类和TTeacher类。TStudent类对THuman类进行了功能扩展,又增加了SchoolName属性和ShowInf过程。TTeacher类对THuman类进行了不同的功能扩展,增加了Wage属性。此外,TTeacher类中自定义了构造函数

28、和析构函数。应当留意在自定义的构造函数和析构函数的函数体中,调用构造函数的方法与调用析构函数的方法不同,前者运用的是“类的构造函数”,后者运用的是“对象的析构函数”。南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 29293.2.3 多态性在在Object Pascal语言中定义的类的方法通常是语言中定义的类的方法通常是“静态静态”的,也就是在编译和链接阶段就确定了对象方法的调用地的,也就是在编译和链接阶段就确定了对象方法的调用地址。址。面对对象的程序设计语言还可以在运行时才确定对象方法面对对象的程序设计语言还

29、可以在运行时才确定对象方法的调用地址,这种调用函数的方式叫做多态性,有时也称的调用地址,这种调用函数的方式叫做多态性,有时也称为动态联编或滞后联编。在对象为动态联编或滞后联编。在对象Pascal语言中,多态性语言中,多态性是通过虚拟方法或动态方法实现的。是通过虚拟方法或动态方法实现的。通常,可以将类中的方法定义为下面的三种方式:通常,可以将类中的方法定义为下面的三种方式:静态方法。静态方法。虚拟方法。虚拟方法。动态方法。动态方法。南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 3030实例讲解【例【例3.3】该

30、例说明白静态方法】该例说明白静态方法ShowInf的调用状况。的调用状况。program Project1;$APPTYPE CONSOLE typeTHuman=class/人类人类procedure ShowInf;/显示信息显示信息end;TStudent=class(THuman)/学生类学生类procedure ShowInf;/显示学生信息显示学生信息end;南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 3131procedure THuman.ShowInf;/显示调用的是THuman类的Sho

31、wInfbeginwriteln(调用THuman.ShowInf);end;procedure TStudent.ShowInf;/显示调用的是T S t u d e n t类的S h o w I n fbeginwriteln(调用TStudent.ShowInf);end;varH1:THuman;/声明一个人类的变量S1:TStudent;/声明一个学生类的变量南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 3232beginH1:=THuman.Create;H1.ShowInf;/调用的是THuma

32、n类的ShowInfH1.Destroy;H1:=TStudent.Create;H1.ShowInf;/调用的是THuman类的ShowInfTStudent(H1).ShowInf;/调用的是TStudent类的ShowInfH1.Destroy;S1:=TStudent.Create;南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 3333S1.ShowInf;/调用的是TStudent类的ShowInfS1.Destroy;writeln(按下回车键退出。);readln;end.南昌理工学院计算机系南

33、昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 3434虚拟方法和动态方法也可以在派生类中被重载,通常称为“动态重载”。对象方法具体运用的方法并不是变量声明时指定的类的类型。指明一个方法为虚拟方法或动态方法要运用指令字virtual或dynamic。虚拟方法和动态方法在语意上是等价的,它们的不同主要之处在于运行时方法的调用实现上。虚拟方法调用的速度比较快,而动态方法的代码数量比较少。一般在静态方法无法实现的状况下,可以考虑虚拟方法和动态方法实现动态联编。通常虚拟方法在实现多态性方面效率比较高。假如一个基类派生了很多子类,只是间或对方

34、法进行重载,那么运用动态方法比较合适。南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 3535实例讲解【例3.4】该例说明白虚拟方法的定义与运用。program Project1;$APPTYPE CONSOLEType THuman=class/人类procedure ShowInf;virtual;end;TStudent=class(THuman)/学生类procedure ShowInf;override;end;TTeacher=class(THuman)/老师类procedure ShowInf;o

35、verride;end;南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 3636procedure THuman.ShowInf;beginwriteln(调用THuman.ShowInf);end;procedure TStudent.ShowInf;beginwriteln(调用TStudent.ShowInf);end;procedure TTeacher.ShowInf;beginwriteln(调用TTeacher.ShowInf);end;南昌理工学院计算机系南昌理工学院计算机系 Delphi De

36、lphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 3737varH1:THuman;/声明一个人类的变量声明一个人类的变量S1:TStudent;/声明一个学生类的变量声明一个学生类的变量begin H1:=THuman.Create;H1.ShowInf;/调用的是调用的是THuman类的类的ShowInf H1.Destroy;H1:=TStudent.Create;H1.ShowInf;/调用的是调用的是TStudent类的类的ShowInf TTeacher(H1).ShowInf;/调用的是调用的是TStudent类的类的ShowInf H1.Destroy;H

37、1:=TTeacher.Create;H1.ShowInf;/调用的是调用的是TTeacher类的类的ShowInf THuman(H1).ShowInf;/调用的是调用的是TTeacher类的类的ShowInf南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 3838 H1.Destroy;S1:=TStudent.Create;S1.ShowInf;/调用的是TStudent类的ShowInf TTeacher(S1).ShowInf;/调用的是TStudent类的ShowInf S1.Destroy;wri

38、teln(按下回车键退出。);readln;end.南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 39393.2.4 self关键字方法与过程及函数在定义、实现方式上特别相像。它们之间的区分在于,在实现方法时,方法有一个隐式参数self,它是对当前对象的一个引用。在声明同类的多个对象时,运用self就只对自己的数据进行操作,而不会影响其他兄弟对象。例如:program Project1;$APPTYPE CONSOLEtype THuman=class/定义一个人类 private Name:String;/

39、姓名南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 4040精品课件精品课件!南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 4141精品课件精品课件!南昌理工学院计算机系南昌理工学院计算机系 Delphi Delphi 程序设计基础程序设计基础 2006-9-1 2006-9-1 4242 public Age:integer;/年龄 procedure SetName(xm:String);function GetName:String;end;procedure THuman.SetName(xm:String);begin self.Name:=xm;/self表示THuman当前类对象end;function THuman.GetName:String;begin result:=self.Name;end;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > pptx模板 > 商业计划书

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁