不同的派生类共享相同的方法

时间:2014-10-06 22:51:22

标签: c++ inheritance derived-class virtual-functions

更新:我刚才知道c ++支持多重继承。我认为多重继承是解决这个问题的最佳方法。

我有一个关于多个派生类共享方法的问题..代码如下:

class Base{
public:
    virtual double method1();
    virtual double method2();
}

class A::public Base{
public:
    virtual double method1();
    virtual double method2();
}

class B::public Base{
public:
    virtual double method1();
    virtual double method2();
}

class C::public Base{
public:
    virtual double method1();
    virtual double method2();
}

class D::public Base{
public:
    virtual double method1();
    virtual double method2();
}

对于A类和B类,method1()是相同的;对于C类和B类,method1()是相同的。 (它使用基类成员作为参数)。

不是为A类和B类编写相同的method1(),我认为可以通过以下方式简化:

class subBase1::public Base{
public:
    void double method1();
}
class A::public subBase1{}
class B::public subBase1{}


class subBase2::public Base{
public:
    void double method1();
}
class A::public subBase2{}
class B::public subBase2{}

但是现在对于B类和C类,method2()也是一样的(它使用基类成员作为参数)。我能做什么?有没有A& B共享一种方法,而B& C共用另一种方法?

谢谢!

1 个答案:

答案 0 :(得分:0)

以下代码将实现此目的。

class Base
{
    public:
        virtual double method1() { /* code shared by A and B */ }
        virtual double method2() { /* code shared by B and C */ }
};

class A : public Base
{
    public:
        virtual double method2() { /* code specific to A */ }
};

class B : public Base
{
};

class C : public Base
{
    public:
        virtual double method1() { /* code specific to C */ }
};

但值得注意的是,一旦进行了这些修改,BBase相同。可能值得重新评估您的继承层次结构,以确定AC是否应该从B继承,如下所示:

class B
{
    public:
        virtual double method1() { /* code shared by A and B */ }
        virtual double method2() { /* code shared by B and C */ }
};

class A : public B
{
    public:
        virtual double method2() { /* code specific to A */ }
};

class C : public B
{
    public:
        virtual double method1() { /* code specific to C */ }
};