欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年虚函数,抽象方法,抽象类,接口的区别和联系 .pdf

    • 资源ID:30540824       资源大小:46.32KB        全文页数:6页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年虚函数,抽象方法,抽象类,接口的区别和联系 .pdf

    先看各自的概念:虚函数是动态联编的基础,它是引入派生概念之后用来表现基类和派生类成员函数之间的一种关系的。虚函数在基类中定义,它也是一种成员函数,而且是非静态成员函数。引自 msdn :若一个实例方法的声明中含有virtual 修饰符,则称该方法为虚拟方法;一个虚拟方法的实现可以由派生类取代。取代所继承的虚拟方法的实现的过程称为重写该方法;在一个虚拟方法调用中,该调用所涉及的那个实例的运行时类型确定了要被调用的究竟是该方法的哪一个实现。虚函数的限制:1.虚函数仅适用于有继承关系的类对象, 所以只有类的成员函数才能说明为虚函数. 2.静态成员函数不能是虚函数. 3.内联函数不能是虚函数. 4 构造函数不能是虚函数. 5.析构函数可以是虚函数. 接口可以有静态成员、嵌套类型、抽象、虚拟成员、属性和事件。实现接口的任何类都必须提供接口中所声明的抽象成员的定义。接口可以要求任何实现类必须实现一个或多个其他接口。对接口有以下限制:接口可以用任何可访问性来声明,但接口成员必须全都具有公共可访问性。不能向成员或接口自身附加安全性权限。接口可以定义类构造函数,但不能定义实例构造函数。每种语言都必须为需要成员的接口映射一个实现提供规则,因为不只一个接口可以用相同的签名声明成员,且这些成员可以有单独的实现。接口可以由类和结构来实现。为了指示类或结构实现了某接口,在该类或结构的基类列表中应该包含该接口的标识符。如果一个类或结构实现某接口,则它还隐式实现该接口的所有基接口。即使在类或结构的基类列表中没有显式列出所有基接口,也是这样。虚函数为了重载和多态的需要,在基类中是由定义的, 即便定义是空, 所以子类中可以重写也可以不写基类中的函数!纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java 中的接口函数!虚函数名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 6 页 - - - - - - - - - 引入原因:为了方便使用多态特性,我们常常需要在基类中定义虚函数。class Cman public: virtual void Eat(),; void Move(); private: ; class CChild : public CMan public: virtual void Eat(),;private: ; CMan m_man; CChild m_child; / 这才是使用的精髓,如果不定义基类的指针去使用,没有太大的意义CMan *p ; p = &m_man ; p-Eat(); /始终调用 CMan 的 Eat 成员函数,不会调用 CChild 的p = &m_child; p-Eat(); /如果子类实现 (覆盖) 了该方法,则始终调用CChild 的 Eat 函数名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 6 页 - - - - - - - - - / 不会调用 CMan 的 Eat 方法;如果子类没有实现该函数,则调用CMan 的Eat 函数p-Move(); /子类中没有该成员函数,所以调用的是基类中的纯虚函数引入原因: 1、同“虚函数”; 2、在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。/ 纯虚函数就是基类只定义了函数体,没有实现过程定义方法如下/ virtual void Eat() = 0; 直接=0 不要 在 cpp 中定义就可以了/ 纯虚函数相当于接口,不能直接实例话,需要派生类来实现函数定义/ 有的人可能在想,定义这些有什么用啊,我觉得很有用/ 比如你想描述一些事物的属性给别人,而自己不想去实现,就可以定/ 义为纯虚函数。说的再透彻一些。比如盖楼房,你是老板,你给建筑公司/ 描述清楚你的楼房的特性,多少层,楼顶要有个花园什么的/ 建筑公司就可以按照你的方法去实现了,如果你不说清楚这些, 可能建筑/ 公司不太了解你需要楼房的特性。用纯需函数就可以很好的分工合作了虚函数和纯虚函数区别观点一:类里声明为虚函数的话 , 这个函数是实现的,哪怕是空实现,它的作用就是为了能让这个函数在它的子类里面可以被重载,这样的话,这样编译器就可以使用后期绑定来达到多态了纯虚函数只是一个接口,是个函数的声明而已,它要留到子类里去实现。class A 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 6 页 - - - - - - - - - protected: void foo();/普通类函数virtual void foo1();/虚函数 virtual void foo2() = 0;/纯虚函数 观点二:虚函数在子类里面也可以不重载的; 但纯虚必须在子类去实现, 这就像 Java的接口一样。 通常我们把很多函数加上virtual,是一个好的习惯,虽然牺牲了一些性能,但是增加了面向对象的多态性, 因为你很难预料到父类里面的这个函数不在子类里面不去修改它的实现观点三:虚函数的类用于“实作继承”, 继承接口的同时也继承了父类的实现。当然我们也可以完成自己的实现。 纯虚函数的类用于“介面继承”,主要用于通信协议方面。关注的是接口的统一性,实现由子类完成。一般来说,介面类中只有纯虚函数的。观点四:带纯虚函数的类叫虚基类, 这种基类 不能直接生成对象 ,而只有被继承, 并重写其虚函数后,才能使用。这样的类也叫抽象类。虚函数是为了继承接口和默认行为纯虚函数只是继承接口,行为必须重新定义先对虚函数和抽象方法进行比较。虚函数是通过virtual来修饰,通过override在派生类中进行重载,从而实现方法的多态性的函数。虚函数不需要强制被重写,其本身也包含实现的部分这里给出一个虚函数的例子:using system; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 6 页 - - - - - - - - - using system.Web.UI; namespace WebTest public class Shape virtual public void Draw(System.Web.UIPage p) public class Circle:Shape override public void Draw(System.Web.UI.Page p) p.Response.write(在 A页面上绘制圆); public class Rectangle:Shape override public void Draw(System.Web.UI.Page p) p.Response.write(在 A页面上绘制矩形); 从代码里可以看出其实现了方法的多态性。另外需要注意的是虚函数的声明后面有 ,表明它是包含实现部分的。抽象方法故名思意是对类中方法的抽象,通过abstract来修饰,通过override在子类里重载。抽象方法只允许在抽象类中进行方法的声明,继承一个抽象类的的子类,必须实现这个抽象类中所有抽象方法的重载,不然这个子类就不能被实例化,子类还是抽象类。这里给个抽象方法的例子:public abstract class myclass public class myclass1:myclass public abstract int myint(); public override int myint() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 6 页 - - - - - - - - - 函数体; 通过上面的描述应该可以看出虚函数和抽象方法的区别和联系。抽象方法其实是隐式的virtual方法,但与virtual相比,它需要被强制进行重载且它只是声明,不含实现部分,抽象方法也不能被 virtual修饰只能通过abstract修饰接下来再谈下抽象类和接口的区别和联系抽象类是一种类型的类的抽象,通过 abstract来修饰,但它不能被实例化,可以包含抽象方法和抽象访问器,不能用sealed修饰符修饰(sealed修饰符表示密封类,即不能被继承的类)为了便于理解抽象类,这里举个例子:三角形,正方形,圆他们都有各自的特点,但他们又可以统称为图形。这里的图形就可以理解为抽象类。它是没有具体的实例的。那接口又是什么呢?接口由 interface声明,是特殊的抽象类,是方法、属性、事件和索引符的组合,沒有字段,其成员无执行方式,无构造函数,不允许进行运算符重载,接口和它的没有任何访问修饰符,它总是公共的,不能声明为虚拟或静态,继承自接口的派生类必须实现接口中的所有方法与抽象类相比它们有以下几点区别:1. 抽象类可以包含非抽象方法和抽象方法。这里非抽象方法就是抽象类自己的成员。而接口里都是“ 抽象方法 ” ,没有自己的成员2. 一个类可以继承自多个接口,但是只能继承一个类(包括抽象类)。3. 抽象类可以有字段。接口不能接口也可以理解为一个纯抽象类的演变( 纯抽象类: 一个抽象类里只有常量和public类型的方法的抽象类)。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 6 页 - - - - - - - - -

    注意事项

    本文(2022年虚函数,抽象方法,抽象类,接口的区别和联系 .pdf)为本站会员(Q****o)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开