设为首页 加入收藏

TOP

C++ 多重继承详细教程(一)
2014-02-14 12:51:47 来源: 作者: 【 】 浏览:354
Tags:  多重 继承 详细 教程

    多重继承(multiple inheritance):一个子类同时有多个基类的继承情况。
    例:
    class C : public A, public B {};
    *多重继承时要把多重继承拆分成单一继承来理解。
    例:
    class A
    {
    private:
    int a;
    public:
    A(int i):a(i) {}
    virtual void print() {cout 《 a 《 endl;}
    int get_a() {return a;}
    };
    class B
    {
    private:
    int b;
    public:
    B(int j):b(j) {}
    void print() {cout 《 b 《 endl;}
    int get_b() {return b;}
    };
    class C : public A, public B
    {
    int c;
    public:c(int i, int j, int k):A(i), B(j), c(k) {}
    void print() {A::print(); B::print();}
    void get_ab()
    {
    cout 《 get_a() 《 " " 《 get_b() 《 endl;
    }
    };
    int main()
    {
    C x(5,8,10);
    A* ap=&x;
    B* bp=&x;
    * ap->print();  //使用C::print();
    * bp->print();  //因为基类B的print()不是虚函数,所以使用B::print();
    * //bp->A::print(); //因为多重继承需要拆分成单一继承来分析,所以B类的指针无法访问A类的方法;
    x.A::print();  //使用A::print();
    x.get_ab();  //使用C::get_ab();
    }
    ***多重继承遇到的问题:当一个祖先类派生若干子类,这些子类又多重继承给一个子类。则会有多分祖先类的拷贝。在子类调用该方法的时候编译器不知道调用哪一个。
    ***解决方法:使用虚基类(virtual bass class)来解决这个问题,只要有一个子类虚继承该类,则该类就叫虚基类。
    例:
    class R
    {
    private:
    int r;
    public:
    R(int x=0):r(x){}
    };
    class A : public virtual R //类A公有虚继承R;
    class B : public virtual R //类B公有虚继承R;
    class C : public A, public B //类C多重继承于A类和B类;
    {
    C(int r, int x, int y, int w):R(r),A(r, x),B(r, y),c(w){} //C的构造函数,调用一下R的构造函数;
    };
    ***理解:R类只有一份,并不是拷贝给子类A和B,要使用的时候调用而已。构造一个对象C必须调用一下R类的构造函数。

   

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇一个n*n的图是否能由十字架拼成 下一篇用链表解决if语句过多的问题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Libevent C++ 高并发 (2025-12-26 00:49:30)
·C++ dll 设计接口时 (2025-12-26 00:49:28)
·透彻理解 C 语言指针 (2025-12-26 00:22:52)
·C语言指针详解 (经典 (2025-12-26 00:22:49)
·C 指针 | 菜鸟教程 (2025-12-26 00:22:46)