当前位置: 首页 > wzjs >正文

制作做的网站如何上传网上用自己的网站做淘客

制作做的网站如何上传网上,用自己的网站做淘客,建设银行大学华东学院网站,免费版企业邮箱注册目录 1.多态的概念 1.1运行时多态 1.2 编译时多态 2.多态的定义以及实现 2.1 多态构成的条件 2.2 虚函数 2.3 虚函数的重写/覆盖 2.3.1 虚函数重写的两个例外 1.协变 2.析构函数的重写 2.4 override 和final关键字 2.5 重载/重写/隐藏的对比 ​编辑 3. 抽象类 和…

目录

1.多态的概念

1.1运行时多态

1.2 编译时多态

2.多态的定义以及实现

2.1 多态构成的条件

2.2 虚函数

2.3 虚函数的重写/覆盖

2.3.1 虚函数重写的两个例外

1.协变

2.析构函数的重写

2.4 override 和final关键字

2.5 重载/重写/隐藏的对比

​编辑 

3. 抽象类 和纯虚函数

 


哈喽啊,各位博友们,今天咱们来学习C++多态,今天只讲实现部分,原理部分明天会讲的。

1.多态的概念

1.1运行时多态

多态多态,顾名思义,多种状态,什么的多种状态?函数的多种状态。即当你传不同的对象时,虽然调用的是同一个函数,但其实这个函数执行的行为是不同的。举个例子:买票的时候,有学生票,成人票。票就是要传的对象,而你的买票的地方是函数,虽然都是买票的,但是对于学生,是学生票,对于成人,是成人票。(行为不同)以上说的是动态多态(运行时多态)。当然,多态还有静态多态(编译时多态)。

1.2 编译时多态

编译时 多态(静态多态)主要就是我们前面讲的函数重载和函数模板,他们传不同类型的参数就可以调⽤不同的 函数,通过参数不同达到多种形态,之所以叫编译时多态,是因为他们实参传给形参的参数匹配是在 编译时完成的,我们把编译时⼀般归为静态,运行时归为动态。

来看一个代码图片吧。

没学多态之前是不是认为,这个输出语句调用的是同一个函数,但其实不是的,其实是调用了两个函数(因为变量的类型不同),这就是多态。

2.多态的定义以及实现

2.1 多态构成的条件

定义:是⼀个继承关系的下的类对象,去调用同⼀函数,产生了不同的行为。

条件:

1.必须是基类的指针或者引用调用的虚函数。

2.被调用的函数必须是虚函数,并且完成了虚函数重写/覆盖。

还有几点要注意一下:

要实现多态效果,第⼀,必须是基类的指针或引用,因为只有基类的指针或引用才能既指向基类 对象又指向派生类对象;第二,派生类必须对基类的虚函数完成重写/覆盖,重写或者覆盖了,基类和派 生类之间才能有不同的函数,多态的不同形态效果才能达到。

 观看上面的代码图片,可知:ptr是基类的指针或者引用吧,并且调用的还是虚函数吧,并且子类的虚函数还完成了重写。

注意:调用虚函数的为父类的指针或者引用,你传递的实参是父类定义的对象就调用父类的函数,传递的实参是子类定义的对象就调用子类的函数,(这个很重要)

在重写基类虚函数时,派生类的虚函数在不加virtual关键字时,虽然也可以构成重写(因为继承后基类的虚函数被继承下来了在派生类依旧保持虚函数属性),但是该种写法不是很规范,不建议这样使用。

2.2 虚函数

前面老说虚函数,这到底是什么呢?可以这么说,虚函数是为了多态才出现的,同样,重写也是为了多态才出现的。

类成员函数前面加virtual修饰,那么这个成员函数被称为虚函数。注意非成员函数不能加virtual修饰。 

2.3 虚函数的重写/覆盖

虚函数的重写/覆盖:派生类中有⼀个跟基类完全相同的虚函数(即派生类虚函数与基类虚函数的返回值 类型、函数名字、参数列表完全相同(这个指的是参数的类型,参数有无缺省值不影响)),称派生类的虚函数重写了基类的虚函数。

OK,来看一个题:

 OK,咱们来分析一下这道题,先看main函数,p是指向B类的,所以可以认为p是不是属于B的。那么p调用test函数。但是这个test函数是A类里的呀,好,B继承了A,所以B类定义的指针也可以调用test函数。test函数里有个func函数。

那么这个func函数到底是A类的this指针调用的,还是B类的this指针调用的呢?是A类this指针调用的,因为継承不能说把this指针都给继承过去吧,那就太扯淡了。正好,回顾一下多态的条件,这里是不是构成了多态?是的。但是,这里是B类的指针调用的test函数,所以应该打印B类的虚函数,但是呢,B类虚函数前面没有virtual呀?别着急,咱们前面说的,这样也可以,因为此时是继承了A类的函数名,返回类型,参数列表+B类的函数体。所以说,这里的val是1呀,不是0.所以说答案是B->1。

2.3.1 虚函数重写的两个例外

1.协变

咱们知道,只有返回类型,函数名,参数列表相同的才可以叫做重写,但是协变不同,协变可以让返回值类型不同,也可以构成重写。但是需要注意几点:。即基类虚函数返回基类对象的指针或者引 用,派生类虚函数返回派生类对象的指针或者引用。

当然,这里不仅仅可以返回当前基类和子类的类型,还可以返回其他有继承关系的类和类型。

2.析构函数的重写

析构函数的重写,析构函数名统一处理成destructor。

这里本人也分为几个部分,先来看第一个部分:

  

咱们先来看堆上申请的空间里存放资源的析构。这里delete会调用析构函数对吧。那么先来看第一个图,如果不加上virtual,那么这俩析构函数就不构成多态,由于他俩都是A类的指针,所以说只会析构A类中的资源。但是,假如B类中有资源,那么你只析构A类的,不管B类的,是不是会造成资源泄露的安全问题呀,所以,这种不构成多态的方法不可取。

那么第二张图就是构成了多态的情况,这种情况才是正确的情况。(即基类中的函数要设计成 虚函数,为了构成多态)。这种情况下,B类的析构函数是A类析构函数的重写(编译器对析 构函数的名称做了特殊处理,编译后析构函数的名称统⼀处理成destructor,所以基类的析构函数加了 virtual修饰,派⽣类的析构函数就构成重写。)那么就可以同一个函数实现两种不同的行为了。

这里的第二个new B前面写A*,单纯是为了演示第一种不是多态的情况。还有就是子类的析构函数,调用完子类的析构,会再自动的调用基类的析构函数。

第二个就是对于栈上开的空间,执行完直接析构了(需要遵守子类的先析构,父类的再析构)。并且,这里有人就会说了,这里没有virtual,析构函数的名字又相同,不是会构成成员函数隐藏吗?不是只会调用子类的析构函数吗?不不,在这里,析构函数不遵守什么隐藏规则,不然就资源泄露了,完蛋了就。

2.4 override 和final关键字

从上⾯可以看出,C++对虚函数重写的要求⽐较严格,但是有些情况下由于疏忽,比如函数名写错参数 写错等导致无法构成重写,而这种错误在编译期间是不会报出的,只有在程序运行时没有得到预期结 果才来debug会得不偿失,因此C++11提供了override,可以帮助用户检测是否重写。如果我们不想让 派生类重写这个虚函数,那么可以用final去修饰。

 

这个没什么好说的,就是对于一些极端情况发生的检查。

2.5 重载/重写/隐藏的对比

 

3. 抽象类 和纯虚函数

在虚函数的后⾯写上=0,则这个函数为纯虚函数,纯虚函数不需要定义实现(实现没啥意义因为要被 派生类重写,但是语法上可以实现),只要声明即可。包含纯虚函数的类叫做抽象类,抽象类不能实例 化出对象,如果派生类继承后不重写纯虚函数,那么派生类也是抽象类纯虚函数某种程度上强制了 派生类重写虚函数,因为不重写实例化不出对象。

可以看出来,派生类中对虚函数进行了重写,那么这个派生类实例化对象就不会报错了。 

虚函数就是为了多态而出现的,所以不必要时没必须要写虚函数。

好啦,本篇就讲到这,剩下的比较难的原理部分以及扩展部分,明天讲。

本篇完..........

 


文章转载自:

http://sRwZ37ZN.bxmbj.cn
http://k7TZDttG.bxmbj.cn
http://GtlAUQjS.bxmbj.cn
http://VQrsdmz9.bxmbj.cn
http://cUDPOCHT.bxmbj.cn
http://xQ8l6rUe.bxmbj.cn
http://Nmo36FWS.bxmbj.cn
http://xN60Htju.bxmbj.cn
http://yQR889ns.bxmbj.cn
http://Nh1O2V4e.bxmbj.cn
http://hvoDBa6x.bxmbj.cn
http://YuaClmqd.bxmbj.cn
http://6w9lNHiw.bxmbj.cn
http://fu98SqF5.bxmbj.cn
http://OvfeBw5R.bxmbj.cn
http://k3jWQA2Q.bxmbj.cn
http://XUan7t9t.bxmbj.cn
http://HxnmRUDO.bxmbj.cn
http://WpJmla60.bxmbj.cn
http://Fa4nrocD.bxmbj.cn
http://15TkZVdr.bxmbj.cn
http://Pn109NKs.bxmbj.cn
http://WmrR3Ztu.bxmbj.cn
http://KDdSKn5n.bxmbj.cn
http://32GKxtxz.bxmbj.cn
http://0jPmukqt.bxmbj.cn
http://LIAC3F7b.bxmbj.cn
http://xKcayZ3S.bxmbj.cn
http://X9lTPvSu.bxmbj.cn
http://3Ae17TEw.bxmbj.cn
http://www.dtcms.com/wzjs/690883.html

相关文章:

  • 沈阳网站设计培训班营销型网站案例 注册公司
  • 做课题的网站有多少是备案的优化营商环境个人心得
  • 网站建设与维护大作业html5视频网站开发
  • 郑州网络推广公司排名益阳网站seo
  • 重庆建筑网络平台网络优化seo薪酬
  • 电子商务网站建设的书酒店预定类网站建设
  • 佛山提供网站设计方案公司本地的上海网站建设公
  • 外贸网站推广 上海wordpress 全局广告
  • 大鹏新区住房建设局网站品牌网站要这么做
  • aspnet网站开发实例教程品牌推广理论
  • 网站做优化应该具备什么企业服务官网
  • 康县建设局网站外贸网站制作公司哪家好
  • 网站流量如何来wordpress上传阿里云
  • 常州市网站优化湖南张家界建设厅网站
  • 电子商城网站开发项目经验潍坊建设街邮政公司
  • 广州商务网站建设电话wordpress 资讯模板
  • 怀化冰山涯IT网站建设公司php的网站模板
  • 免费自助网站建站百度pc端提升排名
  • 有些中小网站线上平台推广是做什么的
  • 网站建设资讯域名注册美橙
  • 温江做网站公司厦门住房和建设局网站
  • 杨浦网站建设纯静态网站页面优化
  • 网站qq代码生成wordpress restfulapi
  • app下载安装官方网站水果网页制作模板
  • 用html做的游戏网站wordpress怎么装主题
  • flash网站案例网站建设平台选用
  • 手机版免费申请微网站开个小门面装修找谁
  • 企业网站属于广告吗外贸企业网站评价案例
  • 做网站用的文本编辑器龙胜网站建设公司
  • 企业网站建设费用记入网站哪个公司做