




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、整理课件第第8 8章章 继承和派生继承和派生 在在C+C+中可重用性是通过继承中可重用性是通过继承(inheritance)(inheritance)这一这一机制来实现的。继承是机制来实现的。继承是C+C+的一个重要组成部分。的一个重要组成部分。整理课件8.1 8.1 继承和派生的概念继承和派生的概念 在在C+C+中,所谓中,所谓“继承继承”就是在一个已存在的类的基础上建就是在一个已存在的类的基础上建立一个新的类。一个新类从已有的类那里获得其已有特性,立一个新的类。一个新类从已有的类那里获得其已有特性,这种现象称为类的继承。通过继承,一个新建子类从已有的这种现象称为类的继承。通过继承,一个新建
2、子类从已有的父类那里获得父类的特性。从另一角度说,从已有的类父类那里获得父类的特性。从另一角度说,从已有的类( (父父类类) )产生一个新的子类,称为类的派生。类的继承是用已有产生一个新的子类,称为类的派生。类的继承是用已有的类来建立专用类的编程技术。的类来建立专用类的编程技术。 交通工具交通工具飞机飞机滑翔机滑翔机直升飞机直升飞机喷气式飞机喷气式飞机整理课件交通工具交通工具飞机飞机滑翔机滑翔机直升飞机直升飞机喷气式飞机喷气式飞机已存在的类已存在的类( (例如例如“交通工具交通工具”) )称为称为“基类基类”或或“父类父类”。新建立的类新建立的类( (例如例如“飞机飞机”) )称为称为“派生类
3、派生类”或或“子类子类”。一个基类可以派生出多个派生类,每一个派生类又可以作一个基类可以派生出多个派生类,每一个派生类又可以作为基类再派生出新的派生类,因此基类和派生类是相对为基类再派生出新的派生类,因此基类和派生类是相对而言的。而言的。2.基类与派生类基类与派生类 整理课件请注意图中箭头的方向,在本书中约定,箭头表示请注意图中箭头的方向,在本书中约定,箭头表示继承的方向,从派生类指向基类。继承的方向,从派生类指向基类。整理课件.2继承与派生的作用继承与派生的作用 1.1.避免公用代码的重复开发,在减少代码和数据冗余的同时,避免公用代码的重复开发,在减少代码和数据冗余的同时,节
4、省程序开发的时间,提高程序开发的效率和质量。节省程序开发的时间,提高程序开发的效率和质量。2.2.通过增强代码一致性来减少模块间的接口和界面。通过增强代码一致性来减少模块间的接口和界面。3.3.通过层次关系来组织对象,使得高层类作为低层类的抽象,通过层次关系来组织对象,使得高层类作为低层类的抽象,有利于程序员掌握对象的共性有利于程序员掌握对象的共性,在此基础上,就能更快地掌握低层在此基础上,就能更快地掌握低层类中的个性特征,给编程与代码重用带来方便。类中的个性特征,给编程与代码重用带来方便。整理课件.3派生类的声明派生类的声明 声明一个派生类的一般格式为:声明一个派生类的一般格
5、式为:class class 派生类名派生类名 : : 派生存取说明符(可省)派生存取说明符(可省) 基类名基类名 /派生类新增的数据成员和成员函数派生类新增的数据成员和成员函数; 派生类名派生类名”是要从基类派生出的新类的名字,是要从基类派生出的新类的名字,“基类名基类名”是一个是一个已经定义好的基类的名字,已经定义好的基类的名字,“派生存取说明符派生存取说明符”可以是关键字可以是关键字publicpublic或或protectedprotected或或privateprivate,派生存取说明符的作用会在后面,派生存取说明符的作用会在后面详细介绍,详细介绍,“派生存取说明符派生存取说明符”
6、可以省略,默认为可以省略,默认为privateprivate,即私有派生。即私有派生。 整理课件/定义一个基类(定义一个基类(StudentStudent类)类)class Studentclass Student public:public: char name10; / char name10; /姓名姓名 int age;int age; / /年龄年龄 char sex;char sex; / /性别性别 char classname20;char classname20;/班级名称班级名称;/定义一个派生类(定义一个派生类(GraduateStudentGraduateStudent
7、类)类)class GraduateStudent : public Studentclass GraduateStudent : public Student public:public:char Advisorname10; /char Advisorname10; /导师导师int qualifiergrade;int qualifiergrade; / /资格考试分资格考试分; ; 整理课件8.2 8.2 派生类成员的访问控制派生类成员的访问控制 从一个基类派生出一个子类时,可以通过指定派生时的存取从一个基类派生出一个子类时,可以通过指定派生时的存取说明符来实现对派生类成员的访问控制。
8、说明符来实现对派生类成员的访问控制。 既然派生类中包含基类成员和派生类自己增加的成员,就既然派生类中包含基类成员和派生类自己增加的成员,就产生了这两部分成员的关系和访问属性的问题。在建立派产生了这两部分成员的关系和访问属性的问题。在建立派生类的时候,并不是简单地把基类的私有成员直接作为派生类的时候,并不是简单地把基类的私有成员直接作为派生类的私有成员,把基类的公用成员直接作为派生类的公生类的私有成员,把基类的公用成员直接作为派生类的公用成员。实际上,对基类成员和派生类自己增加的成员是用成员。实际上,对基类成员和派生类自己增加的成员是按不同的原则处理的。按不同的原则处理的。整理课件8.2.2 p
9、rivate8.2.2 private、protectedprotected与与publicpublic类成员类成员 1.private1.private类成员类成员 一个类中的私有(一个类中的私有(privateprivate)成员(包括数据成员和成员函数)成员(包括数据成员和成员函数)只能被它们所在类的成员函数和友元函数访问,在只能被它们所在类的成员函数和友元函数访问,在C+C+中类成员中类成员存取说明符缺省的情况下的存取特征都是私有的(存取说明符缺省的情况下的存取特征都是私有的(privateprivate)。)。 整理课件【例【例8.18.1】 类私有成员的定义和访问类私有成员的定义和
10、访问 #include #include class Personclass Person /Person/Person类的三个私有成员类的三个私有成员 char name10; /char name10; /姓名姓名private:private: int age; int age; / /年龄年龄 char sex;char sex; / /性别性别;main()main() Person P1;Person P1; P1.age=20; P1.age=20;/非法非法 coutP1.nameendl;coutP1.nameendl; / /非法非法 return 0;return 0;
11、整理课件 一个类中的公有一个类中的公有(public)(public)成员(包括数据成员和成员函数)成员(包括数据成员和成员函数)可以被程序中任何代码(包括函数)访问,一般情况下,应尽可以被程序中任何代码(包括函数)访问,一般情况下,应尽量将类的数据成员声明为私有(量将类的数据成员声明为私有(privateprivate),然后为需要被类外),然后为需要被类外部访问的数据成员提供公有的成员函数,实现对私有成员的设部访问的数据成员提供公有的成员函数,实现对私有成员的设置和访问,这种结构能够向类的客户很好的隐藏实现方法,在置和访问,这种结构能够向类的客户很好的隐藏实现方法,在有效减少错误的同时,可
12、以增强程序的可修改性。有效减少错误的同时,可以增强程序的可修改性。 整理课件3.tected类成员类成员 使用使用protectedprotected声明的称为保护成员。任何一个类的保护成员声明的称为保护成员。任何一个类的保护成员仅可以被其自己和派生类的所有非静态成员函数和友元函数直仅可以被其自己和派生类的所有非静态成员函数和友元函数直接访问,也就是说其他的外部函数是不能访问它的。因此,对接访问,也就是说其他的外部函数是不能访问它的。因此,对于那些既要对外界隐藏,又要能被派生类访问的成员,可以将于那些既要对外界隐藏,又要能被派生类访问的成员,可以将它们声明为保护成员
13、。它们声明为保护成员。 如果基类声明了私有成员,那么任何派生类都是不能访问它如果基类声明了私有成员,那么任何派生类都是不能访问它们的,若希望在派生类中能访问它们,应当把它们声明为保们的,若希望在派生类中能访问它们,应当把它们声明为保护成员。如果在一个类中声明了保护成员,就意味着该类可护成员。如果在一个类中声明了保护成员,就意味着该类可能要用作基类,在它的派生类中会访问这些成员。能要用作基类,在它的派生类中会访问这些成员。整理课件 1.1.私有(私有(privateprivate)派生)派生 在声明一个派生类时将派生方式指定为在声明一个派生类时将派生方式指定为privateprivate的,称为
14、私有派生,的,称为私有派生,用私有派生方式建立的派生类称为私有派生类用私有派生方式建立的派生类称为私有派生类 ,其基类称为私有,其基类称为私有基类。基类。由私有派生得到的派生类,它从基类继承的成员都将变为私有由私有派生得到的派生类,它从基类继承的成员都将变为私有成员,也就是说通过私有派生,派生类从基类继承来的公有成成员,也就是说通过私有派生,派生类从基类继承来的公有成员和保护成员都将变成派生类的私有成员,这些成员将只能被员和保护成员都将变成派生类的私有成员,这些成员将只能被派生类的成员函数和友元函数访问。需要重点说明的是,基类派生类的成员函数和友元函数访问。需要重点说明的是,基类的私有成员经过
15、私有派生后继续保持其基类的私有成员身份,的私有成员经过私有派生后继续保持其基类的私有成员身份,无法被派生类访问。无法被派生类访问。 整理课件2.2.保护(保护(protectedprotected)派生)派生由保护派生得到的派生类,它从基类继承的公有和保护成员都由保护派生得到的派生类,它从基类继承的公有和保护成员都将变为派生类的保护成员。基类的私有成员经过保护派生后继将变为派生类的保护成员。基类的私有成员经过保护派生后继续保持其基类的私有成员身份,依然无法被派生类访问。续保持其基类的私有成员身份,依然无法被派生类访问。 保护派生的特点是保护派生的特点是: : 基类的公用成员和保护成员在派生基类
16、的公用成员和保护成员在派生类中都成了保护成员,其私有成员仍为基类私有。也就是把类中都成了保护成员,其私有成员仍为基类私有。也就是把基类原有的公用成员也保护起来,不让类外任意访问。基类原有的公用成员也保护起来,不让类外任意访问。整理课件3.3.公有(公有(publicpublic)派生)派生 由公有派生得到的派生类,它从基类继承的成员都将维持原由公有派生得到的派生类,它从基类继承的成员都将维持原有访问控制特征,即通过公有派生后,派生类从基类继承的有访问控制特征,即通过公有派生后,派生类从基类继承的公有成员在派生类中仍然是公有成员,保护成员仍然是保护公有成员在派生类中仍然是公有成员,保护成员仍然是
17、保护成员,而基类的私有成员经过公有派生后继续保持其基类的成员,而基类的私有成员经过公有派生后继续保持其基类的私有成员身份,依然无法被派生类访问。私有成员身份,依然无法被派生类访问。 整理课件 1.1.派生类中新增成员的访问控制遵循类成员访问控制的规则。派生类中新增成员的访问控制遵循类成员访问控制的规则。 存取说明符存取说明符访问控制规则访问控制规则PrivatePrivate此派生类的非静态成员函数和友元函数可以直接访问此派生类的非静态成员函数和友元函数可以直接访问ProtectedProtected此派生类和其子类非静态成员函数和友元函数可以访问此派生类和其子类非静态成员函数和友元函数可以访
18、问PublicPublic任何非静态成员函数,友元函数和非成员函数都可以直接访任何非静态成员函数,友元函数和非成员函数都可以直接访问问整理课件2. 2. 类成员在派生类中的访问控制规则类成员在派生类中的访问控制规则 基类成员的存基类成员的存取说明符取说明符派生方式派生方式publicpublic派生派生protectedprotected派生派生privateprivate派生派生PrivatePrivate在派生类中被隐藏在派生类中被隐藏在派生类中被隐藏在派生类中被隐藏在派生类中被隐藏在派生类中被隐藏ProtectedProtected派生类中为派生类中为protectedprotected
19、派生类中为派生类中为protectedprotected派生类中为派生类中为privateprivatePublicPublic派生类中为派生类中为publicpublic派生类中为派生类中为protectedprotected派生类中为派生类中为privateprivate注意:不管是何种派生,基类的注意:不管是何种派生,基类的privateprivate成员永远都不成员永远都不能被其派生类直接访问,但可以通过基类的能被其派生类直接访问,但可以通过基类的publicpublic和和protectedprotected成员函数访问。成员函数访问。 整理课件8.3 8.3 派生类的构造函数和析构
20、函数派生类的构造函数和析构函数类的构造函数是类的一种特殊的成员函数,它的作用主要类的构造函数是类的一种特殊的成员函数,它的作用主要是为对象分配内存、进行初始化;而析构函数它的作用与是为对象分配内存、进行初始化;而析构函数它的作用与构造函数相反。构造函数相反。 派生类的构造函数声明格式如下派生类的构造函数声明格式如下 :派生类的构造函数名称(参数表)派生类的构造函数名称(参数表): : 基类的构造函数名(参数表)基类的构造函数名(参数表) /派生类构造函数体派生类构造函数体 整理课件class Pointclass Point int x,y; int x,y;public:public:Poi
21、nt(int a,int b)Point(int a,int b)/基类的构造函数基类的构造函数 x=a;x=a;y=b;y=b;cout”Constructing Point class n”;cout”Constructing Point class n”; Point()Point()/基类的析构函数基类的析构函数 cout”Destructing Point class n”;cout”Destructing Point class n”; ;class Circle :public Pointclass Circle :public Point double radius;doubl
22、e radius;public : public : Circle (double r,int a,int b):Point(a,b)/Circle (double r,int a,int b):Point(a,b)/派生类的构造函数派生类的构造函数 radius =r;radius =r;cout”Constructing Circle class n”;cout”Constructing Circle class n”; Circle () Circle ()/派生类的析构函数派生类的析构函数 cout”Destructing Circle class n”;cout”Destructin
23、g Circle class n”; ;整理课件派生类中含有对象成员时,其构造函数的声明格式如下:派生类中含有对象成员时,其构造函数的声明格式如下: 派生类的构造函数名称(参数表)派生类的构造函数名称(参数表): : 基类的构造函数名(参数表)基类的构造函数名(参数表), ,对象成员名对象成员名1 1(参数表)(参数表),对象成员名对象成员名N N(参数表)(参数表) /派生类构造函数体派生类构造函数体 class Circle2 :public Pointdouble radius;Point P1;public : Circle2 (double r,int a,int b):Point(
24、a,b),P1(a,b)/派生类的构造函数,定义时派生类的构造函数,定义时/指定了基类的构造函数和对象成员指定了基类的构造函数和对象成员P1的构造函数的构造函数radius =r;cout”Constructing Circle2 class n”; Circle2 ()/派生类的析构函数派生类的析构函数cout”Destructing Circle2 class n”; 整理课件 1. 1. 基类具有显式的构造函数时基类具有显式的构造函数时(1 1)基类具有不带参数的构造函数)基类具有不带参数的构造函数派生类既可以自己不定义构造函数,也可以根据需要定义自己派生类既可以自己不定义构造函数,也可
25、以根据需要定义自己的构造函数,构造函数可以带参数也可以省略,在派生类中定的构造函数,构造函数可以带参数也可以省略,在派生类中定义构造函数时还可省略义构造函数时还可省略“:基类构造函数名(参数表):基类构造函数名(参数表)”。 (2 2)基类仅有带参数的构造函数)基类仅有带参数的构造函数 派生类必须显式的定义其构造函数,并在声明时指定其基类的某派生类必须显式的定义其构造函数,并在声明时指定其基类的某一构造函数和参数表,把参数传递给基类构造函数。一构造函数和参数表,把参数传递给基类构造函数。 整理课件2. 2. 基类具有隐式的构造函数时基类具有隐式的构造函数时 当基类没有显式的定义(即隐式的定义)
26、构造函数时,派生类当基类没有显式的定义(即隐式的定义)构造函数时,派生类可以根据需要定义自己的构造函数,派生类构造函数的参数表、可以根据需要定义自己的构造函数,派生类构造函数的参数表、基类的构造函数名和参数表都可以根据需要省略。基类的构造函数名和参数表都可以根据需要省略。 整理课件1. 1. 构造函数的调用顺序构造函数的调用顺序 派生类对象创建的时候,构造函数的执行顺序为:派生类对象创建的时候,构造函数的执行顺序为:(1 1)基类的构造函数)基类的构造函数(2 2)对象成员的构造函数)对象成员的构造函数(3 3)派生类自身的构造函数)派生类自身的构造函数 2. 2. 析构函数的调用顺序与构造函
27、数的调用顺序正好相反。即析构函数的调用顺序与构造函数的调用顺序正好相反。即 (1 1)派生类自身的析构函数)派生类自身的析构函数(2 2)对象成员的构造函数)对象成员的构造函数(3 3)基类的析构函数)基类的析构函数 整理课件【例【例8.68.6】派生类】派生类Circle2Circle2的构造函数和析构函数的执行顺序的构造函数和析构函数的执行顺序/Point/Point和和Circle2Circle2类的定义类的定义main()main() Circle2 C1(0.0,1,1);Circle2 C1(0.0,1,1);cout”-program line- n”;cout”-program
28、 line- n”;return 0;return 0; 整理课件8.4 8.4 多重继承多重继承前面讨论的是单继承,即一个类是从一个基类派生而来的。前面讨论的是单继承,即一个类是从一个基类派生而来的。在在C+C+中还允许从多个基类中派生出新的子类,这种派生方法称中还允许从多个基类中派生出新的子类,这种派生方法称为多重继承(或多基派生)。这一强大的派生功能可以大大提为多重继承(或多基派生)。这一强大的派生功能可以大大提高软件重用的灵活性高软件重用的灵活性 。 声明的格式如下:声明的格式如下: class class 派生类名派生类名 : : 派生存取说明符(可省)派生存取说明符(可省)1 1
29、基类名基类名1,1, 派生存取说明符派生存取说明符N N 基类名基类名N N /派生类新增的数据成员和成员函数派生类新增的数据成员和成员函数;整理课件【例【例8.7】 多重继承的声明多重继承的声明#include class Circle1 /基类基类Circle1 protected: int r; public:void setx (int x) r=x;void draw( ) coutdrawingn;class Circle2 /基类基类Circle2 protected: int r; public:void setx (int x) r=x;void write( ) coutw
30、ritingn;class Circle: public Circle1,public Circle2 /类类Circle公有继承了公有继承了Circle1和和Circle2 public: void show() coutshowingn;void main() Circle cc;cc.draw();cc.write();cc.show();整理课件1. 1. 在多重继承中派生类成员的访问控制规则与单一继承规则相同。在多重继承中派生类成员的访问控制规则与单一继承规则相同。2. 2. 多重继承的构造函数与析构函数定义与单一继承相似,只是多重继承的构造函数与析构函数定义与单一继承相似,只是在构
31、造函数定义时在构造函数定义时N N个基类的构造函数之间用逗号分隔。个基类的构造函数之间用逗号分隔。3. 3. 多重继承虽然功能强大,但也容易造成系统的复杂性,设计多重继承虽然功能强大,但也容易造成系统的复杂性,设计时务必正确和谨慎,能用单一继承时尽量不用多重继承。时务必正确和谨慎,能用单一继承时尽量不用多重继承。4. 4. 多重继承容易产生模糊性,在引用时要注意多重继承容易产生模糊性,在引用时要注意 整理课件例如前面例例如前面例8.78.7如果按照下面来引用:如果按照下面来引用: void main()void main() Circle cc; Circle cc;cc.setx(10);
32、/ Circle1cc.setx(10); / Circle1的的setxsetx还是还是Circle2Circle2的的setxsetx? void main()void main() Circle cc; Circle cc;cc.Circle1:setx(10); /cc.Circle1:setx(10); /说明是说明是Circle1Circle1中的中的r r为为1010 整理课件8.4.3 8.4.3 虚基类虚基类 1. 1. 虚基类的概念虚基类的概念在很多情况下,程序员会定义一些类,而不想将其实例化在很多情况下,程序员会定义一些类,而不想将其实例化为任何对象,这样的类称为为任何对
33、象,这样的类称为“虚类虚类”或或“抽象类抽象类”,因为这种虚类,因为这种虚类一般都要被用作基类,所以又被称为一般都要被用作基类,所以又被称为“虚基类虚基类”或或“抽象基类抽象基类”。 2. 2. 虚基类的声明虚基类的声明class 派生类名派生类名 : virtual 派生存取说明符(可省)派生存取说明符(可省) 虚基类名虚基类名/派生类新增的数据成员和成员函数派生类新增的数据成员和成员函数;整理课件3. 3. 虚基类的初始化虚基类的初始化 虚基类初始化时,构造函数的调用顺序规则:虚基类初始化时,构造函数的调用顺序规则:(1 1)同一层派生中包含多个虚基类时,虚基类的构造函数按它们)同一层派生
34、中包含多个虚基类时,虚基类的构造函数按它们派生时声明的先后次序调用。派生时声明的先后次序调用。 (2 2)如某虚基类是由实基类派生而来,则先调用此实基类的构)如某虚基类是由实基类派生而来,则先调用此实基类的构造函数,再调用虚基类的构造函数,最后才是派生类的构造函数。造函数,再调用虚基类的构造函数,最后才是派生类的构造函数。 ( 3 3)若同一层派生中,同时存在虚基类与实基类,应先调用虚基类的)若同一层派生中,同时存在虚基类与实基类,应先调用虚基类的构造函数,再调用实基类的构造函数,最后调用派生类的构造函数。构造函数,再调用实基类的构造函数,最后调用派生类的构造函数。 整理课件4. 4. 虚基类
35、的作用虚基类的作用虚基类的作用就是为其他类提供一个合适的基类,以便虚基类的作用就是为其他类提供一个合适的基类,以便派生类可以从它那里继承和实现所需的接口。在多重继承时,派生类可以从它那里继承和实现所需的接口。在多重继承时,当派生类的多个基类有一个共同的基类时,为防止产生二义当派生类的多个基类有一个共同的基类时,为防止产生二义性问题可使用虚基类方法。性问题可使用虚基类方法。注意注意: : 虚基类并不是在声明基类时声明的,而是在声明虚基类并不是在声明基类时声明的,而是在声明派生类时,指定继承方式时声明的。因为一个基类可以派生类时,指定继承方式时声明的。因为一个基类可以在生成一个派生类时作为虚基类,
36、而在生成另一个派生在生成一个派生类时作为虚基类,而在生成另一个派生类时不作为虚基类。类时不作为虚基类。整理课件【例【例8.11】存在二义性的虚基类多重派生】存在二义性的虚基类多重派生#include class Base /基类基类protected: int b;public:Base()b =1;cout” Constructing Base class”endl;class Base1:public Base /基类基类1从从Base派派生生public:Base1()cout” Constructing Base1 class”endl;cout”Base b=”bendl;整理课件class Base2:public Base /基类基类2从从Base派生派生public:Base2()cout” Constructing Base2 class”endl;cout”Base b=”bendl;class Derived: public Base1, Base2 /从两个基类从两个基类base1和和base2多重派生出子类多重派生出子类
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025广州市房地产中介服务合同(承租方)
- 2025年关于广泛应用新版租赁合同的规定
- 毕业实习协议书
- 合同之房屋租赁合同担保
- 2025中外合资经营企业的特点【中外合资经营企业合同(汽车零部件)】
- 2025空调设备买卖合同范本
- 2025年贺州考货运上岗证试答题
- 2025苏州装饰设计合同范本
- 2025年双方签署的合同即刻产生法律效力
- 湖北省武汉市部分省级示范高中2023-2024学年高一下学期4月期中考试化学试题(解析版)
- 反兴奋剂知识试题及答案
- 公共卫生工作人员绩效考核评价细则
- 五一劳动节主题班会:树立正确劳动观念弘扬劳动精神-高中专题班会模范课件展示
- 家庭教育指导师模拟题07附有答案
- GB/T 20878-2024不锈钢牌号及化学成分
- 2024年福建省漳州市中考数学二模试卷(含解析)
- 川教版《生命生态安全》九年级下册第十课树立生态文明意识 课件
- Whose-dog-is-itPartB-省公开课一等奖新名师课比赛一等奖课件
- 2023年福建省考评员考试题
- 肿瘤预后评估的新标准和方法
- 2024-2030中国颅脑外引流系统市场现状研究分析与发展前景预测报告
评论
0/150
提交评论