C++ch2-1-函数+类和对象-4学时_第1页
C++ch2-1-函数+类和对象-4学时_第2页
C++ch2-1-函数+类和对象-4学时_第3页
C++ch2-1-函数+类和对象-4学时_第4页
C++ch2-1-函数+类和对象-4学时_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

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

文档简介

1、第第2 2章章 类和方法类和方法(1)(1)函数、类和对象函数、类和对象2主要内容主要内容 2.1 2.1 函数函数 2.2 2.2 类类 2.3 2.3 对象对象32.1 2.1 函数函数 函数定义函数定义 函数调用函数调用 函数原型函数原型 函数调用中的参数传递函数调用中的参数传递 函数和变量的作用域函数和变量的作用域 内联函数内联函数 函数重载函数重载42.1 2.1 函数函数一、函数的定义一、函数的定义 类型修饰符类型修饰符 函数名(形式参数表)函数名(形式参数表) 函数体函数体 函数体:用函数体:用 括起来的语句序列。括起来的语句序列。 形式参数表形式参数表 形式参数表为空:(形式参

2、数表为空:( )或()或( voidvoid) 形式参数表非空:一系列用,隔开的形式参数说明。形式参数表非空:一系列用,隔开的形式参数说明。(每个形式参数就是一个变量)(每个形式参数就是一个变量)52.1 2.1 函数函数 函数返回值函数返回值有返回值:返回值类型由有返回值:返回值类型由类型修饰符类型修饰符决定。函数体中必须决定。函数体中必须有非空有非空return语句语句(return 表达式表达式;)无返回值:类型修饰符用无返回值:类型修饰符用void表示。函数体中无表示。函数体中无return语语句或有空句或有空return语句语句(return ;)说明:说明:1、 return 表达

3、式表达式;中表达式的类型应与类型修饰符一致,若中表达式的类型应与类型修饰符一致,若不同,则自动进行转换。不同,则自动进行转换。2、若函数定义中的类型修饰符为空,则默认的返回值类型、若函数定义中的类型修饰符为空,则默认的返回值类型为为int。62.1 2.1 函数函数二、函数的调用二、函数的调用1 1、调用格式:、调用格式:函数名(实在参数表)函数名(实在参数表) 实在参数表:一系列用,隔开的实在参数说明。(每个实实在参数表:一系列用,隔开的实在参数说明。(每个实在参数就是一个表达式)在参数就是一个表达式) 实在参数与形式参数在类型和数量上应保持一致。实在参数与形式参数在类型和数量上应保持一致。

4、如:如:double square(double n) return nn; square(5.0)72.1 2.1 函数函数2、调用方式、调用方式 作为作为表达式表达式的函数调用的函数调用(被调用的函数必须有返回值)(被调用的函数必须有返回值)如:如:double result; result=square(5.0); 作为作为语句语句的函数调用。的函数调用。如:如:square(5.0);82.1 2.1 函数函数三、函数原形三、函数原形 格式:格式:类型修饰符类型修饰符 函数名(形式参数表)函数名(形式参数表); ; 作用:函数原形为函数调用提供所需的接口信息。作用:函数原形为函数调用提

5、供所需的接口信息。 若函数定义在函数调用之前,则函数原形可有可无。若函数定义在函数调用之前,则函数原形可有可无。 若函数定义在函数调用之后,则必须在函数调用之前使若函数定义在函数调用之后,则必须在函数调用之前使用函数原形。用函数原形。92.1 2.1 函数函数四、函数调用中的参数传递四、函数调用中的参数传递1 1、传值方式、传值方式 把实在参数的值传递给形式参数。把实在参数的值传递给形式参数。 在传值方式下,对形式参数的改变不会影响到对应的实在在传值方式下,对形式参数的改变不会影响到对应的实在参数参数。例:例:double DOUBLE(double n) n=2; return n; voi

6、d main( ) double m=7.0; coutendlm; coutendlDOUBLE(m); coutendlm; 输出结果为:输出结果为:7.014.07.0102.1 2.1 函数函数2 2、数组参数、数组参数 将整个数组作为形式参数,以数组名作为实在参数将整个数组作为形式参数,以数组名作为实在参数一维数组作为参数,可以不限定元素个数。一维数组作为参数,可以不限定元素个数。多维数组作为参数,第一维可以不限定,多维数组作为参数,第一维可以不限定,其余各维必须限其余各维必须限定定。11#includeint sum(int array ,int size) int s=0; fo

7、r(int i=0;isize;i+) s+=arrayi; return s; void main( ) int v1 =1,2,3,4,5; coutsum(v1,5)endl; int v2 =1,2,3,4,5,6,7,8; coutsum(v2,8)endl;输出结果为:输出结果为:1536122 2、若以、若以数组数组作为参数,则对形参数组的改变就是对实参数作为参数,则对形参数组的改变就是对实参数组的改变。组的改变。#includeusing namespace std;void sumAll(int data 5,int result ,int rows) for(int i=0

8、;irows;i+) resulti=0; for(int j=0;j5;j+) resulti+=dataij; void main( ) int v 5=1,2,3,4,5,2,3,4,5,6,3,4,5,6,7; int s3; sumAll(v,s,3); for(int i=0;i3;i+) coutsi ;132.1 2.1 函数函数3 3、默认参数、默认参数 为形式参数表中的最后的若干个参数设定默认值,则这些为形式参数表中的最后的若干个参数设定默认值,则这些参数就称为默认参数就称为默认(/(/可选可选) )参数。参数。 默认参数的说明格式:默认参数的说明格式: 类型修饰符类型修饰

9、符 参数名参数名= =默认值默认值如:如:int f(int a, char b, char c=Z , char s =”READY ”);其中为其中为c,sc,s默认参数。默认参数。注:可选参数应在函数原形中说明,只有当函数定义在函数调用之前时注:可选参数应在函数原形中说明,只有当函数定义在函数调用之前时才可在函数定义中说明才可在函数定义中说明142.1 2.1 函数函数 调用具有可选参数的函数时应注意:调用具有可选参数的函数时应注意:(1 1)若没有给出对应于可选参数的实参,则以设定的默认值)若没有给出对应于可选参数的实参,则以设定的默认值作为实参。作为实参。(2 2)被省略的只能是最后

10、的连续的若干个可选参数的实参。)被省略的只能是最后的连续的若干个可选参数的实参。如:如: int f(int a,char b,char c=Z, char s =”READY ”);则:则:f(3,a , b ) f(3, a , b , ” READY ”) f(3,a ) f(3, a , Z , ” READY ”) f( a , b , ” HELLO”) () f(3, a ,” HELLO”) ()152.1 2.1 函数函数五、函数和变量的作用域五、函数和变量的作用域1 1、函数的作用域、函数的作用域 函数的作用域是函数的作用域是全局全局的。(不但在定义它的文件中可以调的。(不

11、但在定义它的文件中可以调用,而且在同一系统的其他程序文件中也可以调用)用,而且在同一系统的其他程序文件中也可以调用) 若在函数定义前加若在函数定义前加static,则此函数具有文件作用域。(,则此函数具有文件作用域。(只能在定义它的文件中可以调用该函数)只能在定义它的文件中可以调用该函数)如:如: static long add(long a,long b) return a+b;162.1 2.1 函数函数2 2、变量的作用域和生存期、变量的作用域和生存期 全局变量全局变量 定义于函数外部的变量。定义于函数外部的变量。 全局变量具有静态生存期。全局变量具有静态生存期。静态生存期:存在于应用程

12、序的整个运行期间。静态生存期:存在于应用程序的整个运行期间。全局变量又称静态变量。全局变量又称静态变量。一切静态变量,若定义时未初始化,则自动被初始化为一切静态变量,若定义时未初始化,则自动被初始化为0 0。172.1 2.1 函数函数 全局变量具有跨文件作用域。全局变量具有跨文件作用域。不但同一文件中的函数可以访问,而且同一系统的其他程不但同一文件中的函数可以访问,而且同一系统的其他程序文件中的函数也可以访问。序文件中的函数也可以访问。若在同一系统的其他程序文件中的函数要访问全局变量,若在同一系统的其他程序文件中的函数要访问全局变量,则必须进行外部说明。则必须进行外部说明。例:例:/f1.c

13、pp double var; ./f2.cpp#includevoid test() extern double var;注意:若在全局变量定义前加上注意:若在全局变量定义前加上static,static,则该变量具有文件作用域。(只允许同一则该变量具有文件作用域。(只允许同一文件中的函数访问)文件中的函数访问)182.1 2.1 函数函数 局部变量局部变量 定义于函数内部的变量。定义于函数内部的变量。 局部变量具有块作用域(从变量定义处开始,到块的局部变量具有块作用域(从变量定义处开始,到块的结束处为止)结束处为止)如:如: int x; 192.1 2.1 函数函数六、内联函数六、内联函数

14、1 1、格式:在一般函数定义前加上保留字、格式:在一般函数定义前加上保留字inlineinline。如:如:inline int add2(int n) return n+2;2 2、作用:将函数体嵌入函数调用处、作用:将函数体嵌入函数调用处内联展开内联展开如:如:int temp=add2(6); int temp=(6+2);3 3、内联函数的函数定义必须在函数调用之前。、内联函数的函数定义必须在函数调用之前。202.1 2.1 函数函数七、函数重载七、函数重载 定义:允许定义同名的函数。定义:允许定义同名的函数。 条件:重载的函数必须在参数的条件:重载的函数必须在参数的数量、类型和顺数量

15、、类型和顺序序上有所不同。上有所不同。如:如:long add(long a,long b) return a+b; double add(double a,double b) return a+b; int add(int a) return a+8; int add(int a,int b) return a+b;212.1 2.1 函数函数 可选参数对函数重载的影响:可选参数对函数重载的影响: 若函数含有默认参数,则重载时应保证在逐个去掉默认参若函数含有默认参数,则重载时应保证在逐个去掉默认参数后,仍然在参数的数后,仍然在参数的数量、类型和顺序数量、类型和顺序上有所不同。上有所不同。例:

16、若有函数原型:例:若有函数原型: int fp(char c,int k=0,double d=100.0); 则下列函数中可以重载的是(则下列函数中可以重载的是( ) A、int fp( ); B、 void fp(char c); C、int fp(char,int); D、 void fp(char,int,int);A、D22主要内容主要内容 2.1 2.1 方法方法 2.2 2.2 类类 2.3 2.3 对象对象232.2 2.2 类类 类的概念类的概念 类的定义格式类的定义格式 类的成员访问权限类的成员访问权限 类和结构类和结构 类成员的访问方法类成员的访问方法 类的静态成员类的静

17、态成员 内联成员函数内联成员函数 含默认参数的成员函数含默认参数的成员函数 类类型的大小类类型的大小242.2 2.2 类类1 1、类的概念、类的概念 类:是一种抽象的数据类型,是同种对象集合与抽象,是具有共同属性和行为的若干对象的统一描述体。在在C+中对象的类型称为类中对象的类型称为类(class)。类代表了某一批对象类代表了某一批对象的共性和特征。的共性和特征。类是对象的抽象,而对象是类的具体实例类是对象的抽象,而对象是类的具体实例(instance)。 252.2 2.2 类类1 1、类的概念、类的概念具有具有共同属性共同属性和和共同行为共同行为的一类事物的抽象描述。的一类事物的抽象描述

18、。 共同属性共同属性成员属性成员属性 共同行为共同行为成员函数成员函数/ /成员方法成员方法262、类的定义格式:、类的定义格式:class 类名类名 private : 成员数据成员数据;成员函数;成员函数; public : 成员数据成员数据;成员函数;成员函数; protected:成员数据成员数据;成员函数;成员函数;;class Student private : char Name20; float Math; float Chiese; public : float average; void SetName(char *name); void SetMath(float mat

19、h); void SetChinese(float ch); float GetAverage();分号不能少分号不能少2.2 类类27成员数据和成员函数成员数据和成员函数1 1、成员数据、成员数据 OOOO中的中的成员数据成员数据相当于面向过程程序设计中相当于面向过程程序设计中变量变量的概念,它的概念,它抽象了类对象的属性。抽象了类对象的属性。 成员数据成员数据可以使用可以使用C+C+语言中的任何数据类型进行定义,但要语言中的任何数据类型进行定义,但要注意两点:注意两点: 成员数据成员数据不能在定义时对其进行初始化不能在定义时对其进行初始化,其初始化是在具体对象创建,其初始化是在具体对象创建

20、后由构造函数完成,例如后由构造函数完成,例如int i=0int i=0;/error/error 成员数据成员数据不能进行递归定义不能进行递归定义,即不能使用自身类的对象作为该类的数,即不能使用自身类的对象作为该类的数据成员。例如:据成员。例如:class A public: A a;/ error28成员数据和成员函数成员数据和成员函数2 2、成员函数、成员函数 OOOO中的中的成员函数成员函数相当于面向过程程序设计中的相当于面向过程程序设计中的函数函数的概念,它描述了类对象的行为。的概念,它描述了类对象的行为。 成员函数成员函数对外部给出了该类对象所提供服务的对外部给出了该类对象所提供服

21、务的接口接口,该,该接口接口是对封装数据成员进行操作的唯一途径。是对封装数据成员进行操作的唯一途径。29数据成员和成员函数数据成员和成员函数2 2、成员函数、成员函数 成员函数定义的一般格式为成员函数定义的一般格式为 :() 作用域运算符作用域运算符:用于声明成员函数所从属的类用于声明成员函数所从属的类30数据成员和成员函数数据成员和成员函数2 2、成员函数、成员函数class student private: long number; char name9; public: void showNumber(); void showName(); ;void student: showNumb

22、er() coutnumber;void student: showName() coutname;class student private: long number; char name9; public: void showNumber() coutnumber;void showName() coutname;312.2 2.2 类类3 3、类成员的访问权限(访问属性)、类成员的访问权限(访问属性) pubilc: :公用访问属性;公用访问属性; 成员可以为任意函数所访问。成员可以为任意函数所访问。 private: :私有访问属性;私有访问属性; 成员只能为该类的成员函数所访问。成员

23、只能为该类的成员函数所访问。 protected: :保护访问属性;保护访问属性; 成员只能为该类的成员函数以及该类的派生类中的成员函成员只能为该类的成员函数以及该类的派生类中的成员函数所访问。数所访问。32类的定义格式:类的定义格式:class 类名类名 private : 成员数据成员数据;成员函数;成员函数; public : 成员数据成员数据;成员函数;成员函数; protected:成员数据成员数据;成员函数;成员函数;;用关键字用关键字priviate限定的成员称为限定的成员称为私有成员私有成员,私有成员私有成员限定在该类的内部使用限定在该类的内部使用,即,即只允许该类中的成员函数

24、使只允许该类中的成员函数使用私有的成员数据用私有的成员数据;对于私有的成员函数,只能被对于私有的成员函数,只能被该该类内的成员函数调用类内的成员函数调用;类就相当于私有成员的作用域。类就相当于私有成员的作用域。33类的定义格式:类的定义格式:class 类名类名 private : 成员数据成员数据;成员函数;成员函数; public : 成员数据成员数据;成员函数;成员函数; protected:成员数据成员数据;成员函数;成员函数;;#include #include using namespace std;class Student private: string id; ;int ma

25、in() Student s; s.id=2012201101; couts.idendl; error C2248: id : cannot access private member declared in class Student34类的定义格式:类的定义格式:class 类名类名 private : 成员数据成员数据;成员函数;成员函数; public : 成员数据成员数据;成员函数;成员函数; protected:成员数据成员数据;成员函数;成员函数;;用关键字用关键字public限定的成员称为限定的成员称为公公有成员有成员;公有成员的数据或函数不受类的公有成员的数据或函数不受类的

26、限制,限制,可以在类内或类外自由使用可以在类内或类外自由使用;对类而言是透明的。对类而言是透明的。35类的定义格式:类的定义格式:class 类名类名 private : 成员数据成员数据;成员函数;成员函数; public : 成员数据成员数据;成员函数;成员函数; protected:成员数据成员数据;成员函数;成员函数;;#include #include using namespace std;class Student private: string id; public: string name; void setID(string tID) id=tID; string getI

27、D() return id; ;int main() Student s; =wangyi; endl; s.setID(2012201101); couts.getID()endl;36类的定义格式:类的定义格式:class 类名类名 private : 成员数据成员数据;成员函数;成员函数; public : 成员数据成员数据;成员函数;成员函数; protected:成员数据成员数据;成员函数;成员函数;;而用关键字而用关键字protected所限定的成所限定的成员称为员称为受保护成员受保护成员;只允许在只允许在类内类内及及该类的派生类该类的派生类中中使用

28、保护的数据或函数;使用保护的数据或函数;保护成员的作用域是保护成员的作用域是该类及该类该类及该类的派生类的派生类。37类的定义格式:类的定义格式:class 类名类名 private : 成员数据成员数据;成员函数;成员函数; public : 成员数据成员数据;成员函数;成员函数; protected:成员数据成员数据;成员函数;成员函数;;class Student private: string id; public: string name; protected: string course;class Master : public Student public: void setC

29、ourse() course=“OOPD; ;int main() Master m; m.setCourse(); coutm.coursenumber=1234;strcpy(wanghong-name,“wanghong);liwei-Classno= 200906 ;Student:Classno= 200906;456 6、静态成员、静态成员 6.1 6.1 静态成员数据静态成员数据 6.2 6.2 静态成员函数静态成员函数466.1 6.1 静态成员数据静态成员数据 静态成员数据可以实现多个同类对象之间的静态成员数据可以实现多个同类对象之间的数据共享数据共享。 它是某个类的所有对象

30、所共享的数据成员,编译器将静态成它是某个类的所有对象所共享的数据成员,编译器将静态成员数据存放在静态存储区。员数据存放在静态存储区。 静态成员数据要在数据定义前加关键字静态成员数据要在数据定义前加关键字static, ,定义格式为定义格式为 static 类型标识符类型标识符 静态成员数据名静态成员数据名; 说明:说明: 类型标识符可以基本数据类型,也可以是自定义数据类型,如结构体类型标识符可以基本数据类型,也可以是自定义数据类型,如结构体、类等;、类等;class Tdate int year; static int month; /静态成员数据 static int day; /静态成员数

31、据;476.1 6.1 静态成员数据静态成员数据 静态成员数据被定义后,必须对其进行初始化。静态成员数据被定义后,必须对其进行初始化。 初始化在类体外进行,一般放在该类的实现部分,也可以初始化在类体外进行,一般放在该类的实现部分,也可以放在其他位置。放在其他位置。 静态成员数据初始化的一般格式为:静态成员数据初始化的一般格式为: 类型标识符类型标识符 类名类名:静态成员数据名静态成员数据名=初始值;初始值;class Tdate int year; static int month; /静态成员数据 static int day; /静态成员数据;int Tdate:month=12;int

32、Tdate:day=13;486.1 6.1 静态数据成员静态数据成员 静态成员数据是类的静态成员,可以通过类名进静态成员数据是类的静态成员,可以通过类名进行访问,格式为行访问,格式为 类名类名:静态成员数据名;静态成员数据名;class Tdate public: int year; static int month; static int day; void showMonth();int Tdate:month=12;int Tdate:day=13;void Tdate:showMonth() coutTdate:month;496.2 6.2 静态成员函数静态成员函数 定义静态成员函

33、数是为了同类的所有对象之间共享定义静态成员函数是为了同类的所有对象之间共享数据。在定义类时,若在某个成员函数前加关键字数据。在定义类时,若在某个成员函数前加关键字staticstatic,说明此成员函数是,说明此成员函数是静态成员函数静态成员函数。 在在静态成员函数体内静态成员函数体内,可以通过,可以通过对象名对象名或或指针变量指针变量直接访问所属类的直接访问所属类的静态成员静态成员,但不能访问,但不能访问非静态成非静态成员员。506.2 6.2 静态成员函数静态成员函数class Tdate public: int year; static int month; static int day

34、; void showMonth(); static int getDay();/静态成员函数;int Tdate:month=12;int Tdate:day=13;void Tdate:showMonth() coutTdate:month;int Tdate:getDay() return Tdate:day;512.2 2.2 类类7 7、内联成员函数、内联成员函数成员函数在类中定义:默认为是内联的。成员函数在类中定义:默认为是内联的。成员函数在类外定义:在函数定义前加成员函数在类外定义:在函数定义前加inlineinline。class CC int a; public: void

35、Init(int aa) ; int GetData( );cx;inline void CC Init(int aa)a=aa;inline int CC GetData( )return a;522.2 2.2 类类8 8、含默认参数的成员函数、含默认参数的成员函数如:如:void CE SetValue(int x1,int x2=0,int x3=1) a=x1; b=x2; c=x3; 则:则:ex. SetValue(4,5) ex. SetValue(4,5,1) ex. SetValue(4) ex. SetValue(4,0,1)532.2 2.2 类类9 9、类类型的大小、

36、类类型的大小类类型的大小等于所有数据成员所占的字节的和。类类型的大小等于所有数据成员所占的字节的和。例例: class CC int a; public: void Init(int aa)a=aa; int GetData( )return a; cx; sizeof(CC)=sizeof(a)=4个字节个字节54主要内容主要内容 2.1 2.1 方法方法 2.2 2.2 类类 2.3 2.3 对象对象55 在定义类时,只是定义了一种在定义类时,只是定义了一种数据类型数据类型,即即说说明程序中可能会出现该类型的数据,明程序中可能会出现该类型的数据,并不为类并不为类分配存储空间。分配存储空间。

37、 只有在定义了属于类的变量后,系统才会为只有在定义了属于类的变量后,系统才会为类类的变量的变量分配空间。分配空间。 类的变量称之为对象。类的变量称之为对象。 对象是类的实例对象是类的实例,定义对象之前,一定要先说,定义对象之前,一定要先说明该对象的类。明该对象的类。2.3 2.3 对象的定义对象的定义56不同对象占据内存中的不同区域,它们所保存的数据各不相同,但对成员数据进行操作的成员函数的程序代码均是一样的。 类名 对象1,对象2,.;Student st1,st2; 对象的定义格式:类名对象名在建立对象时,只为对象分配用于保存数据成员的内存空间,而成员函数的代码为该类的每一个对象所共享。

38、57对象的定义方法同结构体定义变量的方法一样。class A float x,y;public: void setXY( float a, float b ) x=a; y=b; void print() coutxtyendl; a1,a2;void main() A a3,a4;定义全局对象定义局部对象58对象的使用 一个对象的成员就是该对象的类所定义的一个对象的成员就是该对象的类所定义的成员,有成员,有成员数据和成员函数成员数据和成员函数,引用时同,引用时同结构体变量类似,用结构体变量类似,用“. .”运算符。运算符。59class A float x,y; public: float

39、m,n; void setXY( float a, float b ) x=a; y=b; void print() coutxtyendl; ;void main() A a1,a2; /定义对象 a1.m=10; a1.n=20; /为公有成员数据赋值 a1.setXY(2.0 , 5.0); /为私有成员数据赋值 a1.print();输出: 2 5a1nmyx10202.05.0a2nmyx如何为a2的数据赋值?60对象的使用 用成员选择运算符用成员选择运算符“.”.”只能访问对象的只能访问对象的公有成员公有成员,而不能访问对象的私有成员或,而不能访问对象的私有成员或保护成员。保护成员

40、。 若要访问对象的私有的数据成员,只能通若要访问对象的私有的数据成员,只能通过对象的公有成员函数来获取过对象的公有成员函数来获取。 61class A float x,y; public: float m,n; void setXY( float a, float b ) x=a; y=b; void print() coutxtyendl; ;void main() A a1,a2; a1.m=10; a1.n=20; /为公有成员数据赋值 a1.x=2; a1.y=5; a1.setXY(2.0,5.0); a1.print();必须通过类内公有函数访问私有数据成员非法,私有成员不能在类外访问62同类型的对象

温馨提示

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

评论

0/150

提交评论