




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VisualC++面向对象编程语言第三章C++面向对象程序设计第三章C++面向对象程序设计3.1面向对象程序设计概述3.1.1传统的结构化程序设计3.1.2面向对象程序设计方法及特征3.2C++类3.2.1类的定义与实现3.2.2构造函数和析构函数3.2.3this指针3.2.4静态成员3.2.5友元3.3类的继承3.3.1基类和派生类3.3.2基类和派生类的构造函数3.3.3多重继承3.3.4虚基类3.4多态性和虚函数3.4.1用基类指针指向派生类对象3.4.2虚函数3.4.3抽象类和纯虚函数3.5重载3.5.1函数重载3.5.2运算符重载3.6C++模板3.6.1函数模板3.6.2类模板3.7MicrosoftVisualC++的语法扩充3.7.1VisualC++自定义数据类型3.7.2VisualC++运行库3.7.3运行时类型识别3.7.4编程规范结构化程序设计:将系统分解为若干模块(即函数);缺点:维护困难,特别是数据结构的修改;3.1.1传统的结构化程序设计3.1.2面向对象程序设计方法及特征对象=数据+作用于这些数据上的操作;类是具有相同数据结构和相同操作功能的对象的集合,对象是类的实例;对象与类的关系类似于鞋和生产鞋的模具;面向对象程序设计把一个复杂的问题分解为多个能完成独立功能的对象,分开独立设计,再将其整合完成复杂问题;其理想目标是希望编写程序就像搭积木;面向过程和面向对象的区别面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。例如五子棋棋,面向过过程的设计计思路就是是首先分析析问题的步步骤:1、开始游游戏,2、、黑子先走走,3、绘绘制画面,,4、判断断输赢,5、轮到白白子,6、、绘制画面面,7、判判断输赢,,8、返回回步骤2,,9、输出出最后结果果。把上面每个个步骤用分分别的函数数来实现,,问题就解解决了。而面向对象象的设计则则是从另外外的思路来来解决问题题。整个五五子棋可以以分为:1、黑白双双方,这两两方的行为为是一模一一样的,2、棋盘系系统,负责责绘制画面面,3、规规则系统,,负责判定定诸如犯规规、输赢等等。第一类对象象(玩家对对象)负责责接受用户户输入,并并告知第二二类对象((棋盘对象象)棋子布布局的变化化,棋盘对对象接收到到了棋子的的变化就要要负责在屏屏幕上面显显示出这种种变化,同同时利用第第三类对象象(规则系系统)来对对棋局进行行判定。可以明显地地看出,面面向对象是是以功能来来划分问题题,而不是是步骤。同样是绘制制棋局,这这样的行为为在面向过过程的设计计中分散在在了总多步步骤中,很很可能出现现不同的绘绘制版本,,因为通常常设计人员员会考虑到到实际情况况进行各种种各样的简简化。而面面向对象的的设计中,,绘图只可可能在棋盘盘对象中出出现,从而而保证了绘绘图的统一一。功能上的统统一保证了了面向对象象设计的可可扩展性。。比如我要加加入悔棋的的功能,如如果要改动动面向过程程的设计,,那么从输输入到判断断到显示这这一连串的的步骤都要要改动,甚甚至步骤之之间的循序序都要进行行大规模调调整。如果是面向向对象的话话,只用改改动棋盘对对象就行了了,棋盘系系统保存了了黑白双方方的棋谱,,简单回溯溯就可以了了,而显示示和规则判判断则不用用顾及,同同时整个对对对象功能能的调用顺顺序都没有有变化,改改动只是局局部的。在类的定义义中,数据据称为成员员变量,函函数称为方方法;成员变量按按访问控制制权限分为为公有和私私有;定义的格式式:
class<类名>
{private:<私有有数据成员员和成员函函数的声明明>public:<私有数据据成员和成成员函数的的声明>protected:<保护数数据成员和和成员函数数的声明>
}3.2.1类的定定义与实现现private属性性的成员只只允许被本本类的成员员函数访问问和调用;;protected属性的成成员允许被被本类的成成员函数和和派生类的的成员函数数访问和调调用;例:Time类的定定义
classTime
{private:inthour;intminute;intsecond;public:voidsetTime(int,int,int);voidshowTime();}为什么需要要这两个函函数????对于成员函函数来讲,,成员变量量就像全局局变量;类的定义和和一般函数数定义类似似,但必须须在成员函函数名前加加类名和作作用域限定定符(::)Time类类的实现((定义)voidTime::setTime(inth,intm,ints)
{hour=(h>=0&&h<24)?h:0;minute=(m>=0&&m<60)?m:0;second=(s>=0&&s<60)?s:0;}
voidTime::showTime(){
cout<<hour<<‘:’’<<minute<<‘:’<<second<<endl;
}对象的声明明:就像变变量的声明明(用模具具生产一个个产品);;格式:<类类名><对象名>;例:Timet1,today;Time*pt1=&t1;比较inti;成员函数的的调用:t1.setTime(1,2,3);today.showTime();
pt1->setTime(1,2,3);思考:t1.hour=10;在面向对象象程序设计计中,程序序设计范型型变成了::确定你需需要哪些类类型,为每每个类型提提供完整的的一组操作作。思考:如果果对于Time类,,在未调用用setTime前前调用showTime会怎怎样?我们需要对对成员变量量初始化;;构造造函函数数是是一一种种特特殊殊的的成成员员函函数数,,函函数数名名和和类类名名相相同同,,提提供供了了对对成成员员变变量量初初始始化化的的方方法法,,使使得得声声明明对对象象时时自自动动初初始始化化对对象象,当当声声明明对对象象时时,,自自动动调调用用构构造造函函数数;;析构构函函数数也也是是成成员员函函数数,,用用来来在在系系统统释释放放对对象象前前做做一一些些清清理理工工作作,当当对对象象注注销销时时,,自自动动调调用用析析构构函函数数;;构构造造函函数数和和析析构构函函数数构造造函函数数的的名名称称与与类类名名相相同同,,而而析析构构函函数数必必须须在在类类名名前前加加““~””,,都都没没有有返返回回值值;;构造造函函数数可可以以有有参参数数,,析析构构函函数数没没有有参参数数;;系统统有有默默认认的的构构造造函函数数和和析析构构函函数数;;可以以有有多多个个构构造造函函数数((参参数数类类型型不不同同)),,使使得得创创建建的的对对象象根根据据数数据据类类型型的的不不同同((整整型型和和实实型型))进进行行不不同同的的处处理理,,这这就就是是函函数数重重载载;;public:Time(int,int,int);~Time()…………};Time::Time(inth,intm,ints){hour=h;minute=m;second=s;}Time::~Time(){…………例Voidmain(void){Timet1(10,20,30);//调调用用构构造造函函数数……………………}//调调用用析析构构函函数数理解解面面向向对对象象设设计计的的思思想想例::计计算算一一个个矩矩形形的的面面积积和和周周长长计算算一一个个矩矩形形的的面面积积和和周周长长从面面向向过过程程的的角角度度出出发发思思考考这这个个问问题题;;先确确定定面面积积和和周周长长的的算算法法((这这个个很很简简单单,,小小学学知知识识))编编写写2个个方方法法分分别别计计算算面面积积和和周周长长,,在在一一个个类类里里面面考考虑虑到到计计算算周周长长和和面面积积需需要要至至少少2个个参参数数,,长长和和宽宽;;程序序如如下下::intperimeter(intlength,intwidth){return2*(length+width);}intarea(intlength,intwidth){returnlength*width;}voidmain(){cout<<perimeter(4,5);cout<<““\n””cout<<area(4,5);}下面面再再从从面面向向对对象象的的角角度度出出发发,,重重新新考考虑虑这这个个问问题题::一个个长长方方形形可可以以看看成成一一个个长长方方形形对对象象。。既既然然是是对对象象,,那那么么它它就就有有属属性性((长长和和宽宽))和和行行为为((周周长长和和面面积积))抽抽取取长长方方形形的的共共性性,,设设计计一一个个类类通通过过对对象象的的行行为为,,就就可可以以求求出出某某个个具具体体的的长长方方形形对对象象的的周周长长和和面面积积classRectangle(){public:intlength,width;intperimeter(){return2*(length+width);}intarea(){returnlength*width;}}voidmain(){Rectanglerect1=newRectangle();rect1.length=10;rect1.width=5;cout<<rect1.perimeter();cout<<rect1.area();}在C方方案案中中扩扩展展困困难难,,原原因因就就在在于于没没有有一一个个合合适适的的位位置置来来存存储储辅辅助助的的状状态态信信息息,,因因为为在在原原来来的的情情况况下下根根本本不不需需要要状状态态信信息息;;对象象提提供供了了一一个个理理想想的的位位置置来来放放置置状状态态信信息息,,并并且且作作为为对对象象的的一一部部分分是是显显示示可可用用的的,,而而不不是是隐隐藏藏在在幕幕后后的的东东西西;;继续思考面向向对象的特点点在面向过程的的思想里,一一个程序一般般都是由一个个个函数组成成的,这些函函数之间相互互调用,就就形成了一个个完整的程序序,解决了一一个问题。它它的基本结构构是:函数一(){……;}函数二(){……;}……主函数(){……;}在面向对象的的思想中,是是把这些都封封装起来,形形成一个类。。class类类名{函数一(){……;}函数二(){……;}……}然后由这个类类产生一个对对象,比如::我们把一个个类的类名起起为student那么产生对象象的方法就是是:students1;这里s1是一一个对象,产产生了这个对对象以后,才才可以进行相相关操作。操作方法如::s1.函函数一();;假设我们要做做一个小游戏戏,类似于网网游里面的打打怪,为简单单起见,认为为怪不打人,,只让人打,,他的血不断断减少,直到到死亡。把所有怪物的的共同特征抽抽象出来,于于是我们得到到一个类:怪怪物class怪怪物{char怪怪物名;int血;;}怪物::怪物物(怪物名n,血n)/*构造函函数*/{怪物名=怪物物名n;血=血n;}怪物::被打打函数(){血减少;}怪物::判断断函数(){if(血==0)cout<<“你胜利了了!”;}怪物::玩游游戏(){while(血>0){被打函数();判断函数();}main主函函数voidmain(){/******产生对象象******/怪物怪物1("狼",,5000);怪物怪物2("虎",,8000);怪物怪物3("蛇",,3000);怪物1.玩游游戏();怪物2.玩游游戏();怪物3.玩游游戏();}指向对象本身身的指针,作作为隐含参数数传给每个成成员函数;例:
voidTime::showTime(){
cout<<hour<<’’:’<<minute<<‘:’’<<second<<endl;
}等同于于
voidTime::showTime(Time*this);{
cout<<this->hour<<‘‘:”<<this->minute……}指指针Time::showTime{
Display(this);
}Display(Time*pObj)This指针针对于在非本本类成员函数数中使用对象象成员变量需要让多个对对象共享相同同值的成员时时使用;成员变量定义义:staticintm_ncount;使用和一般成成员变量一样样,也有公有有、私有之分分;初始化必须在在类定义的外外部:
intPerson::m_nCount=0;静静态成员成员函数也可可以是静态的的;定义staticintGetCount();没有this指针;可以通过类调调用:Person::GetCount();
也可以以通过对象调调用:e1.GetCount();静态成员函数数只能访问类类的静态成员员;如需访问非静静态成员,需需将对象作为为参数传入;;
longPerson::GetID(Personx);;友友元友元函数:访访问其他类的的私有成员变变量的函数;;一个类可以声声明一个函数数为其友元函函数;作用:编程方方便;定义:classA
{friendvoiddisplay(A);
private:
inta;}voiddisplay(Ae)
{cout<<e.a
}voidmain()
{………display(a1);}classB
{public:voidfun1(A&)
}classA
{friendvoidB::fun1(A&);
private:inta;
}
voidB::fun1(A&e)
{e.a=10;………}一个类的成员员函数作为另另一个类的友友元函数voidmain()
{Aa1;Bb1;b1.fun1(a1);
}友元类:类A可以声明类类B为其友元元类,类B的的所有成员函函数都可以访访问A的所有有成员;定义
classC{public:voidfun2(A&);
}classA
{friendC;
private:inta;}voidC::fun2(A&e){
e.a=10;
}
voidmain(){Aa1;Cc1;c1.fun2(a1);
}classB
{public:voidfun1(A&);}
voidB::fun1(A&e)
{e.a=10;}
voidmain(){Aa1;Bb1;b1.fun1(a1);voidB::fun1(Ae)
{e.a=10;}
voidmain(){Aa1;Bb1;b1.fun1(a1);classB
{public:voidfun1(A)}classB
{public:voidfun1(A&);}
voidB::fun1(A&e)
{e.a=10;}
voidmain(){Aa1;Bb1;b1.fun1(a1);a1.ae.avoidB::fun1(Ae){e.a=10;}voidmain(){Aa1;Bb1;b1.fun1(a1);classB{public:voidfun1(A)}a1.ae.a3.3类类的继继承实现代代码重重用和和扩充充;拷贝代代码受受到版版权的的各方方面因因素影影响;;基基类和和派生生类在继承承关系系中,,新定定义的的类称称为被被继承承类的的派生生类或或子类类,被被继承承的类类称为为新定定义类类的基基类或或父类类;格式::class<派生生类名名>::[<派生生方式式>]<基类类名>{………};;派生方方式::public、private和protected(默默认为为private));无论何何种派派生方方式,,基类类的私私有成成员都都不能能在派派生类类中使使用;;例classA{private:inta;public:intGeta(){returna};}classB:publicA{}voidmain(){Bb1;b1.Geta();b1.a:=3;}classB{private:inta;public:intGeta(){returna};}思考::如果果不采采用继继承定定义B类??classB:publicA{}public派派生::基类类成员员访问问权限限不变变,可可以通通过派派生类类对象象访问问基类类公有有成员员;private派生生:基基类所所有成成员成成为私私有成成员,,只能能通过过派生生类的的成员员函数数访问问基类类非私私有成成员;;protected派生生:和和private差差不多多;例classA{private:inta;public:intGeta(){returna};}classB:A{…………}voidmain(){Bb1;b1.Geta();//非非法}基类中中不适适合派派生类类的成成员可可以在在派生生类中中重新新定义义,称称为覆覆盖(override);;在派生生类中中定义义与基基类成成员函函数名名称和和参数数表相相同的的函数数;例classA{public:voidshow(){………}};classB:publicA{public:voidshow(){………}};………Bb1;b1.show();若需要要在派派生类类中调调用基基类中中同名名的成成员函函数,,可以以使用用作用用域限限定符符“::””;classB:publicA{public:voidshow(){………};voiddisplay(){A::show();};};…………Bb1;b1.show();b1.display();基基类和和派生生类的的构造造函数数当程序序创建建一个个派生生类对对象时时,系系统首首先自自动创创建一一个基基类对对象,,即在在调用用派生生类的的构造造函数数构建建派生生类对对象时时,系系统首首先调调用基基类的的构造造函数数构建建基类类对象象;当派生生类对对象的的生存存期结结束时时,首首先调调用派派生类类的析析构对对象,,然后后调用用基类类的析析构函函数;;派生类类中必必须显显示调调用基基类的的构造造函数数,除除非基基类有有默认认的构构造函函数;;例:B::B(<形参参声明明>):A(<参数数表>){…………}形参时时指明明派生生类构构造函函数形形参的的名称称和类类型,,参数数表时时形参参说明明中所所给出出的部部分参参数,,是要要传递递给基基类构构造函函数的的参数数;Point(inta,intb)Circle(inta,intb,intr):Point(a,b)Cylinder(inta,intb,intr,inth):Circle(a,b,r)多多重继继承单继承承:每每个派派生类类只有有一个个直接接基类类;多重继继承::一个个派生生类可可以同同时从从多个个基类类派生生而来来;格式::class<B>:[<派派生方方式>]<A1>,,[<派生生方式式>]<A2>,……,[<派派生方方式>]<An>{…………};P86例例3-11GetAB(){returna+b;}虚虚基类类解决二二义性性问题题;每个派派生类类对象象含有有基类类的数数据成成员的的一个个副本本,因因此派派生类类对象象可能能存在在间接接基类类的两两份副副本。。采用虚虚基类类解决决;格式((派生生类定定义))classB:publicvirtualA基类定定义不不变;;3.4多多态性性和虚虚函数数多态性性:根根据数数据不不同进进行不不同的的运算算处理理,如如加法法,对对于实实数或或整数数就是是将两两数相相加,,对于于复数数就是是将对对应的的实部部和虚虚部相相加;;“一种种接口口、多多种方方法””;多态性性分为为编译译时多多态性性和运运行时时多态态性;;编译时时多态态性又又称静静态多多态性性,用用来处处理函函数名名相同同,但但参数数类型型不同同的情情况,,通过过重载载机制制来实实现;;运行时时多态态性::处理理函数数名、、参数数和返返回值值都相相同的的情况况,通通过虚虚函数数机制制实现现;派生类类的对对象也也可以以认为为是其其基类类的对对象,,但基基类的的对象象不是是其派派生类类的对对象;;(儿儿子像像老爸爸)允许基基类对对象的的指针针指向向其派派生类类的对对象,,通过过该指指针只只能访访问派派生类类中从从基类类继承承的公公有成成员;;(老老爸的的东西西也是是儿子子的东东西,,老爸爸只能能拿老老爸自自己的的东西西)可以通通过强强制类类型转转换将将基类类指针针和派派生类类指针针互相相转换换;用用基类类指针针指向向派生生类对对象例:…………classB:publicA…………voidsetB()………Aa,*pa;Bb,*pb;pa=&b;//基类类指针针指向向派生生类对对象pb=(B*)pa;//强强制类类型转转换pa->setB();//通通过基基类指指针访访问派派生类类自定定义的的成员员pb=&a//派派生类类指针针指向向基类类对象象pa=&a;pb=(B*)pa;pb->setB();//对对象a中不不存在在setB()虚虚函数数派生类类成员员函数数和基基类成成员函函数具具有相相同的的函数数名和和参数数类型型,派派生类类的成成员函函数将将覆盖盖基类类成员员函数数;例:classA{voidshow()…………classB:publicA{voidshow()……Bb;b.show();若用基基类指指针指指向派派生类类对象象,结结果一一样;;A*pa;Bb;pa=&b;pa->show();在基类类对象象中使使用虚虚函数数,可可以使使指向向派生生类对对象的的基类类指针针调用用派生生类中中的覆覆盖函函数((和基基类对对象成成员函函数同同名));派生类类对象象的覆覆盖函函数各各不相相同,,但基基类对对象的的虚函函数机机制,,使我我们可可以通通过指指向派派生类类对象象的基基类指指针调调用同同个函函数名名,实实现不不同派派生类类对象象的不不同功功能,,这就就是类类的多多态性性;格式::classA{public:virtualvoidshow(){………};}classB:publicA{public:voidshow(){………};}voidmain{A*pa;Bb;pa=&b;pa->show();}利用虚虚函数数机制制,我我们可可以在在基类类和派派生类类中使使用相相同的的函数数名和和参数数类型型,而而定义义不同同的操操作;;为同一一个类类体系系中所所有派派生类类的同同一类类行为为提供供了统统一的的接口口;CShape.showCCircle.showCSquare.showCEllipse.show如果用用new运运算创创建派派生类类对象象;当当delete运算算撤销销派生生类对对象时时,只只调用用基类类的析析构函函数,,没有有调用用派生生类的的析构构函数数;定义基基类的的析构构函数数为虚虚函数数可解解决问问题;;格式::classA{virtual~A(){………};}classB:publicA{~B(){………};}voidmain(){A*pa=newB;…………deletepa;}开发程程序中中,常常将基基类中中功能能容易易变化化的成成员函函数设设计成成虚函函数,,然后后根据据需要要设计计派生生类的的虚函函数,,实现现“一一种接接口、、多种种方法法”;;抽抽象类类和纯纯虚函函数我们可可以让让基类类的一一些成成员函函数没没有具具体的的定义义,这这种基基类只只能用用于类类的继继承,,其本本身不不能用用来创创建对对象,,这样样的类类称为为抽象象类;;抽象类类只能能是基基类,,它提提供了了一个个框架架,仅仅仅起起着统统一接接口的的作用用;不能声声明抽抽象类类的对对象,,但可可以声声明抽抽象类类的指指针;;抽象类类:1、至至少有有一个个成员员函数数不定定义具具体实实现;;2、、定义义了一一个protected访问问属性性的构构造函函数或或析构构函数数;不定义义具体体实现现的成成员函函数称称为纯纯虚函函数;;纯虚函函数不不能调调用;;格式::virtual<数据据类型型><成员员函数数名>(<形参参表>)=0;例:classA{public:virtualvoidfun1()=0;};classB:publicA{public:voidfun1(){………};}3.5重重载C++重载载分为为函数数重载载和运运算符符重载载;运算可可以理理解为为是调调用一一个函函数;;使用重重载机机制可可以对对一个个函数数名((或运运算符符)定定义多多个函函数((或运运算)),只只不过过函数数的参参数((或运运算的的数))类型型不同同;如加法法,对对于实实数或或整数数就是是将两两数相相加,,对于于复数数就是是将对对应的的实部部和虚虚部相相加;;函函数重重载我们可可以通通过函函数重重载机机制使使一组组功能能相似似但函函数参参数类类型不不同的的函数数共用用一个个函数数名;;C++编译译器根根据参参数类类型和和个数数选择择正确确的函函数;;P95例3-18求求绝对对值函函数abs()重载载;不能利利用函函数返返回类类型的的不同同进行行函数数的重重载;;不能利利用引引用来来重载载;对对于于voidfun(int&);和和voidfun(int);;fun(i)无无法选选择调调用哪哪个函函数;;利用重重载可可以设设计多多个构构造函函数,,为对对象提提供多多种初初始化化方式式;P96例3-19::classBox{public:Box(){………};Box(int,int,int){………};}………Boxbox1;BoxBox2(10,15,20);运运算符符重载载运算符符重载载指对对于不不同数数据类类型的的操作作数,,同一一个运运算符符所代代表的的运算算功能能可以以不同同;可以把把运算算符看看成调调用运运算符符函数数,如如10+20看看成int+(10,20);;重载运运算符符就是是编写写运算算符函函数;;格式<数数据类类型>operator<运算算符>(<形参参表>);P97例3-20非非成员员函数数重载载运算算符::classComplex{………}Complexoperator+(Complexc1,Complexc2){…………}voidmain(){………complex=complex1+complex2;}利用非非成员员函数数重载载双目目运算算符时时,运运算符符函数数的第第一个个参数数代表表运算算符左左边的的操作作数,,运算算符函函数的的第二二个参参数代代表运运算符符右边边的操操作数数;Complexoperator+(Complexc1,Complexc2)如果运运算符符函数数要求求访问问一个个类的的非公公有成成员,,则运运算符符函数数不能能定义义为非非成员员函数数,除除非将将它声声明为为该类类的友友元函函数;;P98例3-21成成员函函数重重载运运算符符:classComplex{Complexoperator+(Complex);}ComplexComplex::operator+(Complexother){…………}voidmain(){………complex=complex1+complex2;}利用成成员函函数重重载双双目运运算符符时,,运算算符左左边的的操作作数就就是对对象本本身,,不能能再将将它作作为运运算符符函数数的参参数,,因此此,这这时运运算符符函数数只需需一个个函数数参数数;Complexoperator+(Complex);同一个个重载载运算算符的的参数数个数数是相相同的的;用户不不能定定义新新的运运算符符,只只能对对现有有的进进行重重载;;重载后的优先先级和结合性性不变;下列运算符不不能重载““.”(成员员运算符)““::”(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 木材授权合同范本
- 3-Amino-benzamidoxime-3-amino-N-hydroxybenzene-1-carboximidamide-生命科学试剂-MCE
- 大修边机售卖合同范本
- 园林养护租赁合同范本
- 钢材喷漆合同范本
- 租房出售合同范本
- 砖厂煤炭合同范本
- 造纸用成型剂企业ESG实践与创新战略研究报告
- 2025年促凝血药项目发展计划
- 餐厅收银员工作计划
- 中央2025年中国科协所属单位招聘社会在职人员14人笔试历年参考题库附带答案详解-1
- 圆柱的表面积(说课稿)-2023-2024学年六年级下册数学北师大版
- 《神经系统MRI解读》课件
- 2024年江苏信息职业技术学院高职单招语文历年参考题库含答案解析
- 2025年学校春季开学典礼校长讲话致辞 (汇编11份)
- 城市轨道交通专业英语(第三版) 课件 U7 Tram
- 中华人民共和国保守国家秘密法实施条例培训课件
- 2024年全国统一高考英语试卷(新课标Ⅰ卷)含答案
- 2024年认证行业法律法规及认证基础知识 CCAA年度确认 试题与答案
- 四川省高等教育自学考试自考毕业生登记表001汇编
- 2024年潍坊工程职业学院高职单招(英语/数学/语文)笔试历年参考题库含答案解析
评论
0/150
提交评论