更新:我刚才知道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共用另一种方法?
谢谢!
答案 0 :(得分:0)
以下代码将实现此目的。
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 */ }
};