版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C+面向对象程序设计面向对象程序设计2第四章内容第四章内容p4.1 什么是运算符重载什么是运算符重载p4.2 运算符重载的方法运算符重载的方法p4.3 重载运算符的规则重载运算符的规则p4.4 运算符重载作为类成员函数和友元函数运算符重载作为类成员函数和友元函数p4.5 重载双目运算符重载双目运算符p4.6 重载单目运算符重载单目运算符p4.7 重载流插入运算符和流提取运算符重载流插入运算符和流提取运算符p4.8 不同类型数据间的转换不同类型数据间的转换第第5章章继承和派生继承和派生4本章内容本章内容p5.1 继承和派生的概念继承和派生的概念p5.2 派生类的声明方法派生类的声明方法p5.3
2、派生类的构成派生类的构成p5.4 派生类成员的访问属性派生类成员的访问属性p5.5 派生类的构造函数和析构函数派生类的构造函数和析构函数p5.6 多重继承多重继承p5.7 基类和派生类的转换基类和派生类的转换p5.8 继承与组合继承与组合5目标目标q理解派生和继承的相关概念;理解派生和继承的相关概念;q掌握派生类的声明方式掌握派生类的声明方式q掌握派生类的构成和成员的访问属性;掌握派生类的构成和成员的访问属性;q掌握派生类构造函数和析构函数的使用方掌握派生类构造函数和析构函数的使用方法;法;q掌握多重继承的方法;掌握多重继承的方法;q理解基类和派生类的转换方法;理解基类和派生类的转换方法;q理
3、解继承与组合的含义。理解继承与组合的含义。65.1 继承与派生的概念继承与派生的概念继承:继承:继承继承是类之间定义的一种重要是类之间定义的一种重要关系关系。人人学生学生老师老师大学生大学生研究生研究生硕士生硕士生博士生博士生专科生专科生本科生本科生在职研究生在职研究生75.1 继承与派生的概念继承与派生的概念B类继承类继承A类,或称从类类,或称从类A派生出派生出B类,则类,则A类类称为称为基类(父类),基类(父类),类类B称为称为派生类(子派生类(子类)类)。人人学生学生老师老师大学生大学生研究生研究生硕士生硕士生博士生博士生专科生专科生本科生本科生在职研究生在职研究生85.1 继承与派生的
4、概念继承与派生的概念单继承:单继承:派生类从一个基类派生的继承关系。派生类从一个基类派生的继承关系。多继承:多继承:派生类从多个基类派生的继承关系。派生类从多个基类派生的继承关系。人人学生学生老师老师大学生大学生研究生研究生硕士生硕士生博士生博士生专科生专科生本科生本科生在职研究生在职研究生95.1 继承与派生的概念继承与派生的概念q例:例:q1、定义一个学生类、定义一个学生类Student,包括学生和姓,包括学生和姓名,以及显示信息的函数。名,以及显示信息的函数。q2、定义一个大学生类、定义一个大学生类CollegeStudent,包,包括学生、姓名和专业,以及显示信息的函数。括学生、姓名和
5、专业,以及显示信息的函数。105.1 继承与派生的概念继承与派生的概念class Student public: void display() coutnum; coutname; private: int num; string name;class CollegeStudent public: void display() coutnum; coutname; coutspeciality; private: int num; string name; string speciality;能否在定义能否在定义CollegeStudent时利用时利用Student,而不用重新而不用重新定义已
6、有的成员?定义已有的成员?115.2 派生类的声明方式派生类的声明方式q声明派生类的一般形式为:声明派生类的一般形式为:class 派生类名派生类名 : 继承方式继承方式 基类名基类名 派生类新增成员;派生类新增成员; q继承方式:继承方式:public、private和和protected,默认为默认为private。125.2 派生类的声明方式派生类的声明方式class CollegeStudent:public Student public:void display1()coutnumname; void display( ) coutnumname; private:int num;
7、string name;class CollegeStudent:private Student public:void display( ) coutspeciality; private:string speciality;165.4 派生类成员的访问属性派生类成员的访问属性(一)公有继承(一)公有继承public 成员成员protected 成员成员private 成员成员public 成员成员protected 成员成员private 成员成员基类基类派生类派生类不可访问不可访问17class Student public:void display( ) coutnumname; pr
8、ivate:int num; string name;class CollegeStudent:public Student public:void display1( ) coutnumname speciality; private:string speciality;num和和name在派在派生类中不可访问。生类中不可访问。18class Student ;class CollegeStudent:public Student public: void display1( ) coutspeciality; private:string speciality;void main()Col
9、legeStudent s;s.display();s.display1();return 0;195.4 派生类成员的访问属性派生类成员的访问属性(二)私有继承(二)私有继承public 成员成员protected 成员成员private 成员成员public 成员成员protected 成员成员private 成员成员基类基类派生类派生类不可访问不可访问private 成员成员private 成员成员20class Student public: void display() coutnumname; private: int num; string name;class CollegeS
10、tudent:private Student public: void display1( ) coutspeciality; private: string speciality;void main()CollegeStudent s;s.display();s.display1();s. speciality=“Computer”;return 0; 21class Student public: void display() coutnumname; private: int num; string name;class CollegeStudent:private Student pu
11、blic: void display1( ) display(); coutspeciality; private: string speciality;void main()CollegeStudent s;s.display1();return 0; 225.4 派生类成员的访问属性派生类成员的访问属性(三)保护继承(三)保护继承public 成员成员protected 成员成员private 成员成员public 成员成员protected 成员成员private 成员成员基类基类派生类派生类不可访问不可访问protected 成员成员protected 成员成员235.4 派生类成员的
12、访问属性派生类成员的访问属性(三)保护继承(三)保护继承q 由由protected声明的成员称为声明的成员称为受保护成员受保护成员,简称简称保护成员保护成员。q 在同一类中保护成员和私有成员一样,只在同一类中保护成员和私有成员一样,只能被类内部的成员函数访问,而不能被类能被类内部的成员函数访问,而不能被类外访问。外访问。q 保护成员可以被保护成员可以被派生类的成员函数派生类的成员函数访问。访问。24class Student private: int num; protected:string name; ;class CollegeStudent:protected Student publ
13、ic: void display ( ) coutnum; coutname; ;void main()CollegeStudent s;s.display ();s. name=“Zhang”;return 0; 25总结总结q类的成员的访问属性类的成员的访问属性qPublic:可以再类内通过成员函数来访问,:可以再类内通过成员函数来访问,也可以在类外通过对象来访问。也可以在类外通过对象来访问。qPrivate:只能再类内通过成员函数来访问:只能再类内通过成员函数来访问qProtected:只能再类内通过成员函数来:只能再类内通过成员函数来访问访问26总结总结q派生后成员访问属性在派生类中的
14、变化:派生后成员访问属性在派生类中的变化:q原来在基类中的访问属性原来在基类中的访问属性与与上继承时的继承方上继承时的继承方式,即为基类成员在派生类中新的访问属性。式,即为基类成员在派生类中新的访问属性。Class 基类基类 public:成员:成员j1 protected:成员:成员j2 private:成员:成员j3;Class 派生类:派生类: 基类基类 public:成员:成员p1 protected:成员:成员p2 private:成员:成员p3;public , j1 , j227总结总结q派生后成员访问属性在派生类中的变化:派生后成员访问属性在派生类中的变化:q原来在基类中的访问
15、属性原来在基类中的访问属性与与上继承时的继承方上继承时的继承方式,即为基类成员在派生类中新的访问属性。式,即为基类成员在派生类中新的访问属性。Class 基类基类 public:成员:成员j1 protected:成员:成员j2 private:成员:成员j3;Class 派生类:派生类: 基类基类 public:成员:成员p1 protected:成员:成员p2 private:成员:成员p3;Protected , j2 , j128总结总结q派生后成员访问属性在派生类中的变化:派生后成员访问属性在派生类中的变化:q原来在基类中的访问属性原来在基类中的访问属性与与上继承时的继承方上继承时的
16、继承方式,即为基类成员在派生类中新的访问属性。式,即为基类成员在派生类中新的访问属性。Class 基类基类 public:成员:成员j1 protected:成员:成员j2 private:成员:成员j3;Class 派生类:派生类: 基类基类 public:成员:成员p1 protected:成员:成员p2 private:成员:成员p3;private , j2 , j129练习练习class A /class A /基类基类public: int i;public: int i; protected: void f2(); int j; protected: void f2(); int
17、 j; private: int k; private: int k; ;class B: public A /publicclass B: public A /public方式方式public: void f3( );public: void f3( ); protected: void f4(); protected: void f4(); private: int m; private: int m; ;class C: protected B /protectedclass C: protected B /protected方式方式public: void f5();public: v
18、oid f5(); private: int n; private: int n; ;30练习练习q例课后第一、二、三、四、五题例课后第一、二、三、四、五题315.5 派生类的构造函数和析构函数派生类的构造函数和析构函数(一)简单派生类的构造函数(一)简单派生类的构造函数q 简单派生类只有一个基类,数据成员中不简单派生类只有一个基类,数据成员中不包括基类的对象。包括基类的对象。q 简单派生类构造函数的定义形式为:简单派生类构造函数的定义形式为:派生类构造函数(总参数列表)派生类构造函数(总参数列表): 基类构造函基类构造函数(数(参数列表参数列表)派生类中新增数据成员初始化;派生类中新增数据成
19、员初始化;32class Stu public:Stu(int n,string na) num=n; name=na; protected:int num; string name;class ColStu:public Stu public:ColStu(int n,string na,string s):Stu(n,na)speciality=s; void display()coutnumnamespeciality; private:string speciality;335.5 派生类的构造函数和析构函数派生类的构造函数和析构函数(一)简单派生类的构造函数(一)简单派生类的构造函数
20、q 构造函数的执行顺序:构造函数的执行顺序:q 基类的构造函数。基类的构造函数。q 派生类的构造函数。派生类的构造函数。q 析构函数的执行顺序:析构函数的执行顺序:q 派生类的析构函数。派生类的析构函数。q 基类的析构函数。基类的析构函数。34简单派生类的构造函数简单派生类的构造函数派生类构造函数(总参数列表)派生类构造函数(总参数列表): 基类构造函基类构造函数(数(参数列表参数列表)派生类中新增数据成员初始化;派生类中新增数据成员初始化;q构造函数的执行顺序:构造函数的执行顺序:q基类的构造函数。基类的构造函数。q派生类的构造函数。派生类的构造函数。q析构函数的执行顺序:析构函数的执行顺序
21、:q派生类的析构函数。派生类的析构函数。1.基类的析构函数。基类的析构函数。355.5 派生类的构造函数和析构函数派生类的构造函数和析构函数(二)有(二)有子对象子对象的派生类的构造函数的派生类的构造函数q 有子对象的派生类是指类的成员包括类的有子对象的派生类是指类的成员包括类的对象。对象。class Stu protected:int num; string name;class ColStu:public Stu public:void display( );private:string speciality; Stu s;365.5 派生类的构造函数和析构函数派生类的构造函数和析构函数(
22、二)有子对象的派生类的构造函数(二)有子对象的派生类的构造函数q 有子对象的派生类构造函数的一般形式为:有子对象的派生类构造函数的一般形式为:派生类构造函数(总参数列表)派生类构造函数(总参数列表): 基类构造函基类构造函数(参数列表)数(参数列表),子对象名(参数列表)子对象名(参数列表)派生类中新增数据成员初始化;派生类中新增数据成员初始化;375.5 派生类的构造函数和析构函数派生类的构造函数和析构函数(二)有子对象的派生类的构造函数(二)有子对象的派生类的构造函数q 构造函数的执行顺序:构造函数的执行顺序:q 基类的构造函数。基类的构造函数。q 子对象的构造函数。子对象的构造函数。1.
23、 派生类的构造函数。派生类的构造函数。385.5 派生类的构造函数和析构函数派生类的构造函数和析构函数class B public: B(int bb) b=bb; private: int b;class C:public B public: C(int cc) c=cc; private: B memB; int c;找问题找问题 Cint b; /基类数据成员基类数据成员 int c; /新增数据成员新增数据成员 B menB; /内嵌内嵌子对象子对象 如何初如何初始化?始化?39class B private: int b; public: B(int bb) b=bb; coutB:
24、bendl; ;class C:public B public:C(int aa,int bb,int cc): B(aa) , memB(bb) c=cc; coutC:cendl;private:B memB;int c;void main() C c(1,2,3); 405.5 派生类的构造函数和析构函数派生类的构造函数和析构函数(三)多层派生时的构造函数(三)多层派生时的构造函数q 一个类不仅可以派生出一个派生类,派生一个类不仅可以派生出一个派生类,派生类还可以继续派生,形成派生的层次结构。类还可以继续派生,形成派生的层次结构。q 多层继承时的访问属性多层继承时的访问属性q 多层派生时
25、的构造函数不用列出每一层派多层派生时的构造函数不用列出每一层派生类的构造函数,只须写出其生类的构造函数,只须写出其上一层派生上一层派生类(即类(即直接基类直接基类)的构造函数)的构造函数即可。即可。41class Apublic:A(int aa) a=aa; private:int a;class B:public A public:B(int aa,int bb):A(aa) b=bb; private: int b;class C:public B public:C(int aa,int bb,int cc):B(aa,bb) c=cc; private:int c;425.5 派生类的
26、构造函数和析构函数派生类的构造函数和析构函数q 什么时候在声明派生类的构造函数时需要什么时候在声明派生类的构造函数时需要对基类或对象成员进行初始化?对基类或对象成员进行初始化?q 如果派生类的基类或内嵌子对象所属的类如果派生类的基类或内嵌子对象所属的类中没有提供默认构造函数时,派生类需要中没有提供默认构造函数时,派生类需要声明构造函数声明构造函数,对继承的基类成员和内嵌,对继承的基类成员和内嵌子对象的成员进行初始化。子对象的成员进行初始化。435.5 派生类的构造函数和析构函数派生类的构造函数和析构函数q 构造函数的执行顺序:构造函数的执行顺序:q 基类的构造函数。基类的构造函数。q 子对象的
27、构造函数。子对象的构造函数。q 派生类的构造函数。派生类的构造函数。q 析构函数的执行顺序:析构函数的执行顺序:q 派生类的析构函数。派生类的析构函数。q 子对象的析构函数。子对象的析构函数。1. 基类的析构函数。基类的析构函数。44class Apublic: A(int aa) a=aa; coutA:aendl; A( ) coutAendl; private: int a;class Bpublic: B(int bb) b=bb; coutB:bendl; B( ) coutBendl; private: int b;class C: public Bpublic: C(int aa
28、,int bb,int cc):B(bb),a(aa) c=cc; coutC:cendl; C( ) coutCendl; private: A a; int c;void main() C c(1,2,3); 455.6 多重继承多重继承q 多重继承:一个派生类同时继承多个基类。多重继承:一个派生类同时继承多个基类。465.6 多重继承多重继承(一)声明多重继承的方法(一)声明多重继承的方法class 派生类名派生类名 : 继承方式继承方式基类名基类名1 ,继承继承方式方式基类名基类名2, .,继承方式继承方式基类名基类名n 派生类成员声明;派生类成员声明;47class Apublic:
29、displayA couta; int a;class B public:displayB coutb; int b;class C:public A,public B public:displayC coutc; private:int c;48Cint a;int b;int c;void DisplayA( );void DisplayB( );void DisplayC( );Aint a;void DisplayA( );Bint b;void DisplayB( );5.6 多重继承多重继承495.6 多重继承多重继承(二)多重继承派生类的构造函数(二)多重继承派生类的构造函数q
30、多继承下的构造函数和析构函数与单继承多继承下的构造函数和析构函数与单继承下的构造函数和析构函数是相似的,派生下的构造函数和析构函数是相似的,派生类的构造函数需要对类的构造函数需要对基类成员、内嵌子对基类成员、内嵌子对象象和和新增成员新增成员进行初始化。进行初始化。50class A public: A(int aa=0) a=aa; private: int a;class B public: B(int bb=0) b=bb; private: int b;class C:public A,public B public: private: A a; B b; int c;构造函数构造函数C
31、(int a1,int a2,int b1,int b2,int cc):A(a1),a(a2),B(b1),b(b2) c=cc; 51class B1 public: B1(int i) coutB1 iendl; ;class B2 public: B2(int j) coutB2 jendl; ;class B3 public: B3( ) coutB3 *endl; ;class C:public B2,public B1,public B3public:C(int a,int b,int c,int d):B1(a),memB2(d),memB1(c),B2(b) private:
32、 B1 memB1; B2 memB2; B3 memB3;void main() C obj(1,2,3,4); 52q(二)多重继承派生类的构造函数(二)多重继承派生类的构造函数q格式:格式:q派生类构造函数名(总参数列表):基类派生类构造函数名(总参数列表):基类1构造构造函数(参数列表),基类函数(参数列表),基类2构造函数(参数列表),构造函数(参数列表),子对象子对象 1 (参数列表),子对象(参数列表),子对象 2 (参数列表)(参数列表)qq派生类中新增数据成员初始化语句派生类中新增数据成员初始化语句qq注意:注意:调用基类、子对象的构造函数的顺序是按调用基类、子对象的构造函数
33、的顺序是按照照声明派生类时基类、子对象出现的顺序声明派生类时基类、子对象出现的顺序来调用来调用的。的。535.6 多重继承多重继承(三)多重继承引起的二义性问题(三)多重继承引起的二义性问题class A public: void display() coutAendl; ;class B public: void display() coutBendl; ;class C: public A,public B ;void main() C c; c.display(); 找问题找问题545.6 多重继承多重继承(三)多重继承引起的二义性问题(三)多重继承引起的二义性问题Avoid displ
34、ay();Bvoid display();Cvoid A:display();void B:display();C c;c.display();C c;c.A:display(); c.B:display();55class A public: void display() coutAendl; ;class B public: void display() coutBendl; ;class C: public A,public B public: void display() coutCendl; ;void main() C c; c.display(); 5.6 多重继承多重继承56复
35、习复习q5.5 派生类的构造函数和析构函数派生类的构造函数和析构函数q(一)简单派生类的构造函数(一)简单派生类的构造函数q(二)有(二)有子对象子对象的派生类的构造函数的派生类的构造函数q(三)多层派生时的构造函数(三)多层派生时的构造函数q5.6 多重继承多重继承q(一)声明多重继承的方法(一)声明多重继承的方法q(二)多重继承派生类的构造函数(二)多重继承派生类的构造函数q(三)多重继承引起的二义性问题(三)多重继承引起的二义性问题57简单派生类的构造函数简单派生类的构造函数派生类构造函数(总参数列表)派生类构造函数(总参数列表): 基类构造函基类构造函数(数(参数列表参数列表)派生类中
36、新增数据成员初始化;派生类中新增数据成员初始化;q构造函数的执行顺序:构造函数的执行顺序:q基类的构造函数。基类的构造函数。q派生类的构造函数。派生类的构造函数。q析构函数的执行顺序:析构函数的执行顺序:q派生类的析构函数。派生类的析构函数。1.基类的析构函数。基类的析构函数。58class Stu public:Stu(int n,string na) num=n; name=na; protected:int num; string name;class ColStu:public Stu public:ColStu(int n,string na,string s):Stu(n,na)s
37、peciality=s; void display()coutnumnamespeciality; private:string speciality;59(二)有子对象的派生类的构造函数(二)有子对象的派生类的构造函数派生类构造函数(总参数列表)派生类构造函数(总参数列表): 基类构造函基类构造函数(参数列表)数(参数列表),子对象名(参数列表)子对象名(参数列表)派生类中新增数据成员初始化;派生类中新增数据成员初始化;q 构造函数的执行顺序:构造函数的执行顺序:q 基类的构造函数。基类的构造函数。q 子对象的构造函数。子对象的构造函数。1. 派生类的构造函数。派生类的构造函数。60clas
38、s B private: int b; public: B(int bb) b=bb; coutB:bendl; ;class C:public B public:C(int aa,int bb,int cc): B(aa) , memB(bb) c=cc; coutC:cendl;private:B memB;int c;void main() C c(1,2,3); 61(三)多层派生时的构造函数(三)多层派生时的构造函数q多层派生时的构造函数不用列出每一层派多层派生时的构造函数不用列出每一层派生类的构造函数,只须写出其生类的构造函数,只须写出其上一层派生上一层派生类(即类(即直接基类直接
39、基类)的构造函数)的构造函数即可。即可。62class Apublic:A(int aa) a=aa; private:int a;class B:public A public:B(int aa,int bb):A(aa) b=bb; private: int b;class C:public B public:C(int aa,int bb,int cc):B(aa,bb) c=cc; private:int c;635.6 多重继承多重继承(一)声明多重继承的方法(一)声明多重继承的方法class 派生类名派生类名 : 继承方式继承方式基类名基类名1 ,继承继承方式方式基类名基类名2,
40、.,继承方式继承方式基类名基类名n 派生类成员声明;派生类成员声明;64class Apublic:displayA couta; int a;class B public:displayB coutb; int b;class C:public A,public B public:displayC coutc; private:int c;65q(二)多重继承派生类的构造函数(二)多重继承派生类的构造函数q格式:格式:q派生类构造函数名(总参数列表):基类派生类构造函数名(总参数列表):基类1构造构造函数(参数列表),基类函数(参数列表),基类2构造函数(参数列表),构造函数(参数列表),子
41、对象子对象 1 (参数列表),子对象(参数列表),子对象 2 (参数列表)(参数列表)qq派生类中新增数据成员初始化语句派生类中新增数据成员初始化语句qq注意:注意:调用基类、子对象的构造函数的顺序是按调用基类、子对象的构造函数的顺序是按照照声明派生类时基类、子对象出现的顺序声明派生类时基类、子对象出现的顺序来调用来调用的。的。66class B1 public: B1(int i) coutB1 iendl; ;class B2 public: B2(int j) coutB2 jendl; ;class B3 public: B3( ) coutB3 *endl; ;class C:pub
42、lic B2,public B1,public B3public:C(int a,int b,int c,int d):B1(a),memB2(d),memB1(c),B2(b) private: B1 memB1; B2 memB2; B3 memB3;void main() C obj(1,2,3,4); 675.6 多重继承多重继承q(三)多重继承引起的二义性问题(三)多重继承引起的二义性问题q1、两个基类有同名成员、两个基类有同名成员q2、两个基类和派生类有同名成员、两个基类和派生类有同名成员q3、两个直接基类都继承于同一基类、两个直接基类都继承于同一基类685.6 多重继承多重继承(
43、三)多重继承引起的二义性问题(三)多重继承引起的二义性问题Avoid display();Bvoid display();Cvoid A:display();void B:display();C c;c.display();C c;c.A:display(); c.B:display();695.6 多重继承多重继承(三)多重继承引起的二义性问题(三)多重继承引起的二义性问题q 派生类新增加的同名成员将派生类新增加的同名成员将覆盖覆盖基类中的基类中的同名成员。同名成员。70class A public: void display() coutaendl; ;class B:public A ;class C:public A ;class D:public B,public C public: void display() coutaendl; ;void main() D d; d.display(); /D类的类的display() c.B:di
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个体企业采购报销制度
- 设计与采购管理制度
- 美团招商采购岗轮岗制度
- 采购索证索票及台账制度
- 设备采购例会制度
- 商超采购流程与制度
- 采购管理制度工作流程
- 新增中药饮片采购制度
- 企业采购制度管理制度
- 某企业采购制度及流程
- 英语四级单词表4500
- 全过程工程咨询投标方案(技术方案)
- 2025年《农业经济学》考试题库及答案
- 眼镜店验光设备计量管理制度
- 《南翔小笼包》课件
- 观察了解和处置患者用药与治疗反应的流程
- 《我国职业本科教育人才培养目标研究》
- 首都经济贸易大学《统计学》2022-2023学年第一学期期末试卷
- 肝功能异常的评估及其临床诊疗思路课件
- DB11T 3034-2023 建筑消防设施检测服务规范
- xxx高校5G随行专网融合建设方案
评论
0/150
提交评论