版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第九讲
文档视图对话框武汉大学面向对象程序设计面向对象程序设计本讲主要内容文档与视图结构的工作原理菜单编程鼠标消息处理工具栏编程对话框文档视图文件结构应用程序类和主框架窗口类项目文件资源文件预编译文件文档视图类面向对象程序设计基于文档视图的编程步骤文档视图结构多态虚函数建立框架添加菜单/按钮添加消息响应函数消息响应函数实现主要与文档视图类打交道面向对象程序设计MFC文档/视图结构数据处理工作分工文档/视图结构把数据从用户对数据的观察中分离了出来。文档用于管理和维护数据视图用来显示和编辑数据虚基类多态虚函数面向对象程序设计文档虚基类多态虚函数文档的概念在MFC应用程序中的适用范围很广,一般说来,文档是能够被逻辑地组合的一系列数据,包括文本、图形、图象和表格数据。一个文档代表了用户存储或打开的一个文件单位。文档的作用:把对数据的处理从对用户界面的处理中分离出来,集中处理数据,同时提供了一个与其它类交互的接口。负责数据的读写操作,数据通常被保存在文档类的成员变量中,文档类通过一个称为序列化的成员函数将成员变量的数据保存到磁盘文件中。MFC应用程序为数据的序列化提供了默认支持。面向对象程序设计概述视图虚基类多态虚函数从用户的角度上看,视图实际上就是一个普通的窗口。从程序员的角度看,视图实际上是一个从MFC库中的CView类派生出来的类的对象。视图是文档在屏幕上的一个映像。一个视图总是与一个文档对象相关联,用户通过与文档相关联的视图与文档进行交互。当用户打开一个文档时,应用程序就会创建一个与之相关联的视图。视图的作用:负责显示和编辑文档数据,但不负责存储。用户对数据的编辑需要依靠窗口上的鼠标与键盘操作才得以完成,这些消息都是由视图类接收后进行处理或通知文档类,如收到窗口刷新消息时调用视图类的成员函数OnDraw()显示文档内容。面向对象程序设计文档、视图、框架窗口之间的关系一个视图是一个没有边框的窗口,它位于主框架窗口中的客户区。视图是文档对外显示的窗口,但它并不能完全独立,它必须依存在一个框架窗口内。一个视图只能拥有一个文档,但一个文档可以同时拥有多个视图。虚基类多态虚函数面向对象程序设计文档、视图之间的关系虚基类多态虚函数面向对象程序设计文档、视图之间的关系虚基类多态虚函数CImageViewCCloudPointDocCCloudPointViewCPCSectViewCPCSectDocCImageDoc面向对象程序设计文档/视图结构的优点最明显的优点:允许对同一数据实现多视。把数据处理类从用户界面处理类中分离出来,使得每一个类都能集中地执行一项工作。有助于应用程序的模块化,程序也易于扩展,编程时只需修改所涉及的类虚基类多态虚函数面向对象程序设计注意:文档/视图结构并没有完全要求所有数据都属于文档类。视图类也可以有自己的数据。如果在视图类中不定义任何数据,在需要时都从文档类中获取,这样做会影响程序的效率。虚基类多态虚函数面向对象程序设计概述文档与视图之间的相互作用文档数据更改后如何保持视图显示的同步?即文档与视图如何进行交互。在文档、视图和应用程序框架之间包含了一系列复杂的相互作用过程,文档与视图的交互是通过类的公有成员变量和成员函数实现的。CView类的成员函数GetDocument()CDocument类的成员函数UpdateAllViews()CView类的成员函数OnUpdate()虚基类多态虚函数CView类的成员函数GetDocument()一个视图对象只有一个与之相关联的文档对象,它所包含的成员函数函数GetDocument()允许应用在视图中得到与之相关联的文档。GetDocument()
函数返回值是与视图相关联的文档对象的指针,利用这个指针可以访问文档类及其派生类的公有成员。假设视图对象接收到了一条消息,表示用户在编辑控件中输入了新的数据,此时,视就必须通知文档对象对其内部数据进行相应的更新。虚基类多态虚函数面向对象程序设计概述当利用MFCAppWizard向导创建一个SDI单文档应用程序Mysdi时,就生成了CView类的一个派生类,并在派生类中定义了函数GetDocument()GetDocument()是一个内联函数,类似于下面的形式(Debug版函数代码):CMysdiDoc*CMysdiView::GetDocument(){
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMysdiDoc)));
return(CMysdiDoc*)m_pDocument;//m_pDocument是CArchive类的数据成员
//指向当前文档对象}GetDocument()函数虚基类多态虚函数面向对象程序设计注意:当编译器在视图类对象代码中遇到对GetDocument()函数的调用时,它调用的实际上是派生视图类中的该函数,而不是CView类中的该函数。因此,我们没必要将它所返回的指针强制转换为指向派生文档类的指针。由于CView的GetDocument()函数并不是虚函数,因此,如果pView声明为CView的指针,则下面的语句:pView->GetDocument();调用的是基类的GetDocument()函数,它返回的是指向CDocument对象的指针。虚基类多态虚函数面向对象程序设计概述CDocument类的成员函数UpdateAllViews()视图重绘:如果由于种种原因,文档数据发生了改变,那么所有与该文档相关的视图必须被通知到,以便于它们能够对所显示的数据进行相应的更新。更新与该文档有关的所有视图的方法是调用成员函数CDocument::UpdateAllViews()。虚基类多态虚函数面向对象程序设计概述函数声明voidUpdateAllViews(CView*
pSender,LPARAMlHint=0L,CObject*
pHint=NULL);虚基类多态虚函数如果在文档派生类的成员函数中调用UpdateAllViews()函数,其第一个参数pSender设为NULL,表示所有与当前文档相关的视图都要重绘。
UpdateAllViews(NULL);如果在视图派生类的成员函数中通过当前文档指针调用UpdateAllViews()函数,其第一个参数pSender设为当前视图,如下形式:
GetDocument()->UpdateAllViews(this);面向对象程序设计概述视图类的成员函数OnUpdate()
当程序调用CDocument::UpdateAllViews()函数时,应用框架就会调用了所有相关视图的OnUpdate()函数,以更新相关的视图。通常派生视图类的OnUpdate()函数要对文档进行访问,读取文档的数据,然后再对视图的数据成员或控制进行更新。可以利用OnUpdate()函数使视图的某部分无效,以便触发OnDraw()函数,利用文档数据来重画窗口。需要时,可以直接在视图派生类的成员函数中调用该函数刷新当前视图。虚基类多态虚函数面向对象程序设计概述基类的OnUpdate()函数:
voidCView::OnUpdate(CView*pSender, LPARAM/*lHint*/,CObject*/*pHint*/){
ASSERT(pSender!=this);
UNUSED(pSender);//unusedinreleasebuilds //invalidatetheentirepane,erasebackgroundtoo//使整个窗口矩形无效,通过调用OnDraw()更新整个视图窗口
Invalidate(TRUE);}虚基类多态虚函数在OnUpdate()中通过调用函数CWnd::Invalidate()刷新整个客户区,我们也可以在自己的CWnd派生类中直接调用函数Invalidate()。面向对象程序设计文档视图程序运行过程应用启动──CMySDIDocument对象被创建
CMySDIView对象被创建
CMySDIView::OnCreate()//被调用(如果被激活)
CMySDIView::OnInitialUpdate//视图对象被初始化视窗口被显示用户编辑数据─CMySDIView成员函数对CMySDIDocument的数据成员进行更新用户退出应用─CMySDIView对象被删除
CMySDIDocument对象被删除虚基类多态虚函数面向对象程序设计概述多视运行过程应用启动─CMySDIDocument对象被创建CMySDIView对象被创建、其他视对象被创建,视窗口被创建CMySDIView::OnCreate被调用CMySDIView::OnInitialUpdate被调用CMySDIView::OnUpdate初始化视、视窗口被显示用户操作─CMySDIView函数更新CMySDIDocument的数据成员─调用CDocument::UpdateAllViews其他视的OnUpdate函数被调用用户操作─CMySDIDocument函数对数据成员进行更新调用CDocument::UpdateAllViewsCMySDIView和其他视的OnUpdate函数都被调用用户退出─CMySDIView对象和其他视对象被删除
CMySDIDocument对象被删除虚基类多态虚函数面向对象程序设计概述多文档一个多文档应用程序有一个主窗口,但在主窗口中可以同时打开多个子窗口,每一个子窗口对应一个不同的文档。SDI和MDI使用不同框架窗口。SDI的框架窗口是唯一的主框架窗口,窗口类是CMainFrame,由CFrameWnd派生而来。MDI的框架窗口分为主框架窗口和子框架窗口,区别于SDI,MDI的主框架窗口不包含视图,分别由每个子框架窗口包含一个视图。MDI的主框架窗口类不与某个打开的文档相关联,而只与子框架窗口相关联。MDI主框架窗口类CMainFrame由CMDIFrameWnd派生而来,而MDI子框架窗口类CChildFrame由CMDIChildWnd派生而来。虚基类多态虚函数面向对象程序设计例基类指针与派生类指针之间的相互转换文档、视图、框架类和所涉及的资源形成了一种固定的联系,这种固定的联系就称为文档模板。也就是说,文档模板描述了相对应每一种类型文档的视图和窗口的风格类型。MFC提供了一个文档模板类CDocTemplate,它是抽象基类,有两个派生类CSingleDocTemplate和CMultiDocTemplate,分别用于单文档和多文档。文档模板类是类模板的一个例子。虚基类多态虚函数面向对象程序设计概述虚基类多态虚函数多文档单文档
注册文档模板:CMultiDocTemplate*pDocTemplate;pDocTemplate=newCMultiDocTemplate(
IDR_UPIVTYPE,
RUNTIME_CLASS(CUPIVDoc),
RUNTIME_CLASS(CChildFrame),//customMDIchildframe
RUNTIME_CLASS(CUPIVView));AddDocTemplate(pDocTemplate);CSingleDocTemplate*pDocTemplate;pDocTemplate=newCSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CUVIDoc),
RUNTIME_CLASS(CMainFrame),//mainSDIframewindow
RUNTIME_CLASS(CUVIView));AddDocTemplate(pDocTemplate);面向对象程序设计概述菜单设计虚基类多态虚函数菜单(Menu)以可视的方式提供了对应用程序功能的选择,是用户与应用程序之间进行交互的主要方式之一。面向对象程序设计概述菜单设计菜单主要有弹出式菜单和下拉式菜单两种。弹出式菜单可以出现在屏幕的任何位置,是为了响应鼠标右键按键而激活的弹出式菜单。下拉式菜单可以看成由一个顶层菜单和弹出式菜单装配而成。当选择顶层菜单项时,下拉出一个子菜单,子菜单中是具体的菜单项。菜单项具备三个关键域:标识符(ID)、标题(Caption)和提示(Prompt)。标识符是一个数字常量,它唯一标识菜单项。标题是实际显示在菜单上的文本提示是在用户浏览某个菜单项时,希望显示在窗口底端状态栏中的任何文本。虚基类多态虚函数面向对象程序设计菜单设计--建立菜单资源使用MFCAppWizard向导创建文档/视图结构应用程序时,向导将自动生成Windows标准的菜单资源和命令处理函数。但这个默认生成的主框架菜单资源往往不能满足实际的需要,因此我们需要利用菜单资源编辑器对其进行修改和添加。虚基类多态虚函数例编写一个单文档应用程序DrawCoin,为程序添加一个“画硬币”主菜单,并在其中添加“增加硬币”和“减少硬币”两个菜单项。面向对象程序设计菜单设计--建立菜单资源面向对象程序设计菜单设计--建立菜单资源利用MFCAppWizard[exe]向导创建SDI应用程序。在项目工作区的ResourceView页面中选择Menu并展开它,双击下面的IDR_MAINFRAME项弹出菜单资源编辑器,显示应用程序向导所创建的菜单资源。为程序添加主菜单。双击菜单栏右边虚空白框,弹出属性对话框,在Caption框输入主菜单的标题“画硬币(&C)”,字符&用于在显示C时加上下划线,并表示其快捷键为Alt+C。在主菜单“画硬币(C)”下方双击带虚框的空白菜单项,弹出属性对话框。在ID栏输入ID_COIN_ADD。在Caption框输入菜单项的标题“增加硬币(&A)\tCtrl+A”。虚基类多态虚函数面向对象程序设计建立消息映射----添加菜单命令处理函数虚基类多态虚函数用户操作:选中一个菜单项一个含有该菜单项ID标识的WM_COMMAND命令消息被发送到应用程序应用程序调用命令消息处理函数一个菜单项被选中后的执行过程面向对象程序设计菜单命令处理函数映射到类应该将菜单命令映射到哪个类中,需要由该命令的功能决定。如果一个命令同视图的显示有关,就应该将其映射到视图类;如果同文档的读写有关,就映射到文档类中;如果命令完成通用功能,一般映射到窗口框架类。如果无法对功能进行准确分类,则可以将菜单命令映射到任意一个类,看看是否能够完成指定的功能。虚基类多态虚函数面向对象程序设计利用ClassWizard添加菜单命令处理函数利用ClassWizard类向导添加菜单命令WM_COMMAND消息处理函数后,向导将自动添加一个如下格式消息映射:ON_COMMAND(MenuItemID,MemberFuntion)参数MenuItemID是菜单项的ID标识,参数MemberFuntion是处理该消息的成员函数名。一个菜单项的WM_COMMAND消息意味着选择了该菜单项,或选择了对应的工具栏按钮、键盘快捷键。向导还生成了消息处理函数的框架代码。虚基类多态虚函数面向对象程序设计例为程序DrawCoin添加菜单命令处理函数1.启动ClassWizard类向导,在ClassName栏选择类CDrawCoinDoc,在ObjectIDs栏选择ID_COIN_ADD,在Messages栏选择COMMAND,单击AddFuntion按钮。同样为ID_COIN_SUB添加命令处理函数。函数的代码如下:voidCDrawCoinDoc::OnCoinAdd(){
m_nCoins++; //硬币数量加一
UpdateAllViews(NULL); //刷新视图}voidCDrawCoinDoc::OnCoinSub(){
if(m_nCoins>0)m_nCoins--;//硬币数量减一
UpdateAllViews(NULL); }虚基类多态虚函数面向对象程序设计定义成员变量m_nCoins并初始化:2.为文档派生类CDrawCoinDoc添加一个类型为int、属性为public的成员变量m_nCoins。3.按下Ctrl+W启动ClassWizard类向导,在ClassName栏和ObjectIDs栏选择类CDrawCoinDoc,在Messages栏选择DeleteContents,单击AddFuntion按钮和EditCode按钮,在生成的虚函数中添加如下初始化成员变量m_nCoins的代码,该函数在用户重新使用(打开或创建)一个文档时调用。虚基类多态虚函数voidCDrawCoinDoc::DeleteContents(){ //TODO:Addyour...
m_nCoins=1;//初始化成员变量
CDocument::DeleteContents();}面向对象程序设计概述4.在OnDraw()函数中根据m_nCoins画出指定个数的硬币。voidCDrawCoinView::OnDraw(CDC*pDC){
CDrawCoinDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc); //TODO:adddrawcodefornativedatahere
for(inti=0;i<pDoc->m_nCoins;i++) {
inty=200-10*i;
pDC->Ellipse(200,y,300,y-30); //用两个偏移的椭圆表示一枚硬币
pDC->Ellipse(200,y-10,300,y-35); }}在客户区画出硬币:C++类面向对象程序设计更新命令用户界面消息虚基类多态虚函数利用ClassWizard类向导为菜单项添加命令处理函数时,在Messages栏除了WM_COMMAND消息,还有一个UPDATE_COMMAND_UI消息,它称为更新命令用户界面消息。有时一个菜单项可以有可用和不可用两种状态,即允许或禁止菜单项的使用(处于灰色状态)。例如,初始状态下,菜单项“减少硬币”不可用,因为开始时客户区一个硬币也没有画出。UPDATE_COMMAND_UI消息为程序员根据程序当前运行情况对菜单项的状态进行动态设置而提供了一个简便的方法。C++类虚基类多态虚函数菜单设计的基本步骤建立工程项目文件建立菜单资源添加菜单命令处理函数将菜单命令映射到哪个类?利用ClassWizard添加菜单命令处理函数完成定义成员变量、更新视图等与菜单处理函数相关的操作允许或禁止菜单项添加快捷键和串表说明C++类虚基类多态虚函数弹出式菜单菜单分为两类:
依附于框架窗口的固定菜单浮动的弹出式菜单(也称快捷菜单或上下文菜单)当用户单击鼠标右键,弹出式菜单出现在光标所在位置。弹出式菜单是通过利用CMenu类和其成员函数,在程序运行过程中动态建立的。弹出式菜单可利用现有的菜单项来进行创建,也可以为弹出式菜单专门建立一个菜单资源,然后通过调用函数CMenu::LoadMenu()装入所创建的菜单资源。面向对象程序设计虚基类多态虚函数弹出式菜单的消息处理当右击鼠标并释放后,WM_CONTEXTMENU消息将发给应用程序。因此,在程序中可通过为WM_CONTEXTMENU添加消息处理函数来实现弹出式菜单。WM_CONTEXTMENU消息是在收到WM_RBUTTONUP消息后,由Windows产生的。但如果在WM_RBUTTONUP的消息处理函数中没有调用基类的处理函数,那么应用程序将不会收到WM_CONTEXTMENU消息。
例:面向对象程序设计利用ClassWizard为视图类添加WM_CONTEXTMENU的消息处理函数,添加如下代码:voidCDrawCoinView::OnContextMenu(CWnd*
pWnd,
CPointpoint){
CMenu
menuPopup;
//声明菜单对象
if(menuPopup.CreatePopupMenu())
//创建弹出式菜单{
//向菜单menuPopup中添加菜单项
menuPopup.AppendMenu(MF_STRING,
ID_COIN_ADD,"增加硬币\tCtrl+A");
menuPopup.AppendMenu(MF_STRING,
ID_COIN_SUB,"减少硬币\tCtrl+B");
//显示弹出式菜单,并跟踪用户的菜单项的选择
menuPopup.TrackPopupMenu(TPM_LEFTALIGN,
point.x,point.y,this);
}}
例为程序DrawCoin添加弹出式菜单。面向对象程序设计菜单处理相关函数函数AppendMenu():用于向菜单menuPopup添加菜单项。函数第1个参数指定加入菜单项的风格,值MF_STRING表示菜单项是一个字符串;第2个参数指定要加入菜单项的ID,如ID_COIN_ADD;第3个参数指定菜单项的显示文本。函数TrackPopupMenu():用于在指定位置显示弹出式菜单,并响应用户的菜单项选择。函数第1个参数是位置标记,TPM_LEFTALIGN表示以x坐标为标准左对齐显示菜单;第2、3个参数指定弹出式菜单的屏幕坐标;第4个参数指定拥有此弹出式菜单的窗口。面向对象程序设计利用ClassWizard为视图类添加WM_CONTEXTMENU的消息处理函数,添加如下代码:voidCDrawCoinView::OnContextMenu(CWnd*
pWnd,
CPointpoint){
CMenumenu; //装入菜单
menu.LoadMenu(IDR_MAINFRAME); //显示菜单 menu.GetSubMenu(1)->TrackPopupMenu(
TPM_LEFTALIGN,point.x,point.y,this);}第二种处理方式面向对象程序设计应用举例:设计一个SDI应用程序,添加一个画图形在菜单,并添加画直线、画矩形和画圆形三个子菜单项,添加相关的消息处理函数,要求当已经画了直线时画直线不可用,其他两项可用,其他类同。面向对象程序设计程序运行结果面向对象程序设计引用调用虚函数#include<iostream.h>classStudent{public:
virtualvoidprint(){
cout<<"AStudent";
cout<<endl; }};classGStudent:publicStudent{public:
virtualvoidprint(){
cout<<"AgraduateStudent";
cout<<endl; }};voidfun(Student&s){
s.print();}voidmain(){ Students1,*ps;
GStudents2;
//对象引用调用虚函数
fun(s1); fun(s2);//对象指针调用虚函数
ps=&s2;
ps->print();}程序运行结果:AStudentAgraduateStudentAgraduateStudent虚基类多态虚函数C++类构造函数、析构函数与虚函数基于构造函数的特点,不能将构造函数定义为虚函数。当撤消派生类的对象时,先调用派生类析构函数,然后自动调用基类析构函数,如此看来析构函数没必要定义为虚函数。但是,假如使用基类指针指向其派生类的对象,而这个派生类对象是用new运算创建的。当程序使用delete运算撤消派生类对象时,这时只调用了基类的析构函数,而没有调用派生类的析构函数。如果使用虚析构函数,无论指针所指的对象是基类对象还是派生类对象,程序执行时都会调用对应的析构函数。声明派生类对象时自动调用基类的构造函数虚基类多态虚函数C++类例虚析构函数的使用classA{public://构造函数不能是虚函数
A(){};//析构函数是虚函数
virtual~A(){cout<<"A::destructor\n";};};classB:publicA{public: B(){}; //虚析构函数
~B()
{cout<<"B::destructor\n";};};voidmain(){ A*pA=newB; //......
deletepA; /*先调用派生类B的析构函数,再调用基类A的析构函数*/}程序运行结果:
B::destructorA::destructor如果析构函数不是虚函数,则得不到下面的运行结果。请思考会是什么结果?
总结:由于使用了虚析构函数,当撤消pA所指派生类B的对象时,首先调用派生类B的析构函数,然后再调用基类A的析构函数。虚基类多态虚函数C++类虚函数的适用性一般来说,可将类族中的具有共性的成员函数声明为虚函数,而具有个性的函数则没有必要声明为虚函数。但是以下情况例外:静态成员函数不能声明为虚函数。因为静态函数不属于某一个对象,没有多态性的特征。内联函数不能声明为虚函数。因为内联函数的执行代码明确,没有内联函数的特征。构造函数不能声明为虚函数。析构函数可以是虚函数。虚基类多态虚函数C++类关于虚函数的说明利用虚函数可以在基类和派生类中使用相同的函数名和参数类型,但定义不同的操作。这样,就为同一个类体系中所有派生类的同一类行为(其实现方法可以不同)提供了一个统一的接口。例如,在一个图形类继承结构中,设类CShape是所有具体图形类(如矩形、三角形或圆等)的基类,则函数调用语句“pShape->Draw()”可能是绘制矩形,也可能是绘制三角形或圆。具体绘制什么图形,取决于pShape所指的对象。有时在声明一个基类时无法为虚函数定义其具体实现,这时可以将其声明为纯虚函数。包含纯虚函数的类成为抽象类。虚基类多态虚函数C++类抽象类抽象类是类的一些行为(成员函数)没有给出具体定义的类,即纯粹的一种抽象。抽象类专门作为基类派生新类,只能用于类的继承,自身无法实例化,不能用来创建对象,主要是为一个类族提供统一的操作接口,抽象类又称为抽象基类。抽象基类只提供了一个框架,仅仅起着一个统一接口的作用,而很多具体的功能由派生出来的类去实现。通过抽象类为一个类族建立一个公共的接口,这个公共的接口就是纯虚函数。在一般的类库中都使用了抽象基类,如类CShape就是图形类的抽象基类。虚基类多态虚函数C++类抽象类的定义一个类如果满足以下两个条件之一就是抽象类:至少有一个成员函数不定义具体的实现;定义了一个protected属性的构造函数或析构函数。抽象类不能用作参数类型、函数返回值类型或显式转换的类型。可以说明指向抽象类的指针
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 符合人体工程学的笔记本升降台设计
- 2023文印员理论考试历年真题+模拟卷全套答案
- 2023年乐鑫嵌入式校招面试前必刷笔试题及答案
- 2024年社工实务考试必背考题及速查答案手册
- 2026三资会计考试考前密押3套卷及超详答案解析
- 2020民法学总论易错题集及答案解析
- 2023年儿童保健科基层培训幼儿养育照护试题答案
- 2022年留置看护队员考试判断题专项练习试题及答案解析
- 2022民政局离婚协议书
- 检验科肝功能检测异常处理流程
- 简阳市投资促进局公开招聘编外人员考试备考试题及答案解析
- 2026年生物制药(生物制药技术)试题及答案
- 2026年广西机场管理集团有限责任公司校园招聘考试模拟试题及答案解析
- 2025年全国高校辅导员考试练习题及答案
- 内蒙古环投集团笔试试题
- A级锅炉部件制造质量手册
- 造价咨询重点、难点及控制措施
- 阀门基础知识培训课件
- 教学设计 大自然的语言 全国公开课一等奖
- 北师大版小学数学年级总复习知识点汇总
- 焊接接头的组成及基本形式
评论
0/150
提交评论