




已阅读5页,还剩155页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章类和对象 第四章类与对象 类对象构造函数和析构函数const成员函数成员对象静态成员友元小结 第四章类与对象 类对象构造函数和析构函数const成员函数成员对象静态成员友元小结 4 1类 类的定义 class类名 说明 1 类名代表所定义的类的名字 用标识符表示 2 成员描述给出该类的对象所有的成员的说明 它包括成员函数和数据成员 3 在类定义的成员描述中还包含对成员的访问控制 一个类中的方法可以直接访问同类中的任何成员 在C 定义中 可以用访问控制修饰符public private或protected来描述对类成员的访问限制 public public成员的访问不受限制 在程序中的任何地方都可以访问一个类的public成员 private private成员只能在本类 本类的成员函数 和友元中访问 protected protected成员只能在本类 派生类和友元中访问 成员的访问控制 信息隐藏 在类定义中可以有多个public private和protected访问控制说明 它们出现的先后顺序无关 C 的默认访问控制是private 成员的访问控制 良好编程习惯 为了保证程序的清晰性和可读性 每个成员访问说明符在类定义中只能使用一次 请将public成员放在最前面 这样更便于查找 一般情况下 类的数据成员和在类内部使用的成员函数应该指定为private 只有提供给外界使用的成员函数才指定为public 指定为public的成员构成了类与外界的一种接口 操作一个对象时 只能通过访问对象类中的public成员实现 成员的访问控制 软件工程知识 根据经验 数据成员应该声明为private 成员函数应该声明为public 如果某些成员函数只是被该类的其他成员函数访问 那么它们更适合声明为private 类的定义示例 定义一个Student类 classStudent private 访问控制说明intnumber score public 访问控制说明voidinit number 1001 score 100 voidshow cout number endl score endl 注意 注意 Returningareferencetoaprivatedatamember DANGEROUS 错误预防技巧 绝不要让类的public成员函数返回对该类private数据成员的非常量引用 或指针 返回这种引用会破坏类的封装 也是很危险的 应该避免 数据成员 类定义中的数据成员说明描述了类的对象所包含的数据的类型 它们可以是常量成员和变量成员 classDate private 访问控制说明intyear month day 数据成员说明 数据成员注意事项 一般来说 类定义中描述的数据成员属于类的成员 在创建对象前 类中说明的数据成员并不占有内存空间 因此 在类定义中说明数据成员 某些静态数据成员除外 时不能给它们赋初值 它们的初始化应在类的构造函数中指出 classA intx 0 errorconstdoubley 0 0 error 数据成员注意事项 数据成员的类型可以是任意的C 类型 包括类 void除外 但是在说明一个数据成员的类型时 如果未见到相应的类型定义或相应的类型未定义完 则该数据成员的类型只能是这些类型的指针或引用类型 数据成员注意事项 classA A是在程序其他地方定义的类 这里是声明 classB Aa error 未见A的定义Bb error B还未定义完A p B q A 成员函数描述对类定义中的数据成员所能实施的操作 成员函数的说明格式与非成员函数 称为全局函数 的定义或声明相同 成员函数的定义可以放在类定义中 也可以放在类定义外 成员函数 成员函数 方法一类内声明 类外定义示例 成员函数 classStudent private intnumber score public voidinit voidStudent init number 1001 score 100 类外定义的成员函数需指明其属于哪个类 以区别全局函数或其它类的成员函数 成员函数的定义 方法二内联函数的隐式声明 类内定义成员函数 classStudent private intnumber score public voidinit number 1001 score 100 成员函数的定义 方法二内联函数的显示声明 classStudent private intnumber score public voidinit inlinevoidStudent init number 1001 score 100 成员函数的定义 软件工程知识 通过函数原型在类定义中声明成员函数 在类定义之外定义这些函数 可以区分类的接口与实现方法 这样可以实现良好的软件工程 成员函数 类成员函数是可以重载的 析构函数除外 它遵循一般函数名重载规则 classA public voidf intf inti doublef doubled 第四章类与对象 类对象构造函数和析构函数const成员函数成员对象静态成员友元小结 对象 类属于类型范畴的程序实体 它存在于静态的程序 运行前的程序 中 而动态的面向对象程序 运行中的程序 则由对象构成 程序的执行是通过对象之间互相发送消息来实现的 当对象接收到一条消息后 它将调用对象类中定义的某个成员函数来处理这条消息 对象的创建和标识 直接方式 类名对象名 今后 在定义变量时 如果变量的类型为类 则称该变量为对象 用变量名来标识相应的对象 所有在函数外定义的对象称为全局对象 在函数 或复合语句 内定义的对象称为局部对象 关于全局对象和局部对象的生存期和对象标识符的作用域的规定和普通变量相同 成员对象将随着包含它的对象的创建而创建 随其消亡而消亡 成员对象标识符的作用域为它所在的类 对象指针 和基本数据类型的变量一样 每一个对象在初始化之后会在内存中占据一定空间 对象所占据的内存空间只是用于存放数据成员 函数并不在每个对象中都存储副本 对象指针就是用于存放对象地址的变量 对象指针遵循一般变量指针的各种规则 类名 对象指针名 Point p Point Pointp1 p Point 对象名 数据成员名对象名 成员函数名 实参列表 对象的操作 对象指针 数据成员名对象指针 成员函数名 实参列表 对象指针 成员名等价 对象指针 成员名 间接方式间接创建和标识对象是指在程序运行时刻 通过new操作来创建对象 所创建的对象称为动态对象 其内存空间在程序的堆区中 动态对象用delete操作撤消 即使之消亡 动态对象需要通过指针变量来标识 对象的创建和标识 对象的创建和标识 单个动态对象的创建与撤消 A p p newA deletep A p p A malloc sizeof A free p 对象的创建和标识 动态对象数组的创建与撤消 A p p newA 100 delete p A p p A malloc sizeof A 100 free p 类作用域 类定义构成一个作用域 类作用域 其中的标识符局部于类定义 它们可以与类定义外的全局标识符或其他类定义中的标识符相同 他们包括 数据成员成员函数在类定义外使用类定义中的标识符时 需通过对象名受限或类名受限 在类定义中使用与局部标识符同名的全局标识符时 需要在全局标识符前面加上全局域分辨符 来实现 classStudent private intnumber score public voidinit voidStudent init number 1001 score 100 类作用域 类作用域 voidinit classStudent private intnumber public voidinit intnumber voidf voidStudent f init 调用全局函数init classStudent private intnumber intscore public voidinit intnumber intscore Student number number Student score score voidmain Students1 s1 init classA public voidf voidg inti x i f private intx y z a b a x a y a z b x b y b z Aa b g inti this指针 每个成员函数都有一个隐藏的指针类型的形参this 其类型为 constthis 成员函数中对类成员的访问都是通过this指针进行的 voidg A constthis inti this x i this f voidg inti x i f a g 3 A g classStudent private intnumber intscore public voidinit intnumber intscore this number number this score score voidmain Students1 s1 init voidfunc A p classA intx public voidf func voidg inti x i f Aa b a f b f 要求 调用a f 时 在A f中调用func 练习 应在下列程序划线处填入的正确语句是 voidinit classStudent private intnumber public voidinit intnumber voidf voidStudent init intnumber number voidStudent f 调用全局函数init 练习 A this number init B this number init C Student number init D student number init 小技巧 在以后的MFC编程中 如果在成员函数中想调用同类中的某个成员 可以使用VC 提供的自动列出成员函数功能 使用this VC 将列出该类中的所有成员 我们可以从列表中选择我们想调用的成员 自动列出成员函数功能 可以提高编写速度 减少拼写错误 我们经常不能完全记住某个函数的完整拼写 但却能够从列表中辨别出该函数 自动列出成员函数的功能在这时就显得更加有用了 事实上 在各种IDE编程环境中 我们通常都不可能记住也没有必要记住所有的函数 只要将常用的函数记住 其他不常用的函数只要记住其大概的写法和功能 在调用该函数时可以从自动列出成员函数中选取 这样可以大大节省我们的学习时间 我们不用花费大量的时间去死记硬背许多函数 利用自动列出成员函数功能和帮助系统 就能够在编程时顺利地使用这些函数 等用的次数多了 也就在不知不觉中完全掌握了这些函数 第四章类与对象 类对象构造函数和析构函数const成员函数成员对象静态成员友元小结 构造函数 什么是构造函数构造函数是一种特殊的成员函数 它是在对象诞生后第一个执行 并且是自动执行 的函数 构造函数的特点 构造函数的名称必须与类名相同构造函数没有返回值 可以有参数 可以重载构造函数一般是public的 但有时也把构造函数声明为私有的 private 其作用是限制创建该类对象的范围 这时只能在本类和友元类中创建该对象 程序中不能直接调用构造函数 在创建对象时系统自动调用构造函数 在创建一个对象时 对象类的构造函数会被自动调用来对该对象进行初始化 至于调用对象类的哪个构造函数 这可以在创建对象的时候指定 构造函数 classA public A A inti A char p Aa1 或Aa1 A Aa2 1 或Aa2 A 1 或Aa2 1 Aa3 abcd 或Aa3 A abcd 或Aa3 abcd Aa1 classA public A A inti A char p Aa 4 Ab 5 A A 1 A abcd 2 xyz A p1 newA A p2 newA 2 A p3 newA xyz A p4 newA 20 不带参数的 或所有参数都有默认值的 构造函数 即构造对象时不提供参数的构造函数称为默认构造函数 程序中不能同时出现无参数的构造函数和带有全部默认形参值的构造函数 构造函数 classA public A A inti 0 Aa 构造函数 ERROR C 规定 每个类必须有一个构造函数 没有构造函数 就不能创建任何对象 构造函数 构造函数 C 又规定 如果一个类没有提供任何的构造函数 则C 提供一个默认的构造函数 由C 编译器提供 这个默认的构造函数是一个不带参数的构造函数 该构造函数的函数体为空 不做任何的初始化工作 只要一个类定义了一个构造函数 不管这个构造函数是否是带参数的构造函数 C 就不再提供默认的构造函数 因此 如果为一个类定义了一个带参数 且不是所有参数都有默认值 的构造函数 还想要创建一个对象而不提供参数 就需要自己定义一个默认构造函数 构造函数 classA public A inti Aa 构造函数 ERROR 构造函数示例 把Student类中的函数init改成构造函数 classStudent private intnumber intscore public Student intnumber intscore Student number number Student score score voidmain Students1 1002 90 Students2 构造函数也可以 类内声明 类外定义 错误 类中没有默认构造函数 构造函数 错误预防技巧 除非没有必要初始化类的数据成员 否则请提供构造函数 这样可以保证当类的每个新对象被创建时 类的数据成员都用有意义的值进行了初始化 析构函数 什么是析构函数在对象行将毁灭但未毁灭之前一刻 最后执行 并且是自动执行 的函数 析构函数是 反向 的构造函数 析构函数不允许有返回值 更重要的是析构函数不允许带参数 并且一个类中只能有一个析构函数 析构函数的作用正好与构造函数相反 对象超出其作用范围 对应的内存空间被系统收回或被程序用delete删除时 析构函数被调用 注意 new和delete会调用构造函数和析构函数malloc和free不会调用构造函数和析构函数对于动态分配的数组对象 必须用delete 而不能用delete代替delete delete gradesArray 首先调用每个对象的析构函数然后释放内存如果语句中没有包括 并且gradesArray指向一个对象数组只有第一个对象的析构函数被调用 注意 常见编程错误 删除数组时 用delete代替delete 将导致运行时的逻辑错误 为保证数组中的每个对象都接受一个析构函数调用 数组生成的内存空间要用delete 运算符删除 类似地 总是使用delete运算符将分配给单个元素的内存空间删除 析构函数的特点析构函数的名称与类名相同 前面加上 析构函数没有返回值 没有参数 不能重载当对象被撤销时 系统自动调用析构函数类中未定义析构函数 系统会自动生成默认的函数体为空的析构函数 析构函数 根据析构函数的特点 我们可以在构造函数中初始化对象的某些成员变量 给其分配内存空间 堆内存 在析构函数中释放对象运行期间所申请的资源 析构函数 析构函数示例 在构造函数申请空间 析构函数释放空间 classStudent private char name intnumber intscore public Student char name intnumber intscore this name newchar strlen name 1 strcpy this name name this number number this score score Student deletename 析构函数同样可以 类内声明 类外定义 析构函数示例 栈内存 堆内存 zhangsan Stu1对象 Studentstu1 zhangsan 101 90 注意 无论构造函数被调用还是析构函数被调用 对象都是存在的 classA intx char p public A char p intx this p newchar strlen p 1 strcpy this p p this x x A deletep voidmain Aa lisi 23 对象产生 系统在堆栈中分配内存空间 栈内存 classA intx char p public A char p intx this p newchar strlen p 1 strcpy this p p this x x A deletep voidmain Aa lisi 23 栈内存 调用构造函数 完成初始化 堆内存 lisi 23 对象产生 系统在堆栈中分配内存空间 classA intx char p public A char p intx this p newchar strlen p 1 strcpy this p p this x x A deletep voidmain Aa lisi 23 栈内存 调用构造函数 完成初始化 堆内存 lisi 23 对象产生 系统在堆栈中分配内存空间 对象生命周期结束 在结束前先调用析构函数 classA intx char p public A char p intx this p newchar strlen p 1 strcpy this p p this x x A deletep voidmain Aa lisi 23 栈内存 调用构造函数 完成初始化 23 对象产生 系统在堆栈中分配内存空间 对象生命周期结束 在结束前先调用析构函数 对象生命周期结束 释放内存 析构函数 在某些情况下 我们并不撤消对象 而只是归还对象所申请的资源 这时我们可以通过显示地调用析构函数来实现 小结对象的创建 在c 中 有四种方法可以产生一个对象在栈中产生在堆中产生产生一个全局对象产生一个局部静态对象 小结对象的创建 对于全局对象 程序一开始 其构造函数就先被执行 程序即将结束前其析构函数执行 MFCapplicationobject 对于局部对象 当对象诞生时 其构造函数被函数执行 程序流程将离开该对象的存活范围 以致对象将毁灭 时 其析构函数执行 小结对象的创建 对于静态对象 当对象第一次被定义时其构造函数被执行 当程序将结束时 此对象因而遭致毁灭 其析构函数被执行 但比全局对象的析构函数早一步执行 对于以new方式产生出来的局部对象 当对象诞生时其构造函数被执行 析构函数则在对象被delete时执行 思考 classPerson Personper1 30 zhangsan 170 Personper2 per1 拷贝构造函数 什么是拷贝构造函数拷贝构造函数是一种特殊的构造函数 它的功能是用一个已知的对象来初始化一个被创建的同类对象 拷贝构造函数实际上也是构造函数 具有一般构造函数的所有特性 它是在初始化时被调用来将一个已知对象的数据成员的值逐值拷贝给正在创建的一个同类的对象 默认情况下系统自动创建拷贝构造函数 如果在类定义中没有给出拷贝构造函数 则编译系统将会隐式地为其提供一个拷贝构造函数 该拷贝构造函数的行为是 逐个成员拷贝初始化 对于普通成员 它采用通常的初始化操作 对于成员对象 则调用成员对象类的拷贝构造函数来实现成员对象的初始化 拷贝构造函数 拷贝构造函数的定义 类名 const类名 object 拷贝构造函数 在Person类中添加拷贝构造函数 拷贝构造函数 classPerson private intheight intage charname 10 public Person constPerson classPerson private char name intage intheight public Person intage char name intheight this name newchar strlen name 1 strcpy this name name this age age this height height Student deletename 思考 Personp1 11 zhangsan 150 Personp2 p1 Person constPerson 系统提供的默认拷贝构造函数的行为 深拷贝和潜拷贝问题 p1 p2 张三 p2 p1 nameheightage nameheightage 栈空间 堆空间 深拷贝和潜拷贝问题 类体内的成员需要动态开辟内存的时我们应自定义拷贝构造函进行深拷贝 以防止潜拷贝带来的堆内存的所属权产生混乱 从而造成析构错误 Person constPerson 深拷贝和潜拷贝问题 拷贝构造函数 voidf Persons Persona f a 以下三种情况将调用拷贝构造函数 定义对象时Aa1 Aa2 a1 Aa2 a1 Aa2 A a1 把对象作为值参数传给函数voidf Ax Aa f a 调用时将创建形参对象x 并调用拷贝构造函数 用对象a 对其初始化 把对象作为返回值 Af Aa returna 创建一个A类临时对象 并调用拷贝构造函数 用对象a 对其初始化 voidmain Ab b f const常量 引用的初始化问题 思考 classA intx constinty 1 int error error error y是常量成员 其值不能改变 成员初始化表 在定义构造函数时 classA intx constinty int classA intx constinty int 成员初始化表中成员初始化的书写次序并不决定它们的初始化次序 数据成员的初始化次序由它们在类定义中的说明次序来决定 当类中有常量数据成员或引用数据成员时 如果类中定义了构造函数 则一定要在定义的所有构造函数的成员初始化表中对它们进行初始化 如果类中没有定义构造函数 则编译程序不会给该类生成一个默认构造函数 因此 这样的类程序是不能用于创建对象的 成员初始化表 在定义构造函数时 程序运行的某个时刻 一个对象的所有数据成员的值反映了这个对象在该时刻的状态 在不同时刻 对象的状态可能是不一样的 对象状态的改变往往是由于对象处理了一条消息 某个成员函数被调用 但是并不是每条消息都会导致对象状态的变化 有些消息只是获取对象在某时刻的状态 思考 第四章类与对象 类对象构造函数和析构函数const成员函数成员对象静态成员友元小结 在定义一个成员函数时 可以给它加上一个const说明 表示它是一个获取对象状态的成员函数 例如 classA voidf const const成员函数 const成员函数 函数声明和定义处都要加const classA intx y public voidf const voidA f const const成员函数 classA intx public intf const classA intx public constintf 在const成员函数体中不能修改数据成员的值 也不能调用该类中的非常成员函数 const成员函数 软件工程知识 如果成员函数不修改对象 最好将所有类成员函数声明为const classA intx char p public voidf const x 10 errorp newchar 20 error const成员函数 classA intx char p public voidf const strcpy p abcd p A const成员函数 const成员函数 const对象 软件工程知识 将对象声明为const有利于实现最低权限原则 这样试图修改对象就会产生编译时错误而非执行时错误 性能提示 把变量和对象声明为const 这不仅是一种有效的软件工程原则 而且还能提高性能 因为如今复杂的优化编译器能对常量进行某些优化 但无法对变量进行优化 const成员函数 只有常成员函数才有资格操作常对象 classA intx y public voidf const voidg constAa a f OKa g error const成员函数 软件工程知识 可以对const成员函数进行非const版本的重载 编译器将根据调用函数的对象性质选择相应的重载函数来使用 如果对象是const的 则编译器使用const版本的重载函数 如果对象是非const的 则编译器使用非const版本的重载函数 const关键字可以被用于参与对重载函数的区分 如 voidprint voidprint const const成员函数 在函数f中不能调用对象 pa或a的非const成员函数 voidf A pa voidf A const成员函数 voidf constA pa voidf constA 思考 组合 Composition 是一种has a关系一个类可以将其他类的对象作为成员一种强的 拥有 关系 体现了严格的整体和部分的关系 部分和整体生命周期一样 第四章类与对象 类对象构造函数和析构函数const成员函数成员对象 类的组合静态成员友元小结 4 5类成员是其它类的对象 成员对象 一个类的成员可以是另外一个类的对象 也就是说一个对象可以包含另一个对象 称为成员对象 classComputer private CPUc1 c2 classCPU private doublefrequency 成员对象 classA intm public A m 0 A intm1 m m1 classB intn Aa public B n 0 B intn1 n n1 Bb1 b2 1 在创建包含成员对象的对象时 对成员对象的初始化是由成员对象类的构造函数来实现的 默认情况下 成员对象由成员对象类的默认构造函数进行初始化 成员对象的初始化 成员对象的初始化 classA intm public A m 0 A intm1 m m1 classB intn Aa public B n 0 B intn1 n n1 Bb1 b2 1 如需要调用成员对象的非默认构造函数对成员对象进行初始化 则要在包含成员对象的类的构造函数成员初始化表指出 成员对象的初始化 classA intm public A m 0 A intm1 m m1 classB intn Aa public B n 0 B intn1 a n1 n n1 Bb1 b2 1 判断 是否正确 classA intm public A intm1 m m1 classB intn Aa public B n 0 B intn1 n n1 Bb1 b2 1 构造函数的执行顺序是 如果有多个成员对象 按照成员对象在类的声明中出现的次序 依次调用其成员对象的构造函数 注意 并不是按照初始化列表中给出的顺序 再执行本类的构造函数的函数体 析构函数的调用执行顺序与构造函数相反 成员对象的初始化 成员对象的初始化 系统提供的隐式拷贝构造函数会去调用成员对象的拷贝构造函数 自定义的拷贝构造函数不会去调用成员对象的拷贝构造函数 必须要在成员初始化列表中显示地指出 若没有指出 则表示调用成员对象的默认构造函数 classA classB intz Aa public B B constB 成员初始化列表 成员初始化列表一般成员常量成员引用成员自定义的拷贝构造函数调用成员对象的拷贝构造函数显示调用成员对象的构造函数 第四章类与对象 类对象构造函数和析构函数const成员函数成员对象静态成员友元小结 同一个类的不同对象需要共享数据 怎么办 全局变量 4 6静态成员 classSavingAccount private charm name 40 存户姓名charm addr 60 存户地址doublem total 存款额doublem rate 利率 静态数据成员 必须在类外定义 定义时可以进行初始化数据类型类名 静态数据成员名 值 classA staticintshared intx y public A x y 0 voidincrease all intA shared 0 Aa1 a2 静态数据成员 C 国际标准 conststaticint或enum类型的数据成员可以在类定义中声明时初始化 classA staticconstintshared 0 intx y public A x y 0 voidincrease all Aa1 a2 静态数据成员 具有默认构造函数的static成员对象因为它们的默认构造函数会被调用 所以不必初始化 静态数据成员具有静态生存期 不属于任何一个对象 类的静态成员与该类的对象存在与否没有关系 静态数据成员 静态数据成员 classA intx y public A x y 0 voidincrease all staticintshared intA shared 0 intmain Aa a shared 4 A shared 4 思考 private的静态成员变量 不能在外部被访问 只能通过公有的成员函数访问 如果希望在产生任何对象之前就存取其class的privatestatic成员变量 怎么办 思考 classA public voidgetX private staticintx intA x 0 voidA getX cout x coutx intmain Aa a getX 静态成员函数 classA public staticvoidgetX private staticintx intA x 0 voidA getX cout x intmain A getX 静态成员函数 静态成员函数没有隐藏的形式参数this 静态成员函数静态成员函数只能访问静态成员 静态成员函数 classA public staticvoidf private intx voidA f cout x error classA public staticvoidf Aa private intx voidA f Aa cout x errorcout a x 静态成员的使用 除了在类中访问静态成员外 还可以在类的外部访问public静态成员 这时有两种访问方式 通过对象访问 通过类名访问 类的静态成员与该类的对象存在与否没有关系 设计模式设计模式是在大量的实践中总结和理论化之后优选的代码结构 编程风格以及解决问题的思考方式 设计模式就象经典的棋谱 不同的棋局 我们用不同的棋谱 免得自己再去思考和摸索 自从对象产生以来 在程序设计领域最具革命性的飞跃是设计模式的引进 设计模式是对应于公认的编程问题的经典解决方案 它独立于语言之外 其表述方法的特殊性使他能应用于许多情况之下 小知识 底层思维 抽象思维 向下 如何深入把握机器底层 从微观理解对象构造 底层思维语言构造编译转换对象内存模型运行时机制 向上 如何将我们周围的世界抽象为程序代码 抽象思维面向对象组件封装设计模
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国移动开封市2025秋招笔试行测题库及答案互联网运营
- 2025年上海市闵行区莘庄实验小学代课教师招聘考前自测高频考点模拟试题有完整答案详解
- 农药买卖合同合集15篇
- 同学聚会代表发言稿范文
- 2025年甘肃省金昌市事业单位招聘笔试模拟试卷附答案详解
- 2025年山东省公费师范生(定向临沂就业)竞岗选聘专项考试考前自测高频考点模拟试题附答案详解(完整版)
- 2025年济宁汶上县事业单位公开招聘工作人员(教育类)(33人)考前自测高频考点模拟试题完整参考答案详解
- 土地承包转让合同集锦15篇
- 2025年烟台市芝罘区卫生类事业单位公开招聘高层次人才(11人)考前自测高频考点模拟试题有答案详解
- 2025年老旧小区改造中居民功能需求与满意度影响因素分析报告
- (零模)苏州市2026届高三年级期初阳光调研试卷 历史试卷(含答案)
- 九年级英语上学期第一次月考(广东卷)(原卷版)
- 送教上门教师培训课件
- 急性宫外孕课件
- 码头生产调度管理办法
- 工业相机原理 课件 第五章-工业相机的参数和工作模式
- 智能巡查机器人系统设计
- 国货品牌跨界营销对消费者购买意愿的影响研究-基于感知价值理论
- 2025成人高等学校招生全国统一考试专升本《英语》试题及答案解析
- 五年级上册英语英语试题 Unit1-Unit2单元测试卷(无答案)译林版
- 2025中国铁路北京局集团有限公司招聘高校毕业生76人(三)笔试参考题库附带答案详解(10套)
评论
0/150
提交评论