




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
面
向
對
象
的
程
序
設
計2023/12/111引
言2023/12/112概
要
回
顧基于過程的程序設計基于對象的程序設計面向對象的程序設計程序的主體:函數類的生成、設計類對象的使用C++過程化語言基礎程序的主體:類2023/12/113結
論僅僅支持基于類的設計、生成和類對象的使用是不能稱為面向對象的程序設計面向對象程序設計的四大主要特點抽象封裝繼承多態基于對象的程序設計面向對象的程序設計2023/12/114
綱
要010203繼承與派生(重點)多態性與虛函數(重點)函數模板(常用)04類模板(常用)2023/12/115繼
承
與
派
生2023/12/116問
題
引
入福州大學有三類學生:本科生、碩士生、博士生是否設計成一個類student?本科生、碩士生、博士生的數據成員不盡相同是否設計三個獨立的類:bachelor、master、doctor?合理嗎?2023/12/1172023/12/118classbachelor{private:intID;Stringname;intage;Datedayofbirth;floatscore[40];public:bachelor(…);~bachelor();voidprint();voidget_name();……};classmaster{private:intID;Stringname;intage;Datedayofbirth;Stringadvisor;floatscore[15];public:master(…);~master(){};voidprint();voidget_name();……};classdoctor{private:intID;String*name;intage;Datedayofbirth;Stringadvisors[5];floatscore[10];public:doctor(…);~doctor(){};voidprint();voidget_name();……};問
題
的
分
析共同的數據屬性在3個類中各自描述一次,顯得繁瑣,重復,能夠簡化為統一描述?分析姓名、學號、年齡等數據屬性是所有學生都有的共性,本科生、碩士生和博士生是學生的細化和特化(P.118)先統一描述所有學生的共性數據以及對共性數據的處理功能;描述某一類學生時,首先說明它是學生的一種,然后再逐一描述這種學生的個性——面向對象程序設計中類的繼承與派生2023/12/1192023/12/1110classbachelor
:publicstudent{private:floatscore[40];public:bachelor(…);~bachelor();voidprint();……};classmaster
:publicstudent{private:Stringadvisor;floatscore[15];public:master(…);~master(){};voidprint();……};classdoctor
:publicstudent{private:Stringadvisors[3];floatscore[10];public:doctor(…);~doctor(){};voidprint();……};classstudent{private:public:intID;student(…);String*name;~student();intage;voidget_name();Datedayofbirth;voidget_age();……};繼
承
與
派
生類
的
繼
承派生類可以獲得基類的已有特性派生類繼承了基類的所有數據成員和成員函數類的繼承是層次結構的基類是派生類的抽象類的派生基類產生了一個和具有基類各種特性的新的子類派生類可以對成員作必要的增加和調整派生類又可以作為基類再派生出新的派生類派生類是基類的具體化繼承派生在一個已經存在的類(基類/父類)的基礎之上建立一個新的類(派生類/子類)2023/12/1111單
一
繼
承
和
多
重
繼
承單一繼承(P.119)一個派生類只能由一個基類派生而來一個子類只有一個父類圖b的情況中對于類Y1和類Y2而言仍然是單一繼承方式的派生類多重繼承(P.119)一個派生類由多個(>=2)基類派生而成一個子類有兩個或者兩個以上的父類注意區分圖C和圖d的多級繼承和多重繼承2023/12/1112繼
承
與
派
生
的
基
本
形
式classA{inti;//基類成員};classB:publicA//A派生了B//B繼承了A,B自動擁有A的成員{intj;//定義派生類的新成員};2023/12/1113派
生
類
的
聲
明一般形式(P.118)class<派生類標識符>:<派生方式><基類標識符>{<派生類新定義成員>};2023/12/1114派
生
類
實
例基類(普通學生類)classstudent{private:intID;char*name;floatscore[11];public:student(intn1,char*nm1){……}~student(){deletename;}voidprint(){…..}voidget_name(){……}……};派生類聲明(大學生類)classundergstudent
:publicstudent{private:char*major;//新增加的數據成員floatscore[40];public:……voidget_data{……}print_major(){……}//新增加的成員函數voidprint(){……}}2023/12/1115基類(普通學生類)派生類聲明(大學生類)大學生類(未考慮訪問屬性)
intID;char*name;
floatscore[40];
char*major;
print_major(){……}
voidprint(){…..}…….2023/12/1116派
生
類
的
構
成兩大部分從基類繼承來的成員聲明派生類時增加的部分每一部分都分別包括數據成員和成員函數構成方式并非基類的成員和派生類增加成員的簡單加和接收基類的全部成員(不包括構造函數和析構函數)調整從基類接收的成員(指定派生方式改變訪問屬性)聲明派生類時增加的成員根據需要增加成員定義派生類的構造函數和析構函數(不能從基類繼承而來)2023/12/1117基
類
成
員
的
接
收
和
調
整無條件地全部接收不接收析構函數和構造函數接收到的基類成員可以調整通過指定派生方式改變成員的訪問屬性可以聲明同名成員加以覆蓋2023/12/1118派
生
類
的
派
生
方
式三種派生方式publicprivateprotected不同的派生方式決定了基類成員在派生類中訪問屬性2023/12/1119派
生
類
成
員
的
訪
問
屬
性分情況處理基類的成員函數訪問基類成員
?派生類成員函數訪問派生類自己增加的成員
?基類的成員函數訪問派生類的成員
?派生類外訪問派生類的成員根據成員的訪問屬性判定能否由類外訪問該成員派生類的成員函數訪問基類的成員派生類外訪問基類的成員核心問題:如何確定基類成員在派生類中的訪問屬性基類成員聲明的訪問屬性派生類對基類的繼承方式2023/12/1120三
種
派
生
方
式
下
派
生
類
中
基
類
成
員
的
訪
問
控
制
權
限
繼承
方式基類成員公有繼承私有繼承保護繼承公有成員公有私有保護私有成員派生類成員不可訪問派生類成員不可訪問派生類成員不可訪問保護成員保護私有保護2023/12/1121公
有
繼
承基類的私有成員并沒有成為派生類的私有成員基類的私有成員僅僅只有基類的成員函數才能應用基類的私有成員是派生類的不可訪問的成員基類的私有成員只能通過基類的公有成員函數加以訪問實例:基類student派生類undergstudent(公有繼承)假設一創建一個對象freshman是一個大一新生(Bob,10009,CS,……)如何能夠正確獲取name、ID、major等信息?2023/12/1122方
案
一主函數調用freshman的公有成員函數get_data派生類中get_data如下定義:cout<<name;cout<<ID;cout<<major;原因:name和ID是基類的私有成員,在派生類中不可訪問2023/12/1123方
案
二基類中公有成員函數get_namecout<<name;基類中公有成員函數get_IDcout<<ID;派生類中公有成員函數get_majorcout<<major;主函數中分別調用freshman的get_name、get_ID和get_major完成信息的獲取公有繼承下,基類的公有成員在派生類中仍為公有,可在派生類外訪問2023/12/1124方
案
三主函數調用freshman的公有成員函數get_data派生類中get_data如下定義:get_name();//調用基類的成員函數get_ID();//調用基類的成員函數cout<<major;基類中公有成員函數get_name定義如下:cout<<name;基類中公有成員函數get_ID定義如下:cout<<ID;2023/12/1125公
有
繼
承
的
特
點
和
延
伸特點:較好地保留了基類的特征幾乎具有基類的全部功能公有繼承方式下的公有派生類是基類的子類型基類和公有派生類之間的類型轉換回顧:不同數據類型之間在一定條件下可以進行類型的轉換——賦值兼容example:整型數據可以復制給雙精度型的變量基類對象和子類(公有派生類)之間也有賦值兼容關系2023/12/1126基
類
和
子
類
間
的
類
型
轉
換派生類對象向基類對象賦值賦值時舍棄派生類自己的成員賦值后基類對象的成員并未擴充//set_major是undergstudent的公有成員函數undergstudentugS1(Bob,10009,CS,….);studentS1;S1=ugS1;//?S1.set_major(“EE”);//?ugS1.set_major(“EE”);//?不能用基類對象對子類對象賦值同一基類的不同子類對象之間不能賦值2023/12/1127派生類對象可以向基類對象的引用進行賦值或者初始化回顧:變量x的引用是變量x的別名,和變量x共享同一存儲空間studentS1;undergstudentugS1(Bob,10009,CS,….);student&S1_ref=S1;S1_ref=ugS1;//?,用子類對象ugS1對S1_ref進行賦值student&S2_ref=ugS1;/*?,定義了一個student對象的引用S2_ref,并用ugS1進行初始化*/S1_ref.set_major(“EE”);//?S1_ref和S2_ref仍然只是基類對象的引用,并不是ugS1(子類對象)的別名,S1_ref、S2_ref和ugS1只共享了ugS1中屬于基類部分的存儲空間2023/12/1128如果函數的參數是基類對象或者基類對象的引用,相應的實參可以用子類對象參數傳遞時完成自動類型轉換派生類對象的地址可以賦給指向基類對象的指針變量指向基類對象的指針變量也可以指向派生類對象指向基類對象的指針變量只能訪問派生類中的基類成員,而不能訪問派生類增加的成員studentS1;undergstudentugS1(Bob,10009,CS,….);student*S_ptr=&S1;S_ptr=&ugS1;/*?,子類對象ugS1的地址可以賦值給指向基類對象的指針變量*/S_ptr->set_major(“EE”);//*?不能訪問派生類增加的成員2023/12/1129私
有
繼
承私有基類的公有成員和保護成員相當于派生類中的私有成員派生類的成員可以訪問私有基類的公有成員和保護成員,但是派生類外不能訪問實例:情況與前述相同,唯一的區別是派生類undergstudent以私有繼承的方式由student類派生而成2023/12/1130方
案
一主函數調用freshman的公有成員函數get_data派生類中get_data如下定義:cout<<name;cout<<ID;cout<<major;原因:name和ID是基類的私有成員,公有繼承下在派生類中已不可訪問,私有繼承下依然不可行2023/12/1131方
案
二基類中公有成員函數get_namecout<<name;基類中公有成員函數get_IDcout<<ID;派生類中公有成員函數get_majorcout<<major;主函數中分別調用freshman的get_name、get_ID和get_major完成信息的獲取原因:私有繼承下,基類的公有成員等同于派生類的私有成員,無法在派生類外訪問2023/12/1132方
案
三主函數調用freshman的公有成員函數get_data派生類中get_data如下定義:get_name;//調用基類的成員函數get_ID;//調用基類的成員函數cout<<major;基類中公有成員函數get_name定義如下:cout<<name;基類中公有成員函數get_ID定義如下:cout<<ID;2023/12/1133保
護
繼
承保護成員受保護的成員不能為類外訪問,但是可以被派生類的成員函數所引用基類(普通學生類)classstudent{private:intID;char*name;floatscore[11];public:……};派生類聲明(大學生類)classundergstudent
:publicstudent{private:char*major;//新增加的數據成員floatscore[40];public:……}classstudent{protected:intID;char*name;floatscore[11];public:……};2023/12/11342023/12/1135保
護
繼
承保護基類的公有成員和保護成員相當于派生類中的保護成員派生類的成員可以訪問保護基類的公有成員和保護成員,但是派生類外不能訪問實例:情況與前述相同,但是派生類undergstudent以保護繼承的方式由student類派生而成2023/12/1136第
一
種
情
形(ID和name為私有數據)基類(普通學生類)classstudent{private:intID;char*name;floatscore[11];public:student(intn1,char*nm1){……}~student(){deletename;}voidprint(){…..}voidget_name(){……}……};派生類聲明(大學生類)classundergstudent
:protectedstudent{private:char*major;//新增加的數據成員floatscore[40];public:……voidget_data{……}print_major(){……}//新增加的成員函數voidprint(){……}}2023/12/1137方
案
一主函數調用freshman的公有成員函數get_data派生類中get_data如下定義:cout<<name;cout<<ID;cout<<major;原因:name和ID是基類的私有成員,保護繼承下在派生類中依然不可訪問2023/12/1138方
案
二基類中公有成員函數get_namecout<<name;基類中公有成員函數get_IDcout<<ID;派生類中公有成員函數get_majorcout<<major;主函數中分別調用freshman的get_name、get_ID和get_major完成信息的獲取原因:保護繼承下,基類的公有成員等同于派生類的保護成員,無法在派生類外訪問2023/12/1139方
案
三主函數調用freshman的公有成員函數get_data派生類中get_data如下定義:get_name;//調用基類的成員函數get_ID;//調用基類的成員函數cout<<major;基類中公有成員函數get_name定義如下:cout<<name;基類中公有成員函數get_ID定義如下:cout<<ID;2023/12/1140第二種情形
(ID和name為保護成員數據)基類(普通學生類)classstudent{protected:
intID;char*name;private:floatscore[11];public:student(intn1,char*nm1){……}~student(){deletename;}voidprint(){…..}voidget_name(){……}……};派生類聲明(大學生類)classundergstudent
:protectedstudent{private:char*major;//新增加的數據成員floatscore[40];public:……voidget_data{……}print_major(){……}//新增加的成員函數voidprint(){……}}2023/12/1141方
案
一主函數調用freshman的公有成員函數get_data派生類中get_data如下定義:cout<<name;cout<<ID;cout<<major;原因:name和ID是基類的保護成員,公有繼承下和保護繼承下派生類中可以訪問2023/12/1142方
案
二基類中公有成員函數get_namecout<<name;基類中公有成員函數get_IDcout<<ID;派生類中公有成員函數get_majorcout<<major;主函數中分別調用freshman的get_name、get_ID和get_major完成信息的獲取原因:保護繼承下,基類的公有成員等同于派生類的保護成員,無法在派生類外訪問2023/12/1143方
案
三主函數調用freshman的公有成員函數get_data派生類中get_data如下定義:get_name;//調用基類的成員函數get_ID;//調用基類的成員函數cout<<major;基類中公有成員函數get_name定義如下:cout<<name;基類中公有成員函數get_ID定義如下:cout<<ID;2023/12/1144保
護
成
員
和
保
護
繼
承
的
效
用在類的層次繼承結構中找到數據共享與成員隱蔽之間的最佳均衡如果需要在派生類中引用基類的某些成員,應當將基類中的這些成員聲明為protected,而非private2023/12/1145以student類中的ID和name為例如果聲明成為private,將造成派生類無法訪問的局面,使得派生類的使用很不方便如果聲明成為public,使得基類的數據隱蔽性受到一定的損傷如果聲明成為protected,派生類可以訪問從而使得基類和派生類之間可以實現數據共享,基類和派生類的外部都不能訪問,保障了數據的隱蔽性2023/12/1146多
級
派
生
下
的
訪
問
屬
性類的層次繼承結構導致了類的多級派生基類基類的派生類派生類的派生類……直接派生類vs.間接派生類直接基類vs.間接基類多級派生情況下各成員的訪問屬性在基類和其直接派生類之間按照一級派生訪問屬性的原則確定各成員的訪問屬性后逐級向下遷移2023/12/1147組合類的構造函數(子對象)組合類:類的數據成員本身就是一個對象實例classPerson{Stringname;//name是由類String創建的對象,可稱為子對象intage;public:Person(…);~Person(){};…}2023/12/1148Person的構造函數該如何處理其子對象數據成員name的初始化?參
數
初
始
化
表在構造函數頭之后,函數體之前,由冒號開頭,逗號分隔,每一部分形式為:數據成員名(初始值)Person(constString&nm=“”,inta=18)
:name(nm),age(a)//參數初始表
{}//即使函數體為空,該處大括號也不能省略適用情形子對象所屬類沒有缺省構造函數,必須采用參數初始化表子對象的構造函數復雜,用參數初始化表可提高效率常量型數據成員或引用型數據成員,必須在參數初始化表中賦初值2023/12/1149派
生
類
的
構
造
函
數回顧:構造函數的作用對類中的數據成員進行初始化派生類的構造函數的特殊性派生類的數據成員構成較為特殊從基類中接收來的數據成員派生類自己增加的數據成員派生類并沒有繼承基類的構造函數派生類的構造函數的初始化工作基類數據成員的初始化工作
派生類增加的數據成員的初始化工作2023/12/1150派
生
類
實
例基類(普通學生類)classstudent{private:intID;char*name;floatscore[11];public:student(intn1,char*nm1){……}~student(){deletename;}voidprint(){…..}voidget_name(){……}……};派生類聲明(大學生類)classundergstudent
:publicstudent{private:char*major;//新增加的數據成員floatscore[40];public:……voidget_data{……}print_major(){……}//新增加的成員函數voidprint(){……}}2023/12/1151實
例:大學生類undergstudent的構造函數方案一undergstudent(intn,stringstu_name,stringstu_major,float*scoreList){ID=n;name=stu_name;major=stu_major;score=scoreList;}派生類無法訪問基類的私有成員數據方案二undergstudent(intn,stringstu_name,stringstu_major,float*scoreList){student(n,stu_name);//調用基類構造函數major=stu_major;score=scoreList;}不能在派生類構造函數體中顯式調用構造函數!雖然能通過編譯,但結果不對2023/12/1152派
生
類
構
造
函
數
的
解
決
之
道方案三undergstudent(intn,stringstu_name,stringstu_major,float*scoreList):student(n,stu_name);//調用基類構造函數{/*派生類的函數體中只對派生類新增的數據成員進行初始化*/major=stu_major;score=scoreList;}解決的辦法是通過成員初始化表來完成基類數據成員的初始化,在參數初始化表中可以顯式調用基類構造函數派生類的函數體完成新增數據成員的初始化2023/12/1153派
生
類
構
造
函
數
的
基
本
形
式<派生類名>(<總參數表>):<基類構造函數名>(<參數表1>){<派生類數據成員的初始化>};說明:1、如果派生類構造函數在類的外面定義,類體中只需要寫這個函數的聲明:<派生類名>(<總參數表>);2、總參數表中的參數包括了基類構造函數所需的參數和派生類新增數據成員初始化所需的參數
生成一個類對象(10009,bob,CS,……)
undergstudent(n,stu_name,stu_major,scorelist):student(n,stu_name)構造函數的參數初始化表2023/12/1154有
子
對
象
的
派
生
類
的
構
造
函
數子對象類的數據成員本身就是一個類對象classundergstudent
:publicstudent{private:char*major;floatscore[40];
Teacher*tutor;//子對象public:……}classteacher
{private:intID;char*name;
char*title;public:……}2023/12/1155分析:對象建立時需要對它的數據成員進行初始化派生類構造函數對其數據成員進行初始化的時候也需要對其中的子對象進行初始化在成員初始化表中顯式調用子對象的構造函數undergstudent(intn,stringstu_name,stringstu_major,float*scoreList,intT_n,stringT_name,stringT_title):student(n,stu_name),tutor(T_n,T_name,T_title)2023/12/1156派
生
類
構
造
函
數
的
一
般
形
式<派生類名>(<總參數表>):<基類名>(<參數表1>),<對象成員名>(<參數表2>){<派生類其它數據成員的初始化>};派生類構造函數的任務初始化基類數據成員初始化子對象數據成員初始化其它派生類數據成員派生類構造函數執行順序調用基類構造函數調用子對象構造函數執行派生類構造函數體2023/12/1157特
殊
形
式
的
派
生
類
構
造
函
數多層派生時,不需要在成員初始化表中列出其上每一層派生類的構造函數,只需要列出其直接基類的構造函數即可派生類新增成員無需任何初始化時,派生類構造函數的函數體為空如果基類沒有定義構造函數,或者定義了沒有參數的構造函數,派生類定義構造函數可以不寫基類構造函數,派生類構造函數調用時,系統會自動首先調用基類的默認構造函數2023/12/1158派
生
類
的
析
構
函
數回顧:析構函數的作用在對象撤銷之前,進行必要的清理工作派生類的析構函數對派生類新增加的成員進行清理根據需要定義相應的析構函數如果有子對象,還需要對子對象進行清理調用子對象的析構函數完成需要對接收自基類的成員進行清理調用基類的析構函數完成自動調用基類和子對象的析構函數2023/12/1159派生類析構函數的任務清理基類數據成員清理子對象數據成員清理其它派生類數據成員派生類析構函數執行順序調用基類析構函數調用子對象析構函數執行派生類析構函數部分2023/12/1160派
生
類
的
同
名
覆
蓋覆蓋規則基類的同名成員在派生類中被屏蔽,成為不可見的定義在派生類對象模塊中通過對象名訪問同名的成員,訪問的是派生類的成員實例:studentstudent_A;undergstudentstudent_B;student_A.print();//調用基類中的成員函數printstudent_B.print();//調用派生類中的成員函數printstudent_B.student::print();//指明作用域而調用基類成員數據成員的覆蓋只要命名相同即可成員函數的覆蓋不僅函數名要相同,函數的參數表包括參數個數和類型都要相同2023/12/1161多
重
繼
承一個類可以從一個或者多個基類派生而來。根據派生類繼承基類的個數,將繼承分為單繼承和多繼承。當派生類有多個基類時稱為多繼承。單繼承可以看作是多繼承的一個特例,多繼承可以看作是多個單繼承的組合,它們有很多相同特性。實例教師類在職研究生類研究生類2023/12/1162多
重
繼
承
派
生
類
的
定
義class<派生類名>:<繼承方式><基類名1>,…,<繼承方式><基類名n>{<派生類新定義成員>};2023/12/1163多
重
繼
承
派
生
類
的
構
造
函
數成員初始化表中需要包含多個基類構造函數一般形式<派生類名>(<總參數表>):<基類名1>(<參數表1>),…,<基類名n>(<參數表n>){<派生類數據成員的初始化>};2023/12/1164多
重
繼
承
的
二
義
性
問
題情形一:兩個基類有同名成員2023/12/1165classgstudent:
{protected:intID;char*name;char*major;public:init();……}classteacher
{protected:intID;char*name;
char*title;public:init();……}classonjobgstudent:publicgstudent,publicteacher
{public:voidprint();{cout<<ID<<endl;cout<<name<<endl;}……}main()
{onjobgstudentTeach_A;
Teach_A.init();//該調用哪個init()?
Teach_A.print();//print函數該輸出哪個ID…?//研究生學號和教師工號并不同}二義性2023/12/1166解
決
方
案
一用作用域運算符“::”進行限定,顯式訪問基類成員。main()
{onjobgstudentTeach_A;
Teach_A.Teacher::init();Teach_A.gstudent::init();
Teach_A.print();}classonjobgstudent:publicgstudent,publicteacher
{public:voidprint();{cout<<Teacher::ID<<endl;cout<<Teacher::name<<endl;cout<<gstudent::ID<<endl;cout<<major<<endl;}……}派生類的成員函數訪問基類成員,不必寫對象名2023/12/1167情
形
二:兩個基類和派生類都有同名成員classgstudent:
{protected:intID;char*name;char*major;public:voidinit(…);……}classteacher
{protected:intID;char*name;
char*title;public:voidinit(…);……}classonjobgstudent:publicgstudent,publicteacher
{public:voidinit(…);{
}voidprint();……}main()
{onjobgstudentTeach_A;
Teach_A.init(…);//調用哪個init?
//根據同名覆蓋原則//調用onjobgstudent的init
Teach_A.print();}無二義性2023/12/1168內在問題分析Teacher_A.init調用類onjobgstudent的init函數進行初始化,而類onjobgstudent的init函數分別調用了gstudent的init函數和teacher
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CIMA 0040-2021水中總磷快速測定儀
- T/CGCC 39-2019干磨米粉
- T/CECS 10352-2023建筑外墻裝飾板自清潔性能技術要求
- T/CECS 10346-2023供水用不銹鋼閥門通用技術條件
- T/CECS 10310-2023水性聚氨酯防水涂料
- T/CCT 007-2024煤化工廢水處理運營能力評價
- T/CCT 002-2019煤化工副產工業氯化鈉
- T/CCMA 0173-2023流動式起重機用高性能平衡閥
- T/CCMA 0120-2021瀝青冷再生廠拌設備
- T/CCMA 0105-2020綠化綜合養護車
- 2025年財務管理全球經濟試題及答案
- 2025-2030年芳綸纖維行業市場深度調研及發展趨勢與投資研究報告
- 2024年濱州市沾化區區屬國有企業招聘考試真題
- 紡織機械操作知識掌握策略試題及答案
- 煙臺科目一試題及答案
- 5《有話好好說》(教案)-大象版心理健康四年級
- 制造企業生產效率提升計劃
- 2025年廣東佛山市三水海江建設投資有限公司招聘筆試參考題庫含答案解析
- 初中英語人教新目標 (Go for it) 版七年級下冊Unit 7 Its raining!Section A教學設計
- 民法典物權編詳細解讀課件
- 列車緊制不緩解故障處理湖南鐵道賀婷課件
評論
0/150
提交評論