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

Different derived classes share the same method

本文关键字:方法 共享 派生      更新时间:2023-10-16

update:我刚刚知道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,方法1()是相同的;对于C类和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 */ }
};

然而,值得注意的是,一旦进行了这些修改,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 */ }
};