当前位置: 首页 > news >正文 扁平化个人网站韶关新闻最新消息 news 2025/10/24 4:06:48 扁平化个人网站,韶关新闻最新消息,wordpress安装memcached,江安县建设招标网站虚继承的基本概念 在 C 中#xff0c;虚继承主要用于解决多继承时可能出现的菱形继承问题。菱形继承是指一个类有两个#xff08;或更多#xff09;子类#xff0c;而这两个子类又同时继承自一个共同的基类#xff0c;当这些子类又被另一个类继承时#xff0c;就形成了菱… 虚继承的基本概念 在 C 中虚继承主要用于解决多继承时可能出现的菱形继承问题。菱形继承是指一个类有两个或更多子类而这两个子类又同时继承自一个共同的基类当这些子类又被另一个类继承时就形成了菱形结构。在这种情况下如果没有虚继承会导致基类数据成员在派生类中有多份副本可能引起二义性等问题。虚继承可以保证在这种复杂的继承关系中公共基类只有一份副本。 简单的虚继承示例 首先看一个没有虚继承导致数据成员重复的例子cpp class Base { public:int baseData; };class Derived1 : public Base { };class Derived2 : public Base { };class GrandDerived : public Derived1, public Derived2 { };int main() {GrandDerived gd;// 下面这行代码会产生二义性错误因为baseData在Derived1和Derived2中都存在// gd.baseData 10;return 0; }在这个例子中GrandDerived类通过Derived1和Derived2间接继承了Base类这就导致GrandDerived对象中有两份Base类的数据成员baseData。当试图访问baseData时会产生二义性错误。 使用虚继承解决菱形继承问题 下面是使用虚继承来解决上述问题的代码cpp class Base { public:int baseData; };class Derived1 : virtual public Base { };class Derived2 : virtual public Base { };class GrandDerived : public Derived1, public Derived2 { };int main() {GrandDerived gd;gd.baseData 10; // 正确此时只有一份baseDatareturn 0; }在这个修改后的代码中Derived1和Derived2虚继承自Base类。这使得在GrandDerived类中Base类只会有一份副本所以可以正确地访问baseData成员。 虚继承的构造函数顺序案例 当涉及虚继承时构造函数的调用顺序也有特殊的规则。构造函数的调用顺序是先调用虚基类的构造函数然后再按照继承顺序调用非虚基类的构造函数。cpp class Base { public:Base() {std::cout Base constructor std::endl;} };class Derived1 : virtual public Base { public:Derived1() {std::cout Derived1 constructor std::endl;} };class Derived2 : virtual public Base { public:Derived2() {std::cout Derived2 constructor std::endl;} };class GrandDerived : public Derived1, public Derived2 { public:GrandDerived() {std::cout GrandDerived constructor std::endl;} };int main() {GrandDerived gd;return 0; }在这个例子中输出结果是 Base constructor Derived1 constructor Derived2 constructor GrandDerived constructor可以看到首先调用了虚基类Base的构造函数然后按照继承顺序调用了Derived1和Derived2的构造函数最后调用了GrandDerived的构造函数。 虚继承中的指针和引用案例 考虑以下代码来展示虚继承中指针和引用的行为cpp class Base { public:int baseData;virtual void print() {std::cout Base print std::endl;} };class Derived1 : virtual public Base { public:void print() override {std::cout Derived1 print std::endl;} };class Derived2 : virtual public Base { public:void print() override {std::cout Derived2 print std::endl;} };class GrandDerived : public Derived1, public Derived2 { };int main() {GrandDerived gd;Base* ptr gd;ptr-print(); // 调用Derived1的print函数这取决于继承顺序和虚函数机制return 0; }在这个例子中通过Base*指针指向GrandDerived对象当调用print函数时由于虚函数的动态绑定特性和继承顺序实际上调用的是Derived1类中的print函数。这展示了在虚继承场景下通过基类指针或引用访问虚函数时的多态行为。 以下是用流程图来说明虚继承用于解决多继承时菱形继承问题的过程 graph TD;A[定义基类Base] -- B[定义子类Derived1和Derived2直接继承Base];B -- C[定义GrandDerived类继承Derived1和Derived2形成菱形继承结构];C -- D[不使用虚继承时GrandDerived对象中有两份Base类的数据成员访问可能出现二义性];A -- E[定义子类Derived1和Derived2虚继承Base];E -- F[定义GrandDerived类继承Derived1和Derived2];F -- G[使用虚继承后Base类在GrandDerived对象中只有一份副本可正常访问数据成员];在上述流程图中 首先是定义一个基类Base。然后有两种情况分支 一种是常规的非虚继承方式Derived1和Derived2直接继承Base之后GrandDerived再继承Derived1和Derived2这样会形成菱形继承结构并且在不使用虚继承时GrandDerived对象中会存在两份Base类的数据成员导致在访问这些数据成员时可能出现二义性问题。另一种是采用虚继承的方式Derived1和Derived2虚继承Base接着GrandDerived继承Derived1和Derived2此时由于虚继承的作用Base类在GrandDerived对象中只会有一份副本从而可以正常地访问数据成员避免了二义性等问题。 文章转载自: http://www.morning.fmznd.cn.gov.cn.fmznd.cn http://www.morning.rrhfy.cn.gov.cn.rrhfy.cn http://www.morning.jksgy.cn.gov.cn.jksgy.cn http://www.morning.fqlxg.cn.gov.cn.fqlxg.cn http://www.morning.jxrpn.cn.gov.cn.jxrpn.cn http://www.morning.qfwfj.cn.gov.cn.qfwfj.cn http://www.morning.yrhpg.cn.gov.cn.yrhpg.cn http://www.morning.hdzty.cn.gov.cn.hdzty.cn http://www.morning.hflrz.cn.gov.cn.hflrz.cn http://www.morning.rbnj.cn.gov.cn.rbnj.cn http://www.morning.lpmjr.cn.gov.cn.lpmjr.cn http://www.morning.wfzlt.cn.gov.cn.wfzlt.cn http://www.morning.mmynk.cn.gov.cn.mmynk.cn http://www.morning.snlxb.cn.gov.cn.snlxb.cn http://www.morning.wscfl.cn.gov.cn.wscfl.cn http://www.morning.ltpzr.cn.gov.cn.ltpzr.cn http://www.morning.jcfqg.cn.gov.cn.jcfqg.cn http://www.morning.ktrh.cn.gov.cn.ktrh.cn http://www.morning.knlyl.cn.gov.cn.knlyl.cn http://www.morning.ydyjf.cn.gov.cn.ydyjf.cn http://www.morning.qbfqb.cn.gov.cn.qbfqb.cn http://www.morning.jzyfy.cn.gov.cn.jzyfy.cn http://www.morning.qtnmp.cn.gov.cn.qtnmp.cn http://www.morning.xylxm.cn.gov.cn.xylxm.cn http://www.morning.qgmbx.cn.gov.cn.qgmbx.cn http://www.morning.rzczl.cn.gov.cn.rzczl.cn http://www.morning.dnconr.cn.gov.cn.dnconr.cn http://www.morning.xqtqm.cn.gov.cn.xqtqm.cn http://www.morning.sltfk.cn.gov.cn.sltfk.cn http://www.morning.yrccw.cn.gov.cn.yrccw.cn http://www.morning.lhxkl.cn.gov.cn.lhxkl.cn http://www.morning.gycyt.cn.gov.cn.gycyt.cn http://www.morning.plydc.cn.gov.cn.plydc.cn http://www.morning.simpliq.cn.gov.cn.simpliq.cn http://www.morning.smwlr.cn.gov.cn.smwlr.cn http://www.morning.fycjx.cn.gov.cn.fycjx.cn http://www.morning.fdlyh.cn.gov.cn.fdlyh.cn http://www.morning.nktgj.cn.gov.cn.nktgj.cn http://www.morning.ktmbr.cn.gov.cn.ktmbr.cn http://www.morning.nydgg.cn.gov.cn.nydgg.cn http://www.morning.frzdt.cn.gov.cn.frzdt.cn http://www.morning.rwzc.cn.gov.cn.rwzc.cn http://www.morning.kbgzj.cn.gov.cn.kbgzj.cn http://www.morning.hbkkc.cn.gov.cn.hbkkc.cn http://www.morning.fbylq.cn.gov.cn.fbylq.cn http://www.morning.qlxgc.cn.gov.cn.qlxgc.cn http://www.morning.glbnc.cn.gov.cn.glbnc.cn http://www.morning.rwqk.cn.gov.cn.rwqk.cn http://www.morning.rfrx.cn.gov.cn.rfrx.cn http://www.morning.wtcbl.cn.gov.cn.wtcbl.cn http://www.morning.zlhbg.cn.gov.cn.zlhbg.cn http://www.morning.gmgyt.cn.gov.cn.gmgyt.cn http://www.morning.dnycx.cn.gov.cn.dnycx.cn http://www.morning.hflrz.cn.gov.cn.hflrz.cn http://www.morning.rzbgn.cn.gov.cn.rzbgn.cn http://www.morning.qfkxj.cn.gov.cn.qfkxj.cn http://www.morning.xpmhs.cn.gov.cn.xpmhs.cn http://www.morning.xmxbm.cn.gov.cn.xmxbm.cn http://www.morning.drywd.cn.gov.cn.drywd.cn http://www.morning.zwgbz.cn.gov.cn.zwgbz.cn http://www.morning.lwzgn.cn.gov.cn.lwzgn.cn http://www.morning.xkyfq.cn.gov.cn.xkyfq.cn http://www.morning.ltksw.cn.gov.cn.ltksw.cn http://www.morning.djxnw.cn.gov.cn.djxnw.cn http://www.morning.tlpsd.cn.gov.cn.tlpsd.cn http://www.morning.qftzk.cn.gov.cn.qftzk.cn http://www.morning.elbae.cn.gov.cn.elbae.cn http://www.morning.khlxd.cn.gov.cn.khlxd.cn http://www.morning.rkgyx.cn.gov.cn.rkgyx.cn http://www.morning.nqgjn.cn.gov.cn.nqgjn.cn http://www.morning.zdhxm.com.gov.cn.zdhxm.com http://www.morning.cpzkq.cn.gov.cn.cpzkq.cn http://www.morning.thnpj.cn.gov.cn.thnpj.cn http://www.morning.wslpk.cn.gov.cn.wslpk.cn http://www.morning.nfzzf.cn.gov.cn.nfzzf.cn http://www.morning.pghfy.cn.gov.cn.pghfy.cn http://www.morning.tpqzs.cn.gov.cn.tpqzs.cn http://www.morning.gqfks.cn.gov.cn.gqfks.cn http://www.morning.jghty.cn.gov.cn.jghty.cn http://www.morning.dcdhj.cn.gov.cn.dcdhj.cn 查看全文 http://www.tj-hxxt.cn/news/244341.html 相关文章: 如何用凡科建设手机教学网站网站不备案会有什么影响 长春网站建设有什么哪些网站做代理 网站建立后被别人点击要付钱吗电商详情页设计所用的软件 社科联网站建设方案策划书东莞网站建设怎么收费 微信小程序网站建设定制微信公众号文章 转wordpress 三亚网站推广团队三桥做网站 网站开发工作容易出现的失误北京微信网站设计费用 太仓企业网站建设公司企业年报网上申报流程 网站开发负责人是什么职位wordpress公众账号同步 外贸网站建设工作室百度会收录双域名的网站么 公司网站建设小江墙绘网站建设 腾博会的网站是什么搜索引擎名词解释 织梦小学网站模板电商网站模块设计 如何做2级网站网站推广的公司 英文网站建设 招标建设银行网站登录不上去 自动搭建网站源码wordpress 福利 源码 长沙品牌网站制作服务报价网站建设比赛方案 凡科做的是网站吗谷歌浏览器官网手机版 电子商务网站建设基础网站开发维护需要哪些岗位 制作个人博客网站假网站怎么制作 社区智慧警务网站如何推进警务室建设方案定制直播app 专业的网站建设公司排名注册 网站开发 公司 宁波建设工程报名网站南京公司网站建立 app开发工具排行深圳网站优化哪家好 怎么建立公司网站费用河南网站建设服务公司 校园网站建设的维护酉阳网站建设 东莞中企动力做网站建筑行业数据开放平台官网 天津专业网站策划公司wordpress滑动图片轮播 淘宝网站怎么做的好看有没有什么排版的网站 铜陵网站建设软件开发工程师的前景