版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第9 9章章 类和对象类和对象 面向对象的程序设计面向对象的程序设计 传统的面向过程程序设计是围绕功能进行的,传统的面向过程程序设计是围绕功能进行的,用一个函数实现一个功能。用一个函数实现一个功能。所有的数据都是公所有的数据都是公用的用的,一个函数可以使用任何一组数据,而一,一个函数可以使用任何一组数据,而一组数据又能被多个函数所使用。程序设计者必组数据又能被多个函数所使用。程序设计者必须考虑每一个细节,什么时候对什么数据进行须考虑每一个细节,什么时候对什么数据进行操作操作 。 面向对象程序设计采取的是另外一种思路。面向对象程序设计采取的是另外一种思路。它面对的是一个个对象。实际上,每一组数
2、据它面对的是一个个对象。实际上,每一组数据都是有特定的用途的,是某种操作的对象。也都是有特定的用途的,是某种操作的对象。也就是说,一组操作调用一组数据。就是说,一组操作调用一组数据。 程序设计者的任务包括两个方面:一是程序设计者的任务包括两个方面:一是设计所需的各种类和对象,即决定把哪些数设计所需的各种类和对象,即决定把哪些数据和操作封装在一起;二是考虑怎样向有关据和操作封装在一起;二是考虑怎样向有关对象发送消息,以完成所需的任务。对象发送消息,以完成所需的任务。各个对各个对象的操作完成了,整体任务也就完成了。象的操作完成了,整体任务也就完成了。 因此人们设想把相关的数据和操作放在因此人们设想
3、把相关的数据和操作放在一起,形成一个整体,与外界相对分隔一起,形成一个整体,与外界相对分隔。这。这就是面向对象的程序设计中的对象。就是面向对象的程序设计中的对象。 程序程序= =算法数据结构算法数据结构在面向过程的结构化程序设计中,人们在面向过程的结构化程序设计中,人们常使用这样的公式来表述程序常使用这样的公式来表述程序 对象对象 = = 算法算法 数据结构数据结构程序程序=(=(对象对象+ +对象对象+ +对象对象+)+ +)+ 消息消息 消息的作用就是对对象的控制。消息的作用就是对对象的控制。程序设计的关键是设计好每一个对象以及程序设计的关键是设计好每一个对象以及确定向这些对象发出的命令,
4、使各对象完确定向这些对象发出的命令,使各对象完成相应的操作。成相应的操作。 面向对象的程序组成:面向对象的程序组成:每一个实体都是对象。有一些对象是具有每一个实体都是对象。有一些对象是具有相同的结构和特性的。相同的结构和特性的。 每个对象都属于一个特定的类型。每个对象都属于一个特定的类型。 在在C+C+中对象的类型称为类中对象的类型称为类(class)(class)。类代类代表了某一批对象的共性和特征。表了某一批对象的共性和特征。类是对象类是对象的抽象,而对象是类的具体实例的抽象,而对象是类的具体实例(instance)(instance)。 类是一种复杂的数据类是一种复杂的数据类型类型,它是
5、将,它是将不不同类型的数据同类型的数据和和与这些数据相关的运算与这些数据相关的运算封装在一起的封装在一起的 集合体。集合体。类的定义类的定义 类将一些数据及与数据相关的类将一些数据及与数据相关的函数函数封封装在一起,使类中的数据得到很好的装在一起,使类中的数据得到很好的“保护保护”。在大型程序中不会被随意修。在大型程序中不会被随意修改。改。类的定义格式:类的定义格式:class 类名类名 private : 成员数据成员数据;成员函数;成员函数; public : 成员数据成员数据;成员函数;成员函数; protected:成员数据成员数据;成员函数;成员函数;;关键字关键字类名类名私有私有公
6、有公有保护保护class Student private : char Name20; float Math; float Chiese; public : float average; void SetName(char *name); void SetMath(float math); void SetChinese(float ch); float GetAverage(void);分号不能少分号不能少用关键字用关键字priviatepriviate限定的成员称为限定的成员称为私有私有成员成员,对私有成员,对私有成员限定在该类的内部使限定在该类的内部使用用,即,即只允许该类中的成员函数使
7、用私只允许该类中的成员函数使用私有的成员数据有的成员数据,对于私有的成员函数,对于私有的成员函数,只能被只能被该类内的成员函数调用该类内的成员函数调用;类就相;类就相当于私有成员的作用域。当于私有成员的作用域。 用关键字用关键字publicpublic限定的成员称为限定的成员称为公有成员公有成员,公有成员的数据或函数不受类的限制,公有成员的数据或函数不受类的限制,可可以在类内或类外自由使用以在类内或类外自由使用;对类而言是透;对类而言是透明的。明的。而用关键字而用关键字protectedprotected所限定的成员称为所限定的成员称为保护成员保护成员,只允许在类内及该类的派生类,只允许在类内
8、及该类的派生类中使用保护的数据或函数。即保护成员的中使用保护的数据或函数。即保护成员的作用域是作用域是该类及该类的派生类该类及该类的派生类。私有成员私有成员 公有成员公有成员 保护成员保护成员类内函数类内函数 可以调用可以调用 可以调用可以调用 可以调用可以调用类外函数类外函数 不可调用不可调用 可以调用可以调用 不可调用不可调用私有函数私有函数 公有函数公有函数 保护函数保护函数类内函数类内函数 可以调用可以调用 可以调用可以调用 可以调用可以调用类外函数类外函数 不可调用不可调用 可以调用可以调用 不可调用不可调用每一个限制词每一个限制词(private(private等等) )在类体中可
9、使在类体中可使用多次。一旦使用了限制词,该限制词一用多次。一旦使用了限制词,该限制词一直有效,直到下一个限制词开始为止。直有效,直到下一个限制词开始为止。如果未加说明,类中成员默认的访问权限如果未加说明,类中成员默认的访问权限是是privateprivate,即私有的。,即私有的。class Studentchar Name20;float Math;float Chiese; public :float average; void SetName(char *name);void SetMath(float math);void SetChinese(float ch); float Get
10、Average(void);均为私有权限均为私有权限均为公有权限均为公有权限class A float x, y; public: void Setxy(float a,float b) x=a; y=b; void Print(void) coutxtyendl; ;xySetxy()Print()A私有数据私有数据公有函数公有函数在在类外不能直接使用类外不能直接使用 x x 或或 y y ,必须通过,必须通过Setxy()Setxy()给给 x x 或或 y y 赋值,通过赋值,通过Print()Print()输出输出 x x 或或 y y 。成员函数与成员数据的定义不分先后,可以先成员函
11、数与成员数据的定义不分先后,可以先说明说明函数原型函数原型,再在类体外定义函数体。,再在类体外定义函数体。class A float x, y; public: void Setxy(float a,float b) x=a; y=b; void Print(void) coutxtyendl; ;在类体内定在类体内定义成员函数义成员函数class A float x, y; public: void Setxy(float a,float b); void Print(void);;void A:Setxy(float a,float b) x=a; y=b; void A:Print(vo
12、id) coutxtyendl; 在类体内说明在类体内说明成员函数原型成员函数原型在类体外定在类体外定义成员函数义成员函数 : (). /函数体函数体在类体外定义成员函数的格式:在类体外定义成员函数的格式:void A:Setxy(float a,float b) x=a; y=b; 函数类型函数类型类名类名函数名函数名形参列表形参列表函数体函数体在定义一个类时,要注意如下几点:在定义一个类时,要注意如下几点:1 1、类具有封装性,并且类只是定义了一种结、类具有封装性,并且类只是定义了一种结构(样板),所以构(样板),所以类中的任何成员数据均不能类中的任何成员数据均不能使用关键字使用关键字ex
13、ternextern,autoauto或或registerregister限定其存限定其存储类型储类型。2 2、在定义类时,只是定义了一种导出的数据、在定义类时,只是定义了一种导出的数据类型,类型,并不为类分配存储空间并不为类分配存储空间,所以,在定义,所以,在定义类中的数据成员时,类中的数据成员时,不能对其初始化不能对其初始化。如:。如: class Test int x=5,y=6; /class Test int x=5,y=6; /是不允许的是不允许的 extern float x; extern float x; /是不允许的是不允许的 在在C+C+语言中,语言中,结构体类型结构体类
14、型只是类的一个只是类的一个特例。结构体类型与类的唯一的区别在特例。结构体类型与类的唯一的区别在于:于:在类中,其成员的缺省的存取权限在类中,其成员的缺省的存取权限是私有的;而在结构体类型中,其成员是私有的;而在结构体类型中,其成员的缺省的存取权限是公有的。的缺省的存取权限是公有的。 内联成员函数内联成员函数 当我们定义一个类时,当我们定义一个类时,可以可以在类中直接定义函数体在类中直接定义函数体。这时成员函。这时成员函数在编译时是作为数在编译时是作为内联函数内联函数来实现的。来实现的。 同时,我们也可以在类体外定义类的内联成员函数,在类体内说明同时,我们也可以在类体外定义类的内联成员函数,在类
15、体内说明函数,函数,在类体外定义时,在成员函数的定义前面加上关键字在类体外定义时,在成员函数的定义前面加上关键字inlineinline。 class A float x, y; public: void Setxy(float a,float b); void Print(void);;inline void A:Setxy(float a,float b) x=a; y=b; inline void A:Print(void) coutxtyendl; 说明该成员函数为内联说明该成员函数为内联对象对象只有在定义了属于类的变量后,系统才会为只有在定义了属于类的变量后,系统才会为类类的变量的变
16、量分配空间。分配空间。在定义类时,只是定义了一种在定义类时,只是定义了一种数据类型数据类型,即即说说明程序中可能会出现该类型的数据,明程序中可能会出现该类型的数据,并不为类并不为类分配存储空间。分配存储空间。类的变量我们称之为类的变量我们称之为对象对象。对象是类的实例对象是类的实例,定义对象之前,一定要先说,定义对象之前,一定要先说明该对象的类。明该对象的类。不同对象占据内存中的不同区域,它们所保存的不同对象占据内存中的不同区域,它们所保存的数据各不相同,但数据各不相同,但对成员数据进行操作的成员函对成员数据进行操作的成员函数的程序代码均是一样的数的程序代码均是一样的。 存储类型存储类型类名类
17、名 对象对象1 1,对象,对象2 2,.,.;Student st1,st2; 对象的定义格式:对象的定义格式:类名类名对象名对象名在建立对象时,只为对象分配用于保存数据成员的内存空在建立对象时,只为对象分配用于保存数据成员的内存空间,间,而成员函数的代码为该类的每一个对象所共享而成员函数的代码为该类的每一个对象所共享。 对象的定义方法同结构体定义变量的方法一样,对象的定义方法同结构体定义变量的方法一样,也分三种,也分三种,当类中有数据成员的访问权限为私有当类中有数据成员的访问权限为私有时,不允许对对象进行初始化时,不允许对对象进行初始化。class A float x,y;public: v
18、oid Setxy( float a, float b ) x=a; y=b; void Print(void) coutxtyendl; a1,a2;void main(void) A a3,a4;定义全局对象定义全局对象定义局部对象定义局部对象对象的使用对象的使用 一个对象的成员就是该对象的类所定义的一个对象的成员就是该对象的类所定义的成员,有成员,有成员数据和成员函数成员数据和成员函数,引用时同结,引用时同结构体变量类似,用构体变量类似,用“.”.”运算符。运算符。class A float x,y;public: float m,n; void Setxy( float a, floa
19、t b ) x=a; y=b; void Print(void) coutxtyendl; ;void main(void) A a1,a2; /定义对象定义对象 a1.m=10; a1.n=20; /为公有成员数据赋值为公有成员数据赋值 a1.Setxy(2.0 , 5.0); /为私有成员数据赋值为私有成员数据赋值 a1.Print();Print()Setxy()a1nmyxPrint()Setxy()a2nmyx10202.05.0输出:输出: 2 5用成员选择运算符用成员选择运算符“.”.”只能访问对象的只能访问对象的公有成员公有成员,而不能访问对象的私有成员或,而不能访问对象的私有
20、成员或保护成员。保护成员。若要访问对象的私有的数据成若要访问对象的私有的数据成员,只能通过对象的公有成员函数来获取员,只能通过对象的公有成员函数来获取。 class A float x,y;public: float m,n; void Setxy( float a, float b ) x=a; y=b; void Print(void) coutxtyendl; ;void main(void) A a1,a2; a1.m=10; a1.n=20; /为公有成员数据赋值为公有成员数据赋值 a1.x=2; a1.y=5; a1.Setxy(2.0,5.0); a1.Print();必须通过类
21、内公有函必须通过类内公有函数访问私有数据成员数访问私有数据成员非法,私有成员非法,私有成员不能在类外访问不能在类外访问同类型的对象之间可以整体赋值,这种赋值与对象的成员的访问同类型的对象之间可以整体赋值,这种赋值与对象的成员的访问权限无关。权限无关。class A float x,y;public: float m,n; void Setxy( float a, float b ) x=a; y=b; void Print(void) coutxtyendl; ;void main(void) A a1,a2; a1.m=10; a1.n=20;/为公有成员数据赋值为公有成员数据赋值 a1.S
22、etxy(2.0,5.0); a2=a1; a1.Print(); a2.Print();同类型的对象之同类型的对象之间可以整体赋值间可以整体赋值相当于成员数相当于成员数据间相互赋值据间相互赋值对象可以作函数的入口参数(实参、形参),对象可以作函数的入口参数(实参、形参),也可以作函数的出口参数。这与一般变量作为也可以作函数的出口参数。这与一般变量作为函数的参数是完全相同的。函数的参数是完全相同的。 可以定义类类型的指针,类类型的引用,对象可以定义类类型的指针,类类型的引用,对象数组,指向类类型的指针数组和指向一维或多数组,指向类类型的指针数组和指向一维或多维数组的指针变量维数组的指针变量 一
23、个类的对象,可作为另一个类的成员一个类的对象,可作为另一个类的成员 类体的区域称为类体的区域称为类作用域类作用域。类的成员函数与。类的成员函数与成员数据,其作用域都是属于类的作用域,成员数据,其作用域都是属于类的作用域,仅在该类的范围内有效,仅在该类的范围内有效,故不能在主函数中故不能在主函数中直接通过函数名和成员名来调用函数直接通过函数名和成员名来调用函数。 类作用域、类类型的作用域和对象的作用域类作用域、类类型的作用域和对象的作用域 class A float x,y;public: float m,n; void Setxy( float a, float b ) x=a; y=b; v
24、oid Print(void) coutxtyendl; ;void main(void) A a1,a2; a1.m=20; a1.n=10; a1.Setxy(2.0, 5.0); a1.Print(); void main(void) A a1,a2; m=20; n=10; Setxy(2.0, 5.0); Print(); 用对象名调用用对象名调用不能直接调用不能直接调用类类型的作用域:类类型的作用域:在函数定义之外定义在函数定义之外定义的类,其类名的作用域为的类,其类名的作用域为文件作用域文件作用域;而在函数体内定义的类,其类名的作用而在函数体内定义的类,其类名的作用域为域为块作用
25、域块作用域 。对象的作用域对象的作用域与前面介绍的变量作用域与前面介绍的变量作用域完全相同完全相同 , , 全局对象、局部对象、局部全局对象、局部对象、局部静态对象静态对象等。等。class A float x,y;public: float m,n; void Setxy( float a, float b ) x=a; y=b; void Print(void) coutxtyendl; a3,a4;void main(void) A a1,a2; class B int i,j; public : void Setij(int m, int n) i=m; j=n; ; B b1,b2;
26、 a1.Setxy(2.0, 5.0); b1.Setij(1,2);类类A:文件作用域,在:文件作用域,在整个文件中有效整个文件中有效类类B:块作用域,:块作用域,在函数内有效。在函数内有效。全局对象全局对象局部对象局部对象类的嵌套在定义一个类时在定义一个类时, , 在其类体中又包含了一个在其类体中又包含了一个类的完整定义,称为类的嵌套类的完整定义,称为类的嵌套 。类是允许嵌套定义的类是允许嵌套定义的 。class A class B int i,j; public : void Setij(int m, int n) i=m; j=n; ; float x,y;public: B b1,b
27、2; void Setxy( float a, float b ) x=a; y=b; void Print(void) coutxtyendl; ;类类B B包含在类包含在类A A中,中,为嵌套定义为嵌套定义嵌套类的对象嵌套类的对象在类在类A A的定义中,并不为的定义中,并不为b1,b2b1,b2分分配空间,配空间,只有在定义类只有在定义类A A的对象时,的对象时,才为嵌套类的对象分配空间才为嵌套类的对象分配空间。嵌嵌套类的作用域在类套类的作用域在类A A的定义结束时的定义结束时结束结束。类的对象如何引用私有数据成员类的对象如何引用私有数据成员1 1、通过公有函数为私有成员赋值、通过公有函数
28、为私有成员赋值class Testint x , y; public: void Setxy(int a, int b)x=a;y=b; void Printxy(void) coutx=xty=yendl; ;void main(void) Test p1,p2; p1.Setxy(3, 5); p1.Printxy( );调用公有函数为调用公有函数为私有对象赋值私有对象赋值2 2、利用指针访问私有数据成员利用指针访问私有数据成员class Testint x,y; public: void Setxy(int a, int b) x=a;y=b; void Getxy(int *px, i
29、nt *py) *px=x;*py=y; /提取提取x,y值值 void Printxy(void)coutx=xty=yendl; ;void main(void) Test p1,p2; p1.Setxy(3,5); int a,b; p1.Getxy(&a, &b);/将将 a=x, b=y coutatbendl; Setxy()Getxy()Printxy()xy35ba&apx&bpy35输出:输出: 3 53 3、利用函数访问私有数据成员、利用函数访问私有数据成员class Testint x,y; public: void Setxy(int a
30、, int b) x=a;y=b; int Getx(void) return x; /返回返回x值值 int Gety(void) return y; /返回返回y值值 void Printxy(void)coutx=xty=yendl; ;void main(void) Test p1,p2; p1.Setxy(3,5); int a,b; a=p1.Getx( ); b=p1.Gety(); /将将 a=x, b=y coutatbendl; 函数值就是私有函数值就是私有成员变量的值成员变量的值4 4、利用引用访问私有数据成员、利用引用访问私有数据成员class Testint x,y;
31、 public: void Setxy(int a, int b)x=a; y=b; void Getxy(int &px, int &py) px=x; py=y; /提取提取x,y值值 void Printxy(void)coutx=xty=yendl; ;void main(void) Test p1,p2; p1.Setxy(3,5); int a,b; p1.Getxy(a, b);/将将 a=x, b=y coutatbendl; Setxy()Getxy()Printxy()xy35bapxpy35输出:输出: 3 5类引用举例(学生类:学生的姓名成绩及相关的运算
32、)类引用举例(学生类:学生的姓名成绩及相关的运算)class Stuchar Name20;/学生姓名学生姓名float Chinese;/语文成绩语文成绩float Math;/数学成绩数学成绩public:float Average(void); /计算平均成绩计算平均成绩float Sum(void);/计算总分计算总分void Show(void);/打印信息打印信息void SetStudent(char*,float,float);/为对象置姓名、成绩为对象置姓名、成绩void SetName(char *);/为对象置姓名为对象置姓名char *GetName(void);/取得
33、学生姓名取得学生姓名;float Stu:Average(void) return (Chinese+Math)/2;/平均成绩平均成绩float Stu:Sum(void) return Chinese+Math; /总分总分void Stu:Show(void)/打印信息打印信息 coutName: NameendlScore: Chineset Mathtaverage: Average()tSum: Sum()endl; void Stu:SetStudent(char *name,float chinese,float math)strcpy(Name,name); /置姓名置姓名C
34、hinese=chinese;/置语文成绩置语文成绩Math=math;/置数学成绩置数学成绩char * Stu:GetName(void)return Name;/返回姓名返回姓名void main(void)Stu p1,p2;p1.SetStudent(“Li qing”,98,96);/对象置初值对象置初值p2.SetStudent(Wang Gang,90,88); /对象置初值对象置初值p1.Show();/打印信息打印信息p2.Show();/打印信息打印信息p1.SetName (“Zhao jian”);/重新置重新置p1对象的名字对象的名字p1.Show (); cout
35、“p1.Name: ”p1.GetName ()endl;/打印对象的名字打印对象的名字 cout“p1.average: ”p1.Average ()endl;/打印对象的成绩打印对象的成绩成员函数的重载成员函数的重载 类中的成员函数与前面介绍的普通函数类中的成员函数与前面介绍的普通函数一样,成员函数可以一样,成员函数可以带有缺省的参数带有缺省的参数,也可以也可以重载重载成员函数成员函数 。重载时,函数的形参必须在重载时,函数的形参必须在类型类型或或数目数目上不同。上不同。class Testint x , y;int m, n; public: void Setxy(int a, int
36、b)x=a;y=b; void Setxy(int a,int b,int c,int d) x=a;y=b;m=c;n=d; void Printxy(int x)cout “m=mt“n=nendl; void Printxy(void) coutx=xty=yendl; ;void main(void) Test p1,p2; p1.Setxy(3, 5); p2.Setxy(10,20,30,40);/参数不同参数不同 p1.Printxy(); p2.Printxy(); p2.Printxy(2);/参数、类型不同参数、类型不同输出:输出:x=3 y=5x=10 y=20m=30
37、n=40class Stuchar Name20;float Chinese;float Math;float English;float Physical;public:float Average(void);/语文、数学平均成绩语文、数学平均成绩float Average(int n);/四门课的平均成绩四门课的平均成绩float Sum(void);/语文、数学总分语文、数学总分float Sum(int n);/四门课总分四门课总分void Show(void);void SetStudent(char*,float,float);/置姓名、语文、数学初值置姓名、语文、数学初值void
38、 SetStudent(char *, float,float,float,float);/置姓名、成绩置姓名、成绩void SetName(char *);char *GetName(void);可以有缺省参数的成员函数,若形参不完可以有缺省参数的成员函数,若形参不完全缺省,则必须从形参的全缺省,则必须从形参的右边右边开始缺省。开始缺省。缺省参数的成员函数缺省参数的成员函数class Afloat x,y;public:float Sum(void) return x+y; void Set(float a,float b=10.0) x=a;y=b; void Print(void) coutx=xty=yendl; ;void main(void)A a1,a2;a1.Set (2.0,4.0);couta1: ; a1.Print ();couta1.sum=a1.Sum ()endl;a2.Set(20.0);couta2: ; a2.Print ();couta2.sum=a2.Sum ()endl;不缺省参数,不缺省参数,a1.x=2,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 七年级语文下册第18课《井冈翠竹》教学实践
- 阉割术教学设计中职专业课-兽医基础-畜牧类-农林牧渔大类
- 光辉的太阳说课稿2025年小学音乐六年级下册人音版(主编:曹理)
- 提升-三年级课后服务口才练习活动 第六课时教案+
- 2026年人员密集场所消防安全管理与疏散演练试题
- 化工和危险化学品生产经营企业-事故类比安全检查表
- 2026年物业项目经理竞聘物权法与物业管理试题
- 高中生活动指导说课稿
- 幼儿园中班数学教案10以内序数
- 幼儿园中班诗歌我们的祖国真大
- 2026年天津市高三高考二模英语模拟试卷试题(含答案详解)
- 2026中国卵巢上皮性癌维持治疗专家共识解读
- SYT 0452-2021 石油天然气金属管道焊接工艺评定-PDF解密
- 散文内容要点概括(一):特定信息概括、主旨情感概括【要点精讲+拓展提升】 高考语文一轮复习之散文阅读精讲课件
- 影响我最大的一个人作文讲评
- 重卡结构爆炸图-中英文对照教学课件
- EVE国服历史汇编
- GB/T 4798.3-2023环境条件分类环境参数组分类及其严酷程度分级第3部分:有气候防护场所固定使用
- 电缆线路巡视
- SH/T 0642-1997液体石油和石油化工产品自燃点测定法
- GB/T 3799-2021汽车发动机大修竣工出厂技术条件
评论
0/150
提交评论