C++ 多继承

C++ 多继承1 定义格式 nbsp nbsp class nbsp nbsp nbsp nbsp nbsp 2 重复继承 虚基类 nbsp nbsp 在多继承中 如果直接基类有公共的基类 则会出现重复继承 这样 公共基类中的数据成员在多继承的派生类中皆有多个拷贝 nbsp nbsp 如 nbsp classA intx classB publicA classC publ

1. 定义格式

    class
<派生类名>
: [
<继承方式>
]
<基类名1>
, [
<继承方式>
]
<基类名2>
,…




    {
<成员说明表>

    };

2. 重复继承——虚基类

    在多继承中,如果直接基类有公共的基类,则会出现重复继承。这样,公共基类中的数据成员在多继承的派生类中皆有多个拷贝。

    如: 

class A { int x; }; class B: public A{}; class C: public A{}; class D: public B, public C{}; //此时D用有两个x成员B::x 和 C::x

    为了解决这样的问题,要使用虚基类。

    1)虚基类的构造函数有最新派生出的类的构造函数调用

    2)虚基类的构造函数优先非虚基类的构造函数执行

class A { int x; public: A(int i) {x=i;} }; class B: virtual public A { int y; public: B(int i): A(1) {y=i;} }; class C: virtual public A { int z; public: C(int i): A(2) {z=i;} }; class D: public B, public C { int m; public: D(int i, int j, int k): B(i),C(j),A(3){m=k;} }; class E: public C { int n; public: E(int i, int j, int k, int l): D(i,j,k),A(4){n=1;} }; D d(1,2,3); E e(1,2,3,4); 

    当创建D对象d时,所调用的构造函数的顺序是:

        A(3), B(1), C(2), D(1,2,3);

    当创建E对象e时,所调用的构造函数的顺序是:

        A(4), B(1), C(2), D(1,2,3), E(1,2,3,4)




版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/222432.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午3:49
下一篇 2026年3月17日 下午3:49


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号