




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
By秦汉关城1C+期末基本概念面向对象编程的三大特征1)封装2)继承3)多态虚函数、重载函数特点,有哪些约束虚函数是动态多态,重载函数是静态多态。重载函数之间要求函数返回值、函数名一致,但是参数不一致。虚函数要求函数返回值、函数名、参数都一致。纯虚函数作用?派生关系?如何实现?一、定义纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加“=0”virtualvoidfuntion()=0二、引入原因1、为了方便使用多态特性,我们常常需要在基类中定义虚拟函数。2、在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。为了解决上述问题,引入了纯虚函数的概念,将函数定义为纯虚函数(方法:virtualReturnTypeFunction()=0;),则编译器要求在派生类中必须予以重写以实现多态性。同时含有纯虚拟函数的类称为抽象类,它不能生成对象。这样就很好地解决了上述两个问题。三、相似概念1、多态性指相同对象收到不同消息或不同对象收到相同消息时产生不同的实现动作。C+支持两种多态性:编译时多态性,运行时多态性。a、编译时多态性:通过重载函数实现b、运行时多态性:通过虚函数实现。2、虚函数虚函数是在基类中被声明为virtual,并在派生类中重新定义的成员函数,可实现成员函数的动态覆盖(Override)3、抽象类包含纯虚函数的类称为抽象类。由于抽象类包含了没有定义的纯虚函数,所以不能定义抽象类的对象。派生类访问基类成员有哪些访问控制?对象呢?区分“派生类对象”和“派生类”对基类成员的访问权限。“派生类对象”对基类成员的访问权限:(1)对于公有继承,只有基类的公有成员可以被“派生类对象”访问,其他(保护和私有)成员不能被访问。By秦汉关城2(2)对于私有继承和保护继承,基类中所有成员都不能被“派生类对象”访问。“派生类”对基类中成员的访问权限:(1)对于公有继承,基类中的公有成员和保护成员可以被“派生类”访问,而基类中的私有成员不能被访问。(2)对私有继承和保护继承,也是基类中的公有成员和保护成员可以被“派生类”访问,而基类中的私有成员不能被访问。多态性如何实现?、多态性指相同对象收到不同消息或不同对象收到相同消息时产生不同的实现动作。C+支持两种多态性:编译时多态性,运行时多态性。a、编译时多态性:通过重载函数实现b、运行时多态性:通过虚函数实现。类和对象关系?每一个实体都是对象。有一些对象是具有相同的结构和特性的。每个对象都属于一个特定的类型,这个特定的类型称为类(class)。类代表了某一批对象的共性和特征。前面已说明:类是对象的模板,而对象是类的具体实例(instance)。正如同结构体类型和结构体变量的关系一样,需要先声明一个结构体类型,然后用它去定义结构体变量。同一个结构体类型可以定义出多个不同的结构体变量。在C+中也是先声明一个类类型,然后用它去定义若干个同类型的对象。对象就是类类型的一个变量。可以说类是对象的模板,是用来定义对象的一种抽象类型。类是抽象的,不占用内存,而对象是具体的,占用存储空间。深拷贝、浅拷贝区别?1.深拷贝是指源对象与拷贝对象互相独立,其中任何一个对象的改动都不会对另外一个对象造成影响。举个例子,一个人名叫张三,后来用他克隆(假设法律允许)了另外一个人,叫李四,不管是张三缺胳膊少腿还是李四缺胳膊少腿都不会影响另外一个人。比较典型的就是Value(值)对象,如预定义类型Int32,Double,以及结构(struct),枚举(Enum)等。2.浅拷贝是指源对象与拷贝对象共用一份实体,仅仅是引用的变量不同(名称不同)。对其中任何一个对象的改动都会影响另外一个对象。举个例子,一个人一开始叫张三,后来改名叫李四了,可是还是同一个人,不管是张三缺胳膊少腿还是李四缺胳膊少腿,都是这个人倒霉。比较典型的就有Reference(引用)对象,如Class(类)。深拷贝和浅拷贝的区别是在对象状态中包含其它对象的引用的时候,当拷贝一个对象时,如果需要拷贝这个对象引用的对象,则是深拷贝,否则是浅拷贝。抽象类作用?将不用来定义对象而只作为一种基本类型用作继承的类,称为抽象类(abstractclass),由于它常用作基类,通常称为抽象基类。凡是包含纯虚函数的类都是抽象类。By秦汉关城3如果在派生类中没有对所有的纯虚函数进行定义,则此派生类仍然是抽象类,不能用来定义对象。可以定义指向抽象类数据的指针变量。当派生类成为具体类后,就可以用这个指针指向派生类对象,然后通过该指针调用虚函数。带有纯虚函数的类称为抽象类。抽象类是一种特殊的类,它是为了抽象和设计的目的而建立的,它处于继承层次结构的较上层。抽象类是不能定义对象的,在实际中为了强调一个类是抽象类,可将该类的构造函数说明为保护的访问控制权限。抽象类的主要作用是将有关的组织在一个继承层次结构中,由它来为它们提供一个公共的根,相关的子类是从这个根派生出来的。抽象类刻画了一组子类的操作接口的通用语义,这些语义也传给子类。一般而言,抽象类只描述这组子类共同的操作接口,而完整的实现留给子类。抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出。如果派生类没有重新定义纯虚函数,而派生类只是继承基类的纯虚函数,则这个派生类仍然还是一个抽象类。如果派生类中给出了基类纯虚函数的实现,则该派生类就不再是抽象类了,它是一个可以建立对象的具体类了。函数的三种参数传递机制在C+中,参数传递的方式是“实虚结合”。按值传递(passbyvalue)地址传递(passbypointer)引用传递(passbyreference)按值传递的过程为:首先计算出实参表达式的值,接着给对应的形参变量分配一个存储空间,该空间的大小等于该形参类型的,然后把以求出的实参表达式的值一一存入到形参变量分配的存储空间中,成为形参变量的初值,供被调用函数执行时使用。这种传递是把实参表达式的值传送给对应的形参变量,故称这种传递方式为“按值传递”。使用这种方式,调用函数本省不对实参进行操作,也就是说,即使形参的值在函数中发生了变化,实参的值也完全不会受到影响,仍为调用前的值。/*passByvalue*/#includeusingnamespacestd;voidswap(int,int);intmain() inta=3,b=4;coutusingnamespacestd;voidswap(int*,int*);intmain() inta=3,b=4;coutusingnamespacestd;voidswap(intintmain()By秦汉关城5 inta=3,b=4;coutclasspointprivate:intx,y;public:point(intxx=0,intyy=0)/1.构造函数不能有返回值/2.缺省构造函数时,系统将自动调用该缺省构造函数初始化对象,缺省构造函数会将所有数据成员都/初始化为零或空/3.创建一个对象时,系统自动调用构造函数 x=xx;y=yy;cout/fatherclassclassVirtualbasepublic:virtualvoidDemon()=0;/pruevirtualfunctionvirtualvoidBase()coutDemon();inst-Base();虚函数和纯虚函数区别观点一:类里声明为虚函数的话,这个函数是实现的,哪怕是空实现,它的作用就是为了能让这个函数在它的子类里面可以被重载,这样的话,这样编译器就可以使用后期绑定来达到多态了纯虚函数只是一个接口,是个函数的声明而已,它要留到子类里去实现。classAprotected:voidfoo();/普通类函数virtualvoidfoo1();/虚函数virtualvoidfoo2()=0;/纯虚函数观点二:虚函数在子类里面也可以不重载的;但纯虚必须在子类去实现,这就像Java的接口一样。通常我们把很多函数加上virtual,是一个好的习惯,虽然牺牲了一些性能,但是增加了面向对象的多态性,因为你很难预料到父类里面的这个函数不在子类里面不去修改它的实现观点三:虚函数的类用于“实作继承”,继承接口的同时也继承了父类的实现。当然我们也可以完成自己的实现。纯虚函数的类用于“介面继承”,主要用于通信协议方面。关注的是接口的统一性,实现由子类完成。一般来说,介面类中只有纯虚函数的。观点四:带纯虚函数的类叫虚基类,这种基类不能直接生成对象,(否则会出现错误!)而只有被继承,并重写其虚函数后,才能使用。这样的类也叫抽象类。虚函数是为了继承接口和默认行为纯虚函数只是继承接口,行为必须重新定义。派生关系By秦汉关城91.派生类对象作为基类对象处理由于派生类具有所有基类的成员,所以把派生类的对赋给基类对象是合理的,不过要求这种继承方式必须是public方式。但是,反过来赋值会使基类中一具有派生类的成员(因为派生类的成员通常是比基类的成员多),所以这是不允许的2.基类指针指向派生类对象因为派生类对象也是基类对象,所以指向派生类对象的指针可以转换为指向基类对象的指针,这种引用方式是安全的,但是用这种方式只能引用基类成员。如果试图通过基类指针引用那些只有在派生类中才有的成员,编译系统会报告错误。3.派生类指针强制指向基类对象直接用派生类指针指向基类的对象,这种方式会导致语法错误。但可以将派生类强制转换为基类指针,然后就可以调用基类的成员了。这种强制转换使用的静态转型运算符,其使用格式如下:派生类对象指针=static_static(运算符优先顺序、组合遍历了15个级别之后,让我们再来总结一下。其中我们可以看出这样两个规律:规律一、按照操作数个数来区分,一元运算符高于二元运算符,二元运算符高于三元运算符;规律二、按照运算符的作用来区分,级别最高的是那些不是严格意义上的运算符,次之是算术运算符,位移运算符,关系运算符,位运算符,逻辑运算符,赋值运算符。此外还有两特别的地方需要注意:一、同为关系运算符,但=和!=的级别低于其它四个;二、第2组与第13组的操作符是右结合的,其它的都为左结合;通过分类我们大大减少了需要记忆的内容,遇到使用操作符的时候,我们只需想想它们是什么类型的运算符就可以确定它们之间的相对优先级,从而避免一些不必要的错误。编程进制转换:2、8、16进制字符串与十进制整形数之间的转换十进制转二进制:cppviewplaincopyprint?/十进制转二进制#includeusingname
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年企业人力资源管理师(人力资源薪酬福利管理师级)技能操作试卷
- 南京师范大学中北学院《油画(二)写生》2024-2025学年第一学期期末试卷
- 荆州理工职业学院《非参数统计》2024-2025学年第一学期期末试卷
- 西南政法大学《中学政治课教材分析》2024-2025学年第一学期期末试卷
- 湖南师范大学树达学院《专修足球(2)》2024-2025学年第一学期期末试卷
- 2025年护士执业资格考试护师考试模拟题及解析
- 2025年燃气储运行业趋势分析与初级考试预测题解析
- 江西农业大学南昌商学院《实验动物解剖学》2024-2025学年第一学期期末试卷
- 山西工程科技职业大学《生物工程专业大》2024-2025学年第一学期期末试卷
- 2025年殡葬行业职业认证与考试信息解读
- 光伏居间的合同8篇
- GB/T 45418-2025配电网通用技术导则
- 医疗风险防控培训课件
- 机械设计部绩效考核制度
- 诊疗规范培训课件
- 《KANO模型培训》课件
- 复苏室患者的交接流程
- 【人教版化学】选择性必修1 知识点默写小纸条(答案背诵版)
- DB21-T 2523-2015矿山地质环境恢复治理规程
- 新能源集控中心建设方案
- 《中国老年糖尿病诊疗指南(2024版)》解读课件
评论
0/150
提交评论