第2章类和对象的特性_第1页
第2章类和对象的特性_第2页
第2章类和对象的特性_第3页
第2章类和对象的特性_第4页
第2章类和对象的特性_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第1章 概述 第第2章类和对象的特性章类和对象的特性2.1 面向对象程序设计方法概述 2.1.1 什么是面向对象的程序设计 2.1.2 面向对象程序设计的特点 2.1.3 类和对象的作用 2.1.4 面向对象的软件开发2.2 类的声明和对象的定义 2.2.1 类和对象的关系 2.2.2 类定义 2.2.3 定义对象的方法 2.2.4 类和结构体的异同第1章 概述 第第2章类和对象的特性章类和对象的特性2.3 类的成员函数 2.3.1 成员函数的性质 2.3.2 在类外定义成员函数 2.3.3 内置成员函数 2.3.4 成员函数的存储方式2.4 对象成员的引用 2.4.1 通过对象名和成员运算符

2、访问对象中的成员 2.4.2 通过指向对象的指针访问对象中的成员 2.4.3 通过对象的引用来访问对象中的成员2.5 类和对象的简单应用举例2.6 类的封装性和信息隐蔽 2.6.1 公用接口与私有实现的分离 2.6.2 类声明和成员函数定义的分离 2.6.3 面向对象程序设计中的几个名词第1章 概述 2.1 面向对象程序设计方法概述面向对象程序设计方法概述对于规模比较小的程序,可以直接写出一个面向过程的程序,详细地描述每一瞬时的数据结构及对其的操作过程。但是当程序规模较大时,就显得力不从心了。C+就是为了解决编写大程序过程中的困难而产生的。第1章 概述 2.1.1 什么是面向对象的程序设计什么

3、是面向对象的程序设计1. 对象 客观世界中任何一个事物都可以看成一个对象。对象的静态特征称为属性,对象的动态特征称为行为。任何一个对象都应当具有属性和行为这两个要素。对象应能根据外界给的消息进行相应的操作。一个对象一般是由一组属性和一组行为构成的。在一个系统中的多个对象之间通过一定的渠道相互联系。要使某一个对象实现某一种行为,应当向它传送相应的消息。第1章 概述 2.1.1 什么是面向对象的程序设计什么是面向对象的程序设计在C+中,每个对象都是由数据和函数这两部分组成的。数据体现了前面提到的“属性”,函数是用来对数据进行操作的,以便实现某些功能。在程序中如果调用某一个对象中的函数,就相当于向该

4、对象传送一个消息,要求该对象实现某一行为。第1章 概述 2.1.1 什么是面向对象的程序设计什么是面向对象的程序设计2. 封装与信息隐蔽可以对一个对象进行封装处理,把它的一部分属性和功能对外界屏蔽,也就是说从外界是看不到的,甚至是不可见的。在设计一个对象时,要考虑如何进行封装,把不必要外界知道的部分“隐蔽”起来。也就是说,把对象的内部实现和外部行为分隔开来。封装指两方面的含义:一是将有关的数据和操作代码封装在一个对象中,形成一个基本单位,各个对象之间相对独立,互不干扰。二是将对象中某些部分对外隐蔽,只留下少数接口,以便与外界联系,接收外界的消息。这种对外界隐蔽的做法称为消息隐蔽。第1章 概述

5、2.1.1 什么是面向对象的程序设计什么是面向对象的程序设计3. 抽象抽象的作用是表示同一类事物的本质。C和C+中的数据类型就是对一批具体的数的抽象。类是对象的抽象,而对象则是类的特例,或者说是实例。第1章 概述 2.1.1 什么是面向对象的程序设计什么是面向对象的程序设计4. 继承与重用C+提供了继承机制,采用继承的方法可以很方便地利用一个已有的类建立一个新的类,这就可以重用已有软件中的一部分甚至大部分,节省了编程工作量。这就是“软件重用”的思想,不仅可以利用自己过去所建立的类,而且可以利用别人使用的类或存放在类库中的类,对这些类作适当加工即可使用,大大缩短了软件开发周期。第1章 概述 2.

6、1.1 什么是面向对象的程序设计什么是面向对象的程序设计5. 多态性如果有几个相似而不完全相同的对象,在向它们发出同一个消息时,它们的反应各不相同,分别执行不同的操作。这种情况就是多态现象。在C+中,所谓多态性是指:由继承而产生的相关的不同的类,其对象对同一消息会做出不同的响应。多态性是面向对象程序设计的一个重要特征,能增加程序的灵活性。第1章 概述 2.1.2 面向对象程序设计的特点面向对象程序设计的特点传统的面向过程程序设计是围绕功能进行的,用一个函数实现一个功能。所有的数据都是公用的,一个函数可以使用任何一组数据,而一组数据又能被多个函数所使用。程序设计者必须考虑每一个细节,什么时候对什

7、么数据进行操作。当程序规模较大,数据很多,操作种类繁多时,难以应付。第1章 概述 2.1.2 面向对象程序设计的特点面向对象程序设计的特点第1章 概述 2.1.2 面向对象程序设计的特点面向对象程序设计的特点面向对象程序设计采取的是另外一种思路。它面对的是一个个对象。一组操作调用一组数据。例如,我们把三角形三条边a,b,c和对它们的操作放在一起,封装成一个对象。把数据和有关操作封装成一个对象,好比工厂把材料、机器和工人承包给车间,厂长只要向车间下达命令:“一车间生产100个轮胎”,“三车间生产15个车身”,车间就会运作起来,调动工人选择有关材料,在某些机器上完成有关的操作,把指定材料变成产品。

8、厂长不必过问车间内运作的细节。程序设计者的任务:设计所需的各种类和对象,考虑怎样向有关对象发送消息,以完成所需的任务。第1章 概述 2.1.3 类和对象的作用类和对象的作用类是所有面向对象语言的共同特征。C+支持面向过程的程序设计,也支持基于对象和面向对象的程序设计。基于对象的程序是以类和对象为基础的。面向过程的程序中数据是公用的,可以被不同的函数所调用,数据的交叉使用容易导致程序的错误。把相关的数据和操作放在一起,形成一个整体,与外界相对分隔,这就是面向对象程序设计中的对象。第1章 概述 2.1.3 类和对象的作用类和对象的作用在面向过程的结构化程序设计中,使用以下公式来表述程序:程序=算法

9、+数据结构算法和数据结构是独立分开设计的,以算法为主体。面向对象程序设计:对象=算法+数据结构程序=(对象+对象+.)+消息或程序=对象S+消息消息的作用是对对象的控制。程序设计的关键是设计好每一个对象,以及对这些对象发出的命令。第1章 概述 2.1.4 面向对象的软件开发面向对象的软件开发面向对象的软件工程包括以下几个部分:1. 面向对象分析(object oriented analysis,OOA)2. 面向对象设计(object oriented design,OOD)3. 面向对象编程(object oriented programming,OOP)4. 面向对象测试(object o

10、riented test,OOT)5. 面向对象维护(object oriented soft maintenance,OOSM)第1章 概述 2.2 类的声明和对象的定义类的声明和对象的定义2.2.1类和对象的关系2.2.2 类定义2.2.3定义对象的方法2.2.4类和结构体类型的异同第1章 概述 2.2.1 类和对象的关系类和对象的关系在C+中对象的类型称为类。类代表了某一批对象的共性和特征。类是对象的抽象,而对象是类的具体实例。类是对象的模板,是用来定义对象的一种抽象类型。类是抽象的,不占用内存,而对象是具体的,占用内存。第1章 概述 2.2.2 类定义类定义类(类(Class) 计算机

11、面向对象程序设计语言中的一个概念,实际上是对某种类型的对象定义变量和方法的原型。它表示对现实生活中一类具有共同特征的事物的抽象,是面向对象编程的基础。 将数据与其相关操作放到一起!提高软件质量. 类实际上为数据和数据相关操作(函数)的封装。 问题:对用户输入半径,程序计算园的面积。 定义一个类Circle: class Circle 园数据; 相关操作; 第1章 概述 2.2.2 类定义类定义园数据?园数据? 相关操作相关操作? radius,area ? calculate_area(double r),get_area(), print_area(). ? class Circlepubl

12、ic: double calculate_area(double r); void set_radius(); void () get_area(); void print_area(); private:double radius; / 半径 double area; ; 第1章 概述 2.2.2 类定义类定义类定义类定义class 类名称 private: 数据成员列表; 成员函数列表; public: 数据成员列表; 成员函数列表; protected: 数据成员列表; 成员函数列表; ; 第1章 概述 2.2.2 类定义类定义类是一个封装体,声明描述封装内容: 数据成员(data me

13、mbers); 成员函数(member functions); 其中数据成员描述类的值集,而成员函数描述类的操作集。 成员函数的声明和实现可放在一起,也可分开。 1内部定义内部定义 在类体中只给出成员函数声明和函数体实现。 内部定义的一般形式: 返回类型 成员函数名(参数表) /成员函数体 如果在类内定义成员函数,就不需要冠以类名了,它本身就在类的作用域中。 类的声明和实现都在内部完成: 第1章 概述 2.2.2 类定义类定义例例1 类的应用实例类的应用实例#define PI 3.14159 class Circle public: double carea(double r) return

14、 r*r*PI; void set_radius() cout radius; void get_area() area= radius*radius*PI; void print_area() cout 圆的面积为: area endl; private: double radius; / 半径 double area; ; 第1章 概述 2.2.2 类定义类定义例例3 Location类定义类定义 class Location public: void Init(int initX,int initY) X=initX; Y=initY; int GetX() return X; int

15、GetY() return Y; private: int X,Y; ; 第1章 概述 2.2.2 类定义类定义例例4 Complex类定义类定义 class Complex private: double real; double imag; public: double getreal() return real; double getimag() return imag; void setreal(double r) real = r; void setimag(double i) imag = i; Complex(double r, double i) real = r; imag

16、= i; ; 第1章 概述 2.2.2 类定义类定义 类的声明和类的实现通常分开完成,以两个不同文件存储。 在类声明的内部进行声明,在类声明的外面进行定义。 习惯做法: *.h: 类的声明; *.cpp: 成员函数的实现; VC为用户创建的应用程序框架中都是将各个类以.h和同名的.cpp文件组织的。 第1章 概述 2.2.3 定义对象的方法定义对象的方法1. 先声明类类型,然后再定义对象如Student stud1,stud2;2. 在声明类的同时定义对象class Studentpublic: void display() coutnum:endl; coutname:nameendl; c

17、outsex:sexendl; private: int num; char name20; char sex; stud1,stud2;第1章 概述 2.2.3 定义对象的方法定义对象的方法3. 不出现类名,直接定义对象class private:.public:. stud1,stud2;很少用这种方法,也不提倡。第1章 概述 2.2.4 类和结构体的异同类和结构体的异同C+扩展了结构体struct的功能,允许用它声明一个类例如:struct Studentpublic: void display() coutnum:endl; coutname:nameendl; coutsex:sex

18、endl; private: int num; char name20; char sex; ;Student stud1,stud2;第1章 概述 2.2.4 类和结构体的异同类和结构体的异同用struct声明的类和用class声明的类有所区别。用struct声明的类,如果对其成员不作private或public的声明,默认为public。而用class定义的类,如果不作private或public声明,默认为private。如果希望成员是公用的,用struct比较方便,如果希望部分成员是私有的,宜用class。第1章 概述 2.3 类的成员函数类的成员函数2.3.1 成员函数的性质2.3.

19、2 在类外定义成员函数2.3.3 内置成员函数2.3.4 成员函数的存储方式第1章 概述 2.3.1 成员函数的性质成员函数的性质成员函数也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中。它可以被指定为public(公用的)、private(私有的)或protected(受保护的)。在使用时,要注意调用它的权限(是否能被调用)以及它的作用域(函数能使用什么范围中的数据和函数)。第1章 概述 2.3.1 成员函数的性质成员函数的性质私有成员函数只能被本类中的其他成员函数调用,不能被类外调用。成员函数可以访问本类中的任何成员,可以引用在本作用域中有效的数据。一般的做

20、法是将需要被外界调用的声明为public,它们是类的对外接口。只在本类中使用的成员函数,定义为private。第1章 概述 2.3.2 在类外定义成员函数在类外定义成员函数在类体中只给出成员函数声明,而将函数体写在类的外部。 外部定义的一般形式: 返回类型 类名:成员函数名(参数表) /成员函数体 其中“:”为作用域运算符,它指出了成员函数的所属的类。成员函数一定是属于某一类的,不能独立存在,这是它与普通函数的重要差别,因此在定义成员函数时,函数名前要冠以类名。 实现在外部完成: 第1章 概述 2.3.2 在类外定义成员函数在类外定义成员函数例例 Person类定义类定义 class Pers

21、on public: void setAge( unsigned n ); unsigned getAge( ) const; private: unsigned age; ; void Person:setAge(unsigned n) age = n; unsigned Person:getAge( ) const return age; 第1章 概述 2.3.3 内置成员函数内置成员函数为了减少时间开销,如果在类体中定义的成员函数中不包括循环等控制结构,C+系统会自动地对它们作为内置函数来处理。在类外定义的成员函数如果要作为内置成员函数,需要用inline声明,如:class Stude

22、nt public: inline void display();private: int num; string name; char sex;在内体内定义的函数,一般都省写inline。第1章 概述 2.3.3 内置成员函数内置成员函数inline void Student:display() coutnum:numendl; coutname:nameendl; coutsex:sexendl;对需要作为内置函数处理的,在函数的定义或函数的原型声明时做inline声明即可(二者有其一即可)。值得注意的是:如果在类体外定义inline函数,则必须将类的声明和成员函数的定义都放在同一个头文件

23、中(或者写在同一个源文件中),否则编译时无法进行置换。只有在类外定义的成员函数规模很小而调用频率较高时,才指定为内置函数。第1章 概述 2.3.4 成员函数的存储方式成员函数的存储方式同一类的不同对象中的数据成员的值一般是不同的,而不同对象的函数代码是相同的。不同对象使用同一个函数段,通过this指针,以区别调用的是哪个对象的函数。(1)不论成员函数在类内定义还是在类外定义,成员函数的代码段的存储方式是相同的,都不占用对象的存储空间。(2)不要将成员函数的这种存储方式和inline函数的概念混淆。不论是否用inline声明,成员函数的代码段都不占用对象的存储空间。inline函数只影响程序的执

24、行效率,而与成员函数是否占用对象的存储空间无关。第1章 概述 2.3.4 成员函数的存储方式成员函数的存储方式虽然成员函数并没有放在对象的存储空间中,但从逻辑的角度,成员函数是和数据一起封装在一个对象中的,只允许本对象中成员的函数访问同一对象中的私有数据。第1章 概述 对象(对象(Object) 对象是类的一个实例。 例如,所有学生是一个类,而名为张三的学生为一个对象。 人们也借助对自然界具有共同特征的事物或实体的理解,定义类和对象。它们的共同特征包含属性和行为,行为也称为操作方法,或方法。类的变量 类名 变量名; /类的变量的声明,与一般变量声明相同。与int类型和int变量关系类似。 该变

25、量称为一个对象或实例。类代表的是一般的概念,而对象代表具体的东西。2.4 对象成员的引用对象成员的引用第1章 概述 2.4 对象成员的引用对象成员的引用在程序中经常需要访问对象中的成员。访问对象中的成员可以有3种方法:(1)通过对象名和成员运算符访问对象中的成员。(2)通过指向对象的指针访问对象中的成员(3)通过对象的引用访问对象中的成员第1章 概述 2.4.1 通过对象名和成员运算符访问对象中的成员通过对象名和成员运算符访问对象中的成员例如在程序中可以写出以下语句:stud1.num=1001; /假设num已经定义为公用的整型数据成员其中.是成员运算符,用来对成员进行限定,指明是哪一个对象

26、的成员。不能只写成员名,不写对象名。访问对象中成员的一般形式为:对象名.成员名第1章 概述 2.4.1 通过对象名和成员运算符访问对象中的成通过对象名和成员运算符访问对象中的成员员可以调用对象的公用成员函数,同样必须指出对象名,如stud1.display();display(); 由于没有指明对象名,编译时作为普通函数处理应该注意所访问的成员是公用的还是私有的。在类外只能访问public成员,不能访问private成员。如果num定义为private,则下面的语句是错误的:stud1.num=1001;第1章 概述 2.4.1 通过对象名和成员运算符访问对象中的成通过对象名和成员运算符访问对

27、象中的成员员 有了类及对象定义后,在外部就利用对象访问其公有成员了。 公有成员访问: 对象名.数据成员名 或 对象名.成员函数名(实参表) 对象访问公有成员如:对象访问公有成员如: Circle c1; c1.set_radius(); c1.get_area(); c1.print_area(); 第1章 概述 2.4.1 通过对象名和成员运算符访问对象中的成通过对象名和成员运算符访问对象中的成员员例例1 Circle类和对象完整程序类和对象完整程序 #define PI 3.14159 #include class Circle public: double calculate_area(

28、double r) return r*r*PI; void set_radius() cout radius; void get_area() area= radius*radius*PI; void print_area() cout 圆的面积为: area endl; private: double radius; / 半径 double area; ; 第1章 概述 2.4.1 通过对象名和成员运算符访问对象中的成通过对象名和成员运算符访问对象中的成员员void main() Circle c1; c1.set_radius(); c1.get_area(); c1.print_area

29、(); 对象访问公有成员如:对象访问公有成员如: Person p; p.setAge(6); p.getAge(); 第1章 概述 2.4.1 通过对象名和成员运算符访问对象中的成通过对象名和成员运算符访问对象中的成员员例例5 Person类和对象完整程序类和对象完整程序 #include class Person public: void setAge( unsigned n ); unsigned getAge( ) const; private: unsigned age; ;void Person:setAge(unsigned n) age = n; 第1章 概述 2.4.1 通过

30、对象名和成员运算符访问对象中的成通过对象名和成员运算符访问对象中的成员员unsigned Person:getAge( ) const return age; void main() Person p; p.setAge(6); cout此人的年龄为:p.getAge()endl; 第1章 概述 2.4.2 通过指向对象的指针访问对象中的成员通过指向对象的指针访问对象中的成员可以通过指针访问对象中的成员。如:class Time public: int hour,minute;Time t,*p;p=&t; /使p指向对象tcouthour;p-hour表示p当前指向的对象的对象t的成员hou

31、r。(*p).hour也是同样的。第1章 概述 2.4.3 通过对象的引用来访问对象中的成员通过对象的引用来访问对象中的成员可以为一个对象定义一个引用,通过引用来访问对象中的成员,其概念和方法与通过对象名来访问对象的成员是一样的。例如,已经声明了Time类,有以下语句:Time t1;Time &t2=t1;coutt1.hour;cint1.minute;cint1.sec;coutt1.hour:t1.minute:t1.secendl;return 0; 第1章 概述 2.5 类和对象的简单应用举例类和对象的简单应用举例例2:用成员函数来处理时间的输入和输出#include ;using

32、 namespace std;class Time private: int hour, minute, second; public: void set( ) ; void print( ) ; ;第1章 概述 2.5 类和对象的简单应用举例类和对象的简单应用举例void Time:set( ) cinhourminutesecond; void Time:print( ) couthour:minute:secendl; int main() Time t1; t1.set(); t1.print(); Time t2; t2.set(); t2.print();return 0; 第1章

33、 概述 2.5 类和对象的简单应用举例类和对象的简单应用举例例3:找出一个整型数组中的元素的最大值#include using namespace std;class Array_maxpublic: void set_value(); void max_value; void show_value(); private: int array10; int max;第1章 概述 2.5 类和对象的简单应用举例类和对象的简单应用举例void Array_max:set_value() int i; for(i=0;iarrayi;void Array_max:max_value() int i;

34、 max=array0; for (i=1;imax) max=arrayi; 第1章 概述 2.5 类和对象的简单应用举例类和对象的简单应用举例void Array_max:show_value()coutmax=max;int main()Array_max arrmax; arrmax.set_value(); arrmax.max_value(); arrmax.show_value(); return 0;第1章 概述 2.6 类的封装性和信息隐蔽类的封装性和信息隐蔽2.6.1 公用接口与私有实现的分离2.6.2 类声明和成员函数定义的分离2.6.3 面向对象程序设计中的几个名词第1

35、章 概述 2.6.1 公用接口与私有实现的分离公用接口与私有实现的分离外界与对象唯一的联系渠道就是调用公用成员函数。这样使类与外界的联系减少到最低限度。公用成员函数是用户使用类的公用接口。用户只需要调用公用成员函数来实现类提供的功能,不用了解内部的实现。这就是接口与实现分离。通过成员函数对数据成员进行操作称为类的功能的实现。类的公用接口与私有实现的分离形成了信息隐蔽。.第1章 概述 2.6.1 公用接口与私有实现的分离公用接口与私有实现的分离软件工程的一个最基本的原则就是将接口与实现分离,信息隐蔽是软件工程中非常重要的概念,它的好处在于:(1)如果想修改或扩充类的功能,只需修改该类中有关的数据

36、成员和与它有关的成员函数,程序中类以外的部分可以不必修改。如2.2.3中声明的Student类增加一项数据成员“年龄”,只须这样改:第1章 概述 2.6.1 公用接口与私有实现的分离公用接口与私有实现的分离class Studentpublic: void display(); coutnum:endl; coutname:nameendl; coutage:ageendl; coutsex:sexendl; private: int num; string name; int age; char sex; ;Student stud;第1章 概述 2.6.1 公用接口与私有实现的分离公用接口

37、与私有实现的分离注意:虽然类中的数据成员改变了,成员函数display的定义改变了,但类的对外接口没变,外界仍然通过公用的display函数访问类中的数据。当接口与实现分离时,只要类的接口没有改变,对私有实现的修改不会引起程序的其他部分修改。(2)如果在编译时发现类中的数据读写有错,不必检查整个程序,只须检查本类中访问这些数据的少数成员函数。第1章 概述 2.6.1 公用接口与私有实现的分离公用接口与私有实现的分离信息公开或隐藏 public, private or protected ? class Complex public: double real; / 实部 double imag;

38、 / 虚部 Complex(double r, double i) /接口 real = r; imag = i; ; 第1章 概述 2.6.1 公用接口与私有实现的分离公用接口与私有实现的分离class Complex private: /信息隐藏 double real; double imag; public: /对外接口 double getreal() return real; double getimag() return imag; void setreal(double r) real = r; void setimag(double i) imag = i; void Com

39、plex(double r, double i) real = r; imag = i; ; 第1章 概述 2.6.2 类声明和成员函数定义的分离类声明和成员函数定义的分离如果一个类只被一个程序使用,类的声明和成员函数的定义可以直接写在程序的开头,但是如果一个类被多个程序使用,这样做的重复工作量大,效率低。一般把类的声明放在指定的头文件中,用户如果想用该类,只要把有关的头文件包含进来即可,不必在程序中重复书写类的声明,以减少工作量。一个C+程序是由3部分组成的:(1)类声明头文件(后缀为.h或五后缀);(2)类实现文件(后缀为.cpp),包括类成员函数的定义(3)类的使用文件(后缀为.cpp)

40、,即主文件。第1章 概述 2.6.2 类声明和成员函数定义的分离类声明和成员函数定义的分离例如,可以先分别写两个文件:(1)类声明头文件/student.h (这是头文件,在文件中进行类的声明)#include using namespace std;class Studentpublic: void display(); /公用成员函数原型声明 private: int num; string name; char sex; ;第1章 概述 2.6.2 类声明和成员函数定义的分离类声明和成员函数定义的分离(2)包含类成员函数的定义的文件(即类实现文件)/student.cpp#include student.h /不要漏写此行,否则编译不过void Student:display() /在类外定义dispaly函数 coutnum:endl; coutname:nameendl; coutsex:sexendl; 第1章 概述 2.6.2 类声明和成员函数定义的分离类声明和成员函数定义的分离(3)主文件。为了组成一个完整的源程序,还应当有包括主函数的源文件:/main.cpp#include #include student.husing namespace std;int main

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论