不同的派生类共享相同的方法 更新:我刚知道C++支持多重继承。我认为多重继承是解决这个问题的最好办法

不同的派生类共享相同的方法 更新:我刚知道C++支持多重继承。我认为多重继承是解决这个问题的最好办法,c++,inheritance,derived-class,virtual-functions,C++,Inheritance,Derived Class,Virtual Functions,我有一个关于多个派生类共享方法的问题。。代码如下: 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

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

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类,方法1相同;对于C类和B类,方法1是相同的。它使用基类成员作为参数

我不想为A类和B类编写相同的方法1,我认为这可以通过以下方式简化:

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共享另一种方法


谢谢

以下代码将完成此操作

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 */ }
};
然而,值得注意的是,一旦进行了这些修改,B与Base相同。可能需要重新评估继承层次结构,以确定A和C是否应从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 */ }
};

还有,谢谢。我刚知道C++支持多重继承。我认为多重继承是解决这个问题的最好方法。谢谢!如果类D和类C共享相同的method1,我需要分别为C和D指定method1吗?可以将D作为C的子类。在第一个示例中,D::method1将从C继承,而C::method2和D::method2都将从B或Base继承。在这种复杂程度上,我会开始重新评估我的继承层次结构,但这是一种主观的个人偏好。尽管如此,也许通过组合而不是继承可以更好地解决您的问题。