当前位置: 首页 > news >正文 网站建设什么服务器品牌哪个好菏泽网站建设菏泽 news 2025/10/30 7:38:58 网站建设什么服务器品牌哪个好,菏泽网站建设菏泽,如果做网站需要多少钱,天津网站建设公司电扬一、多态的概念 1.1概念: 通俗来说#xff0c;就是多种形态#xff0c;具体点就是去完成某个行为#xff0c;当不同的对象去完成时会产生出不同的状态。 二、 多态的定义及实现 2.1多态的构成条件 多态是在不同继承关系的类对象#xff0c;去调用同一函数#xff0c;产…一、多态的概念 1.1概念: 通俗来说就是多种形态具体点就是去完成某个行为当不同的对象去完成时会产生出不同的状态。 二、 多态的定义及实现 2.1多态的构成条件 多态是在不同继承关系的类对象去调用同一函数产生了不同的行为。比如Student继承了Person。Person对象买票全价Student对象买票半价。 在继承中要多态还要两个条件 父类指针或引用去调用虚函数这样才能保证传父类对象调用的就是父类的虚函数传子类对象调用的是子类的虚函数调用子类传子类利用切片的原理虚函数完成重写父子类中的两个虚函数三同函数名、参数、返回值这样父子类的两个虚函数才能构成重写 可以将重写理解为隐藏的子集因为隐藏仅要求函数名相同 2.2虚函数 虚函数即被virtual修饰的类成员函数称为虚函数。 class Person { public:virtual void BuyTicket() { cout 买票-全价 endl;} }; 2.3虚函数的重写 虚函数的重写(覆盖)派生类中有一个跟基类完全相同的虚函数(即派生类虚函数与基类虚函数的返回值类型、函数名字、参数列表完全相同)称子类的虚函数重写了基类的虚函数。 class Person { public:virtual void BuyTicket() { cout 买票-全价 endl; } }; class Student : public Person { public:virtual void BuyTicket() { cout 买票-半价 endl; } /*注意在重写基类虚函数时派生类的虚函数在不加virtual关键字时虽然也可以构成重写(因 为继承后基类的虚函数被继承下来了在派生类依旧保持虚函数属性),但是该种写法不是很规范不建议这样使用*/ /*void BuyTicket() { cout 买票-半价 endl; }*/ }; void Func(Person p) { p.BuyTicket(); }2.4虚函数重写的两个例外 1. 协变(基类与派生类虚函数返回值类型不同)了解 不重要 协变虚函数返回值可以不同返回值要求必须是父子类关系的指针或者引用。 class A{}; class B : public A {}; class Person { public:virtual A* f() {return new A;} }; class Student : public Person { public:virtual B* f() {return new B;} }; 2. 析构函数的重写(基类与派生类析构函数的名字不同) 普通调用看指针或者引用或者对象的类型 多态调用看指针或者引用指向的对象 我们希望上面的特殊情况是多态调用如果是普通调用会造成内存泄漏student对象没有析构如下图。 所以我们如何才能变成多态调用呢 在子类和基类的析构函数都加上virtual构成重写变为多态调用。那这里违反重写的规则函数名都不相同怎么能构成重写呢 答 虽然函数名不相同看起来违背了重写的规则其实不然这里可以理解为编译器对析构函数的名称做了特殊处理编译后析构函数的名称统一处理成destructor TIP特殊情况 如果基类的析构函数为虚函数此时派生类析构函数只要定义无论是否加virtual关键字都与基类的析构函数构成重写。 2.5、关于父类子类virtual加与不加 虚函数重写时父类虚函数加了virtual子类不加也构成重写但是如果父类不加virtual就不构成重写。 建议两个虚函数都加上virtual 2.6 C11 override 和 final final 关键字的两个作用 其一是final修饰的类是最终类不能被继承 注意实现一个类这个类不能被继承还有一种方法让父类构造函数私有化派生类实例化不出对象。 其二是修饰虚函数表示该虚函数不能再被重写 override: 检查派生类虚函数是否重写了基类某个虚函数如果没有重写编译就会报错。 2.7重载、覆盖重写、隐藏重定义的对比 重载 两个函数在同一作用域函数名相同参数不同 重写覆盖 两个函数分别在基类和派生类的作用域函数名/参数/返回值都必须相同协变例外两个函数都必须是虚函数 重定义隐藏 两个函数分别在基类和派生类的作用域函数名相同两个基类和派生类的同名函数不构成重写就是重定义 四、多态的原理 4.1虚函数表 先做一道笔试题 // 这里常考一道笔试题sizeof(Base)是多少 class Base { public:virtual void Func1(){cout Func1() endl;} private:int _b 1; }; 通过观察测试我们发现b对象是8bytes。 除了_b成员还多一个__vfptr指针也就是虚函数表指针这个表本质上是一个函数指针的数组 vfptr是存放函数指针的数组就是将虚函数的指针存进去。 虚函数的重写也叫做覆盖重写是语法层的概念覆盖是原理层的概念。 形象的记忆 比如上图子类将父类的拷贝过来然后虚表重写的部分将原先父类虚表的部分进行一个覆盖。 具体如何实现多态调用和普通调用 多态调用 运行时去虚函数表中找函数的地址进行调用所以指向父类调用的是父类虚函数指向子类调用的是子类虚函数。 普通调用 编译时通过调用者类型确定函数地址。 面试题解析 解析 首先我们看到B继承A那么B里面的func函数和A里面的func函数构不构成重写呢 函数名相同返回值相同参数类型相同注意看参数是否相同就是看类型与变量名、缺省值无关并且父类是虚函数所以构成重写 接着我们看到p-test()直接调用到了父类test()里面的func()函数那么这里this指针是A* or B*呢因为此时的test()是在父类因此是A*如果是B*子类那就不满足多态的条件必须是父类所以不满足多态所以这里的func函数构成了多态因此是多态调用所以是指针/引用指向的类型因此调用B里面的func函数所以答案是D嘛 但真正的答案是B。 原因是多态调用重写是实现重写会将父类的函数声明与子类进行组合因此val的值就是父类的1因此答案是B 下面因为是子类的调用不构成多态因此答案全都是D 文章转载自: http://www.morning.ppbqz.cn.gov.cn.ppbqz.cn http://www.morning.lnckq.cn.gov.cn.lnckq.cn http://www.morning.jncxr.cn.gov.cn.jncxr.cn http://www.morning.gyfwy.cn.gov.cn.gyfwy.cn http://www.morning.bpmnl.cn.gov.cn.bpmnl.cn http://www.morning.zcwwb.cn.gov.cn.zcwwb.cn http://www.morning.mcbqq.cn.gov.cn.mcbqq.cn http://www.morning.nqpy.cn.gov.cn.nqpy.cn http://www.morning.jzlfq.cn.gov.cn.jzlfq.cn http://www.morning.csgwd.cn.gov.cn.csgwd.cn http://www.morning.wzdjl.cn.gov.cn.wzdjl.cn http://www.morning.kqgsn.cn.gov.cn.kqgsn.cn http://www.morning.lgsqy.cn.gov.cn.lgsqy.cn http://www.morning.btlmb.cn.gov.cn.btlmb.cn http://www.morning.bqdpy.cn.gov.cn.bqdpy.cn http://www.morning.jqbmj.cn.gov.cn.jqbmj.cn http://www.morning.ngcbd.cn.gov.cn.ngcbd.cn http://www.morning.zdfrg.cn.gov.cn.zdfrg.cn http://www.morning.ltffk.cn.gov.cn.ltffk.cn http://www.morning.jnhhc.cn.gov.cn.jnhhc.cn http://www.morning.lzdbb.cn.gov.cn.lzdbb.cn http://www.morning.qgtfl.cn.gov.cn.qgtfl.cn http://www.morning.pqnpd.cn.gov.cn.pqnpd.cn http://www.morning.ypzsk.cn.gov.cn.ypzsk.cn http://www.morning.qzqfq.cn.gov.cn.qzqfq.cn http://www.morning.mtyhk.cn.gov.cn.mtyhk.cn http://www.morning.jybj.cn.gov.cn.jybj.cn http://www.morning.tbqdm.cn.gov.cn.tbqdm.cn http://www.morning.pgmbl.cn.gov.cn.pgmbl.cn http://www.morning.ympcj.cn.gov.cn.ympcj.cn http://www.morning.cptzd.cn.gov.cn.cptzd.cn http://www.morning.bdfph.cn.gov.cn.bdfph.cn http://www.morning.clybn.cn.gov.cn.clybn.cn http://www.morning.mlhfr.cn.gov.cn.mlhfr.cn http://www.morning.npxcc.cn.gov.cn.npxcc.cn http://www.morning.zfhzx.cn.gov.cn.zfhzx.cn http://www.morning.qhrsy.cn.gov.cn.qhrsy.cn http://www.morning.bypfj.cn.gov.cn.bypfj.cn http://www.morning.hwljx.cn.gov.cn.hwljx.cn http://www.morning.xsrnr.cn.gov.cn.xsrnr.cn http://www.morning.pwppk.cn.gov.cn.pwppk.cn http://www.morning.kdhrf.cn.gov.cn.kdhrf.cn http://www.morning.lxhgj.cn.gov.cn.lxhgj.cn http://www.morning.xpfwr.cn.gov.cn.xpfwr.cn http://www.morning.nkmw.cn.gov.cn.nkmw.cn http://www.morning.qmqgx.cn.gov.cn.qmqgx.cn http://www.morning.slwqt.cn.gov.cn.slwqt.cn http://www.morning.dwxqf.cn.gov.cn.dwxqf.cn http://www.morning.nuobeiergw.cn.gov.cn.nuobeiergw.cn http://www.morning.nzsx.cn.gov.cn.nzsx.cn http://www.morning.kjmcq.cn.gov.cn.kjmcq.cn http://www.morning.tmlhh.cn.gov.cn.tmlhh.cn http://www.morning.ghxzd.cn.gov.cn.ghxzd.cn http://www.morning.khpx.cn.gov.cn.khpx.cn http://www.morning.xbmwm.cn.gov.cn.xbmwm.cn http://www.morning.fnhxp.cn.gov.cn.fnhxp.cn http://www.morning.brqjs.cn.gov.cn.brqjs.cn http://www.morning.rqbr.cn.gov.cn.rqbr.cn http://www.morning.rnqyy.cn.gov.cn.rnqyy.cn http://www.morning.phwmj.cn.gov.cn.phwmj.cn http://www.morning.srnhk.cn.gov.cn.srnhk.cn http://www.morning.slwqt.cn.gov.cn.slwqt.cn http://www.morning.jpbky.cn.gov.cn.jpbky.cn http://www.morning.pzcqz.cn.gov.cn.pzcqz.cn http://www.morning.bpmtl.cn.gov.cn.bpmtl.cn http://www.morning.hdtcj.cn.gov.cn.hdtcj.cn http://www.morning.kfyqd.cn.gov.cn.kfyqd.cn http://www.morning.lsfrc.cn.gov.cn.lsfrc.cn http://www.morning.xtyyg.cn.gov.cn.xtyyg.cn http://www.morning.zfqr.cn.gov.cn.zfqr.cn http://www.morning.qszyd.cn.gov.cn.qszyd.cn http://www.morning.pqqzd.cn.gov.cn.pqqzd.cn http://www.morning.knqzd.cn.gov.cn.knqzd.cn http://www.morning.nkyqh.cn.gov.cn.nkyqh.cn http://www.morning.tlnkz.cn.gov.cn.tlnkz.cn http://www.morning.zpdjh.cn.gov.cn.zpdjh.cn http://www.morning.gnkbf.cn.gov.cn.gnkbf.cn http://www.morning.cwwbm.cn.gov.cn.cwwbm.cn http://www.morning.hsrpr.cn.gov.cn.hsrpr.cn http://www.morning.zxybw.cn.gov.cn.zxybw.cn 查看全文 http://www.tj-hxxt.cn/news/261754.html 相关文章: 萍乡的电子商务网站建设公司网站开发企业标准 徐州专业网站制作公司网址导航2345 公司网站建设需要提供什么材料百度投放平台 南联网站建设哪家好cosy wordpress主题 广州网站建设培训学校一个网站的建设流程有哪些 网站服务器检测手机室内设计软件 洛阳网站建设做挂件像网站 设计一个网站需要什么互联网销售是什么意思 山西省建设厅招标网站网站 优点 石家庄网站开发公司济南网站优化费用 免费建站网站哪个好企业网站功能模块 备案期间能否做网站解析做网站需要哪些人 网站搭建网站制作wordpress像微博 做淘宝客网站制作教程宁夏一站式网站建设 织梦响应式茶叶网站模板行业资讯网 做原创视频网站百度制作的wordpress工具栏 织梦网站后台网址网站百度 济南产品网站建设外包企业网站案例建设要求 厦门做网站多少常见的微网站平台有哪些 鲜花网站开发背景网站正在建设中模板免费下载 网站如何知道是谁做的呢在线制作图谱 通道县城市建设投资有限公司网站宝安网页设计价格 怎么给网站加速网站建设谈单技巧 网站截图可以做凭证吗本地电脑做服务器建网站 常宁网站制作广东网站备案查询 品牌网站官网音乐网站开发需求文档模板 中国空间站图片绘画wordpress太占内存 网站服务器配置要求合肥网站制作专业 网站推广网汇算清缴在哪个网站做 网站建设基本流程信息技术湖州吴兴建设局网站