C程序设计基础10-模板_第1页
C程序设计基础10-模板_第2页
C程序设计基础10-模板_第3页
C程序设计基础10-模板_第4页
C程序设计基础10-模板_第5页
已阅读5页,还剩91页未读 继续免费阅读

下载本文档

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

文档简介

第10章模板,模板把函数或类要处理的数据类型参数化,表现为参数的多态性,称为类属。模板用于表达逻辑结构相同,但具体数据元素类型不同的数据对象的通用行为。,第10章模板,10.1什么是模板,10.2函数模板,10.3类模板,小结,10.1什么是模板,类属类型参数化,又称参数模板使得程序(算法)可以从逻辑功能上抽象,把被处理的对象(数据)类型作为参数传递,C+提供两种模板机制:函数模板类模板,10.1什么是模板,模板(函数模板和类模板),模板函数,模板类,对象,模板、类、对象和函数,10.2函数模板,考虑求两参数之中大值函数:max(a,b)对a,b的不同类型,都有相同的处理形式:return(ab)?a:b;,用已有方法解决对不同数据类型处理:(1)宏替换#definemax(a,b)(ab?a:b)问题避开类型检查(2)重载问题需要许多重载版本(3)使用函数模板,10.2函数模板,重载函数通常基于不同的数据类型实现类似的操作对不同数据类型的操作完全相同,用函数模板实现更为简洁方便,10.2.1模板说明,template,声明模板中使用的类属参数。形式为,10.2.1模板说明,10.2.1模板说明,template,声明模板中使用的类属参数。形式为,关键字,10.2.1模板说明,10.2.1模板说明,template,类型形式参数的形式为:typenameT1,typenameT2,typenameTn或classT1,classT2,classTn,声明模板中使用的类属参数。形式为,10.2.1模板说明,类型形式参数的形式为:typenameT1,typenameT2,typenameTn或classT1,classT2,classTn,10.2.1模板说明,template,声明模板中使用的类属参数。形式为,关键字,10.2.1模板说明,类型形式参数的形式为:typenameT1,typenameT2,typenameTn或classT1,classT2,classTn,10.2.1模板说明,template,声明模板中使用的类属参数。形式为,类属参数,10.2.1模板说明,templatetemplatetemplate,10.2.1模板说明,template,声明模板中使用的类属参数。形式为,例如,10.2.1模板说明,10.2.2函数模板与模板函数,template类型函数名(形式参数表)语句序列,函数模板声明,函数模板定义由模板说明和函数定义组成模板说明的类属参数必须在函数定义中至少出现一次函数参数表中可以使用类属类型参数,也可以使用一般类型参数,10.2.2函数模板与模板函数,#includeusingnamespacestd;templateTMax(constTa,constTb)returnab?a:b;intmain()coutMax(3,5)isMax(3,5)endl;coutMax(y,e)isMax(y,e)endl;coutMax(10.3,0.5)isMax(10.3,0.5)b?a:b;intmain()coutMax(3,5)isMax(3,5)endl;coutMax(y,e)isMax(y,e)endl;coutMax(10.3,0.5)isMax(10.3,0.5)b?a:b;intmain()coutMax(3,5)isMax(3,5)endl;coutMax(y,e)isMax(y,e)endl;coutMax(10.3,0.5)isMax(10.3,0.5)b?a:b;intmain()coutMax(3,5)isMax(3,5)endl;coutMax(y,e)isMax(y,e)endl;coutMax(10.3,0.5)isMax(10.3,0.5)b?a:b;,10.2.2函数模板与模板函数,例10-1简单函数模板应用,#includeusingnamespacestd;templateTMax(constTa,constTb)returnab?a:b;intmain()coutMax(3,5)isMax(3,5)endl;coutMax(y,e)isMax(y,e)endl;coutMax(10.3,0.5)isMax(10.3,0.5)b?a:b;,doublemax(doublea,doubleb)returnab?a:b;,10.2.2函数模板与模板函数,例10-1简单函数模板应用,#includeusingnamespacestd;templateTMax(constTa,constTb)returnab?a:b;intmain()coutMax(3,5)isMax(3,5)endl;coutMax(y,e)isMax(y,e)endl;coutMax(10.3,0.5)isMax(10.3,0.5)b?a:b;,doublemax(doublea,doubleb)returnab?a:b;,编译器生成的模板函数,程序执行时匹配不同的版本,10.2.2函数模板与模板函数,例10-1简单函数模板应用,templatevoidSortBubble(ElementType*a,intsize)inti,work;ElementTypetemp;for(intpass=1;passai+1)temp=ai;ai=ai+1;ai+1=temp;work=0;if(work)break;,例10-2冒泡排序法的函数模板,10.2.2函数模板与模板函数,templatevoidSortBubble(ElementType*a,intsize)inti,work;ElementTypetemp;for(intpass=1;passai+1)temp=ai;ai=ai+1;ai+1=temp;work=0;if(work)break;,模板声明,10.2.2函数模板与模板函数,例10-2冒泡排序法的函数模板,templatevoidSortBubble(ElementType*a,intsize)inti,work;ElementTypetemp;for(intpass=1;passai+1)temp=ai;ai=ai+1;ai+1=temp;work=0;if(work)break;,类属参数,10.2.2函数模板与模板函数,例10-2冒泡排序法的函数模板,templatevoidSortBubble(ElementType*a,intsize)inti,work;ElementTypetemp;for(intpass=1;passai+1)temp=ai;ai=ai+1;ai+1=temp;work=0;if(work)break;,普通类型参数,10.2.2函数模板与模板函数,例10-2冒泡排序法的函数模板,templatevoidSortBubble(ElementType*a,intsize)inti,work;ElementTypetemp;for(intpass=1;passai+1)temp=ai;ai=ai+1;ai+1=temp;work=0;if(work)break;,类属类型变量,10.2.2函数模板与模板函数,例10-2冒泡排序法的函数模板,templatevoidSortBubble(ElementType*a,intsize)inti,work;ElementTypetemp;for(intpass=1;passai+1)temp=ai;ai=ai+1;ai+1=temp;work=0;if(work)break;,排序算法,10.2.2函数模板与模板函数,例10-2冒泡排序法的函数模板,10.2.3重载函数模板,有些特殊情况需要函数模板参与重载,例如templateTmax(Ta,Tb)returnab?a:b;,voidf(inti,charc)max(i,i);/okmax(c,c);/okmax(i,c);/error,无法匹配max(c,i);/error,模板类型不能提供类型的隐式转换,10.2.3重载函数模板,templateTmax(Ta,Tb)returnab?a:b;intmax(inta,charb)/模板函数重载版本returnab?a:b;,10.2.3重载函数模板,voidf(inti,charc)max(i,i);/okmax(c,c);/okmax(i,c);/okmax(c,i);/ok,由系统提供隐式转换,10.2.3重载函数模板,#includeusingnamespacestd;#includetemplateTMax(constTa,constTb)returnab?a:b;templateTMax(constTa,constTb,constTc)Tt;t=Max(a,b);returnMax(t,c);intMax(constinta,constcharb)returnab?a:b;intmain()coutMax(3,a)isMax(3,a)endl;coutMax(9.3,0.5)isMax(9.3,0.5)endl;coutMax(9,5,23)isMax(9,5,23)b?a:b;templateTMax(constTa,constTb,constTc)Tt;t=Max(a,b);returnMax(t,c);intMax(constinta,constcharb)returnab?a:b;intmain()coutMax(3,a)isMax(3,a)endl;coutMax(9.3,0.5)isMax(9.3,0.5)endl;coutMax(9,5,23)isMax(9,5,23)b?a:b;templateTMax(constTa,constTb,constTc)Tt;t=Max(a,b);returnMax(t,c);intMax(constinta,constcharb)returnab?a:b;intmain()coutMax(3,a)isMax(3,a)endl;coutMax(9.3,0.5)isMax(9.3,0.5)endl;coutMax(9,5,23)isMax(9,5,23)b?a:b;,10.2.3重载函数模板,例10-3重载函数模板示例,#includeusingnamespacestd;templateTMax(constTa,constTb)returnab?a:b;templateTMax(constTa,constTb,constTc)Tt;t=Max(a,b);returnMax(t,c);intMax(constinta,constcharb)returnab?a:b;intmain()coutMax(3,a)isMax(3,a)endl;coutMax(9.3,0.5)isMax(9.3,0.5)endl;coutMax(9,5,23)isMax(9,5,23)b?a:b;intmain()coutMax(3,a)isMax(3,a)endl;coutMax(9.3,0.5)isMax(9.3,0.5)endl;coutMax(9,5,23)isMax(9,5,23)b?a:b;intmain()coutMax(3,a)isMax(3,a)endl;coutMax(9.3,0.5)isMax(9.3,0.5)endl;coutMax(9,5,23)isMax(9,5,23)b?a:b;intmain()coutMax(3,a)isMax(3,a)endl;coutMax(9.3,0.5)isMax(9.3,0.5)endl;coutMax(9,5,23)isMax(9,5,23)1)size=s;elsesize=1;element=newTsize;templateArray:Array()deleteelement;templateconstT,函数返回常引用函数调用不能做左值修改,10.3类模板,例10-4一个数组类模板,templateclassArraypublic:Array(ints);virtualArray();virtualconstT,#includeusingnamespacestd;#includeArray.hintmain()ArrayIntAry(5);inti;for(i=0;iDouAry(5);for(i=0;i5;i+)DouAry.Enter(i,(i+1)*0.35);coutDoubleArray:n;for(i=0;i5;i+)coutDouAry.Entry(i)t;coutendl;,10.3类模板,例10-4一个数组类模板,templateclassArraypublic:Array(ints);virtualArray();virtualconstT,#includeusingnamespacestd;#includeArray.hintmain()ArrayIntAry(5);inti;for(i=0;iDouAry(5);for(i=0;i5;i+)DouAry.Enter(i,(i+1)*0.35);coutDoubleArray:n;for(i=0;i5;i+)coutDouAry.Entry(i)t;coutendl;,10.3类模板,例10-4一个数组类模板,templateclassArraypublic:Array(ints);virtualArray();virtualconstT,#includeusingnamespacestd;#includeArray.hintmain()ArrayIntAry(5);inti;for(i=0;iDouAry(5);for(i=0;i5;i+)DouAry.Enter(i,(i+1)*0.35);coutDoubleArray:n;for(i=0;i5;i+)coutDouAry.Entry(i)t;coutendl;,classArraypublic:virtualconstint,10.3类模板,例10-4一个数组类模板,templateclassArraypublic:Array(ints);virtualArray();virtualconstT,#includeusingnamespacestd;#includeArray.hintmain()ArrayIntAry(5);inti;for(i=0;iDouAry(5);for(i=0;i5;i+)DouAry.Enter(i,(i+1)*0.35);coutDoubleArray:n;for(i=0;i5;i+)coutDouAry.Entry(i)t;coutendl;,classArraypublic:virtualconstint,10.3类模板,例10-4一个数组类模板,templateclassArraypublic:Array(ints);virtualArray();virtualconstT,#includeusingnamespacestd;#includeArray.hintmain()ArrayIntAry(5);inti;for(i=0;iDouAry(5);for(i=0;i5;i+)DouAry.Enter(i,(i+1)*0.35);coutDoubleArray:n;for(i=0;i5;i+)coutDouAry.Entry(i)t;coutendl;,10.3类模板,例10-4一个数组类模板,templateclassArraypublic:Array(ints);virtualArray();virtualconstT,#includeusingnamespacestd;#includeArray.hintmain()ArrayIntAry(5);inti;for(i=0;iDouAry(5);for(i=0;i5;i+)DouAry.Enter(i,(i+1)*0.35);coutDoubleArray:n;for(i=0;i5;i+)coutDouAry.Entry(i)t;coutendl;,10.3类模板,例10-4一个数组类模板,templateclassArraypublic:Array(ints);virtualArray();virtualconstT,#includeusingnamespacestd;#includeArray.hintmain()ArrayIntAry(5);inti;for(i=0;iDouAry(5);for(i=0;i5;i+)DouAry.Enter(i,(i+1)*0.35);coutDoubleArray:n;for(i=0;i5;i+)coutDouAry.Entry(i)t;coutendl;,10.3类模板,例10-4一个数组类模板,函数的形式参数类型可以是类模板或类模板的引用对应的实际参数是该类模板实例化的模板类对象当一个函数拥有类模板参数时,这个函数必定是函数模板,10.3.2类模板作函数参数,10.3.2类模板作函数参数,templatevoidTfun(constArray,一个用Array作参数的函数模板,调用函数模板,ArrayDouAry(5);Tfun(DouAry,3);,10.3.2类模板作函数参数,templatevoidTfun(constArray,一个用Array作参数的函数模板,调用函数模板,ArrayDouAry(5);Tfun(DouAry,3);,建立对象,10.3.2类模板作函数参数,templatevoidTfun(constArray,classArraypublic:Array(ints);virtualArray();virtualconstdouble,一个用Array作参数的函数模板,调用函数模板,ArrayDouAry(5);Tfun(DouAry,3);,建立对象,生成模板类,10.3.2类模板作函数参数,templatevoidTfun(constArray,classArraypublic:Array(ints);virtualArray();virtualconstdouble,一个用Array作参数的函数模板,调用函数模板,ArrayDouAry(5);Tfun(DouAry,3);,调用构造函数,实例化模板类,建立对象,建立对象,10.3.2类模板作函数参数,templatevoidTfun(constArray,一个用Array作参数的函数模板,调用函数模板,ArrayDouAry(5);Tfun(DouAry,3);,classArraypublic:Array(ints);virtualArray();virtualconstdouble,调用构造函数,实例化模板类,建立对象,建立对象,建立对象,10.3.2类模板作函数参数,templatevoidTfun(constArray,一个用Array作参数的函数模板,调用函数模板,ArrayDouAry(5);Tfun(DouAry,3);,classArraypublic:Array(ints);virtualArray();virtualconstdouble,调用构造函数,实例化模板类,建立对象,建立对象,调用函数,10.3.2类模板作函数参数,templatevoidTfun(constArray,一个用Array作参数的函数模板,调用函数模板,ArrayDouAry(5);Tfun(DouAry,3);,classArraypublic:Array(ints);virtualArray();virtualconstdouble,调用构造函数,实例化模板类,建立对象,建立对象,调用函数,virtualconstdouble,voidTfun(constArray,实例化为模板函数,10.3.2类模板作函数参数,templatevoidTfun(constArray,一个用Array作参数的函数模板,调用函数模板,ArrayDouAry(5);Tfun(DouAry,3);,classArraypublic:Array(ints);virtualArray();virtualconstdouble,调用构造函数,实例化模板类,建立对象,建立对象,调用函数,virtualconstdouble,调用模板函数,10.3.2类模板作函数参数,10.3.3在类层次中的类模板,10.3.3在类层次中的类模板,一个类模板在类层次结构中既可以是基类也可以是派生类:类模板可以从类模板,或从普通类(非模板类)派生;模板类可以从类模板或从普通类派生。当一个类模板从普通类派生时,意味着派生类增加了类属参数;当一个模板类从类模板派生时,意味着派生类继承基类时提供了实例化的类型参数。,templateclassArraypublic:Array(ints);virtualArray();virtualconstT,templateclassBoundArray:publicArraypublic:BoundArray(intlow=0,intheight=1);virtualconstT,从类模板Array派生一个安全数组类模板BoundArray,10.3.3在类层次中的类模板,公有继承类模板,#includeusingnamespacestd;template/定义类模板classApublic:A(Tx)t=x;voidout()couttendl;protected:Tt;,从类模板A派生普通类B,10.3.3在类层次中的类模板,classB:publicA/派生一般类public:B(inta,doublex):A(a)y=x;voidout()A:out();coutyendl;protected:doubley;,intmain()Aa(123);a.out();Bb(789,5.16);b.out();,实例化基类的抽象类型参数,在类模板中可以声明各种友元关系一个函数或函数模板可以类是或类模板的友元一个类或类模板可以是类或类模板的友元类声明这种模板之间的友元关系符号比较烦琐,10.3.4类模板与友元,templateclassX/friendvoidf1();函数f1成为类模板X实例化的每个模板类的友元函数,templateclassX/templatefriendvoidf2(X对特定类型(如double),使模板函数f2(XA类的成员函数f3成为类模板X实例化的每个模板类的友元函数,templateclassX/templatefriendvoidB:f4(X对特定类型(如double),使模板类B的成员函数f4(XY类的每个成员函数成为类模板X实例化的每个模板类的友元函数,10.3.4类模板与友元,10.3.3在类层次中的类模板,templateclassX/templatefriendclassZ;对特定类型(如double),使模板类Z所有成员函数成为模板类X的友元,#includeusingnamespacestd;templateclassComplexpublic:Complex(Tr=0,Ti=0);private:TReal,Image;/数据成员,实部、虚部templatefriendComplexoperator+(constComplexc1,constComplexc2);templatefriendComplexoperator-(constComplex,例10-5为复数类模板用定义重载运算符友元函数,#includeusingnamespacestd;templateclassComplexpublic:Complex(Tr=0,Ti=0);private:TReal,Image;/数据成员,实部、虚部templatefriendComplexoperator+(constComplexc1,constComplexc2);templatefriendComplexoperator-(constComplex,例10-5为复数类模板用定义重载运算符友元函数,它们都是友元函数,#includeusingnamespacestd;templateclassComplexpublic:Complex(Tr=0,Ti=0);private:TReal,Image;/数据成员,实部、虚部templatefriendComplexoperator+(constComplexc1,constComplexc2);templatefriendComplexoperator-(constComplex,例10-5为复数类模板用定义重载运算符友元函数,模板声明,#includeusingnamespacestd;templateclassComplexpublic:Complex(Tr=0,Ti=0);private:TReal,Image;/数据成员,实部、虚部templatefriendComplexoperator+(constComplexc1,constComplexc2);templatefriendComplexoperator-(constComplex,例10-5为复数类模板用定义重载运算符友元函数,实例化类模板类型,#includeusingnamespacestd;templateclassComplexpublic:Complex(Tr=0,Ti=0);private:TReal,Image;/数据成员,实部、虚部templatefriendComplexoperator+(constComplexc1,constComplexc2);templatefriendComplexoperator-(constComplex,例10-5为复数类模板用定义重载运算符友元函数,/默认参数构造函数templateComplex:Complex(Tr,Ti)Real=r;Image=i;,#includeusingnamespacestd;templateclassComplexpublic:Complex(Tr=0,Ti=0);private:TReal,Image;/数据成员,实部、虚部templatefriendComplexoperator+(constComplexc1,constComplexc2);templatefriendComplexoperator-(constComplex,例10-5为复数类模板用定义重载运算符友元函数,#includeusingnamespacestd;templateclassComplexpublic:Complex(Tr=0,Ti=0);private:TReal,Image;/数据成员,实部、虚部templatefriendComplexoperator+(constComplexc1,constComplexc2);templatefriendComplexoperator-(constComplex,例10-5为复数类模板用定义重载运算符友元函数,#includeusingnamespacestd;templateclassComplexpublic:Complex(Tr=0,Ti=0);private:TReal,Image;/数据成员,实部、虚部templatefriendComplexoperator+(constComplexc1,constComplexc2);templatefriendComplexoperator-(constComplex,例10-5为复数类模板用定义重载运算符友元函数,#includeusingnamespacestd;templateclassComplexpublic:Complex(Tr=0,Ti=0);private:TReal,Image;/数据成员,实部、虚部templatefriendComplexoperator+(constComplexc1,constComplexc2);templatefriendComplexoperator-(constComplex,例10-5为复数类模板用定义重载运算符友元函数,#includeusingnamespacestd;templateclassComplexpublic:Complex(Tr=0,Ti=0);private:TReal,Image;/数据成员,实部、虚部templatefriendComplexoperator+(constComplexc1,constComplexc2);templatefriendComplexoperator-(constComplex,例10-5为复数类模板用定义重载运算符友元函数,intmain()Complexc1(2.5,3.7),c2(4.2,6.5);coutc1=c1nc2=c2endl;coutc1+c2=c1+c2endl;coutc1-c2=c1-c2endl;cout-c1=-c1endl;,从类模板实例化的每个模板类有自己的类模板数据成员,该模板类的所有对象共享一个static数据成员和非模板类的static数据成员一样,模板类的static数据成员也应该在文件范围定义和初始化每个模板类有自己的类模板的static数据成员副本,10.3.5类模板与static成员,#includeusingnamespacestd;constdoublepi=3.14159;templateclassCircleTradius;staticinttotal;/类模板的静态数据成员public:Circle(Tr=0)radius=r;total+;voidSet_Radius(Tr)radius=r;doubleGet_Radius()returnradius;doubleGet_Girth()return2*pi*radius;doubleGet_Area()returnpi*radius*radius;staticintShowTotal();/类模板的静态成员函数;templateintCircle:total=0;templateintCircle:ShowTotal()returntotal;,例10-6为圆类模板定义静态成员,#includeusingnamespacestd;constdoublepi=3.14159;templateclassCircleTradius;staticinttotal;/类模板的静态数据成员public:Circle(Tr=0)radius=r;total+;voidSet_Radius(Tr)radius=r;doubleGet_Radius()returnradius;doubleGet_Girth()return2*pi*radius;doubleGet_Area()returnpi*radius*radius;staticintShowTotal();/类模板的静态成员函数;templateintCircle:total=0;templateintCircle:ShowTotal()returntotal;,例10-6为圆类模板定义静态成员,templateclassCircle,#includeusingnamespacestd;constdoublepi=3.14159;templateclassCircleTradius;staticinttotal;/类模板的静态数据成员public:Circle(Tr=0)radius=r;total+;voidSet_Radius(Tr)radius=r;doubleGet_Radius()returnradius;doubleGet_Girth()return2*pi*radius;doubleGet_Area()returnpi*radius*radius;staticintShowTotal();/类模板的静态成员函数;templateintCircle:total=0;templateintCircle:ShowTotal()returntotal;,例10-6为圆类模板定义静态成员,staticinttotal;,templateintCircle:total=0;,Circle(Tr=0)radius=r;total+;,#includeusingnamespacestd;constdoublepi=3.14159;templateclassCircleTradius;staticinttotal;/类模板的静态数据成员public:Circle(Tr=0)radius=r;total+;voidSet_Radius(Tr)radius=r;doubleGet_Radius()returnradius;doubleGet_Girth()return2*pi*radius;doubleGet_Area()returnpi*radius*radius;staticintShowTotal();/类模板的静态成员函数;templateintCircle:total=0;templateintCircle:ShowTotal()returntotal;,例10-6为圆类模板定义静态成员,staticintShowTotal();,intCircle:ShowTotal()returntotal;,例10-6为圆类模板定义静态成员,intmain()CircleA,B;/建立了2个对象A.Set_Radius(16);cout:ShowTotal()X(6.23),Y(10.5),Z(25.6);/建立了3个对象cout:ShowTotal()endl;/显示建立的对象数,CircleA,B;A.Set_Radius(16);cout:ShowTotal()endl;,A.ShowTotal()或B.ShowTotal(),例10-6为圆类模板定义静态成员,intmain()CircleA,B;/建立了2个对象A.Set_Radius(16);cout:ShowTotal()X(6.23),Y(10.5),Z(25.6);/建立了3个对象cout:ShowTotal()endl;/显示建立的对象数,CircleX(6.23),Y(10.5),Z(25.6);cout:ShowTotal()endl;,X.ShowTotal()或Y.ShowTotal(),例10-6为圆类模板定义静态成员,intmain()CircleA,B;/建立了2个对象A.Set_Radius(16);cout:ShowTotal()X(6.23),Y(10.5),Z(25.6);/建立了3个对象cout:ShowTotal()endl;/显示建立的对象数,例10-7静态成员数据成员为抽象类型,#includeusingnamespacestd;template/定义类模板classApublic:A(Tx=0)t=x;total=total+1;staticTtotal;/静态数据成员为抽象类型Tprotected:Tt;tem

温馨提示

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

评论

0/150

提交评论