温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C++虚继承举例分析

发布时间:2021-11-24 10:49:55 来源:亿速云 阅读:146 作者:iii 栏目:互联网科技

这篇文章主要讲解了“C++虚继承举例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++虚继承举例分析”吧!

在多重继承中,如果发生了如:类B继承类A,类C继承类A,类D同时继承了类B和类C。最终在类D中就有了两份类A的成员,这在程序中是不能容忍的。当然解决这个问题的方法就是利用虚继承。

C++虚继承举例分析

 1 class A{ 2 public: 3     int t; 4     A(int a) 5     { 6         t = a; 7     } 8     void fun(); 9 };10 11 class B:virtual public A12 {13 public:14     B(int a, int b) :A(a+10)15     {16         t1 = b;17     }18     ~B();19     int t1;20 };21 22 class C :virtual public A23 {24 public:25     C(int a,int c):A(a+20)26     {27         t2 = c;28     }29     ~C();30     int t2;31 };32 33 class D :public B,public C34 {35 public:36     D(int a,int b,int c,int d) :B(a,b),C(a,c),A(a){}//在此必须要给虚基类传参37     ~D();38 };

 在派生时将关键字virtual加在相应相应继承方式前,就可防止在D类中同时出现两份A类成员。

在实例化D时我们给a传入一个1,那么在虚基类中的t为何值呢?(注意我们在第14,25行给虚基类的构造函数传值时都进行了“+”操作。)

而答案是肯定的必然为1,因为在实例化D的时候,只会调用一次虚基类的构造函数,使得虚基类接收到参数也只可能是从实例化D时传过来的参数。

int mian()
{
    D temp(1,2,3,4);return 0;
}

注意:C++编译系统在实例化D类时,只会将虚基类的构造函数调用一次,忽略虚基类的其他派生类(class B,class C)对虚继承的构造函数的调用,从而保证了虚基类的数据成员不会被多次初始化。

感谢各位的阅读,以上就是“C++虚继承举例分析”的内容了,经过本文的学习后,相信大家对C++虚继承举例分析这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++
AI