更新:我只是知道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共享另一种方法?

谢谢!

最佳答案

以下代码将完成此操作。

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 */ }
};

09-04 07:08
查看更多