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