c++ - 不同的派生类共享相同的方法

标签 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共用另一种方法?

谢谢!

最佳答案

下面的代码将完成这个。

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 相同。可能值得重新评估您的继承层次结构以确定 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 */ }
};

关于c++ - 不同的派生类共享相同的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26226073/

相关文章:

python - Django 休息框架 : Derived model serializer fields

c++ - 如何在 Linux 系统上以编程方式清除 C++ 中的文件系统内存缓存?

c++ - 使用 Boost Graph 库查找所有路径

java - 在 JPA 中链接不同实体类型的最佳方法

c++ - 调用派生类的虚方法导致段错误

c++ - 如何将一个 "unknown"的派生类声明为基类的成员,并允许派生版本的成员函数被调用?

c++ - 引用基类模板成员变量的简单方法

c++ - VS2015 修复 VC_IncludePath 中的路径问题

java - 如何将接口(interface)与通用类的实现绑定(bind)?

java - 子类从父类实例化