我有一个关于继承的问题。我的情况是这样的:
我有两个课程(AThisWay,AThatWay),我希望能够不时交换。它们都有相同的方法名称,但在方法中做了不同的事情。其他类(B)使用它们的属性和方法。 一开始我只有AThisWay,它是B的超类,但现在我也有AThatWay,我想知道是否有可能使AThisWay和AThatWay成为子类ob B,这样我就不会对属性产生混淆或者如果有的话是一种不时改变B的超类的方法。在这方面最佳做法是什么?
最佳圣
编辑: 现在我这样做(注意B只来自AThisWay),但我希望B也能够有时使用AThatWay的方法。就像AThisway和AThatWay一样,我有不同的物理模型,我希望能够以这种方式进行微积分,有时候只是为了测试我的模型。我现在看到的最快的方法是制作B的副本并从AThatWay派生出来,但这当然不漂亮且不易调试。
class AThisWay {
public:
int aNumber
void aMethod() { aNumber = 1; }
}
class AThatWay {
public:
int aNumber
void aMethod() { aNumber = 2; }
}
class B: public AThisWay{
public:
int anOtherNumber
void otherMethod()
{
aMethod();
anOtherNumber = aNumber + 2;
}
}
答案 0 :(得分:1)
我可能无法正确理解“交换时间”的含义,但在我看来,您应该创建一个AThisWay
和AThatWay
的公共基类,然后让类{ {1}}通过他们的共同基础使用它。通过这种方式,您不必从任何这些类派生。
B
在课程class AWay {
public:
virtual void method() = 0;
}
class AThisWay : public AWay {
public:
virtual void method() override { /* code A */ }
}
class AThatWay : public AWay {
public:
virtual void method() override { /* code B */ }
}
中:
B
(上面的例子忽略了一些细节,例如:动态内存的释放,使用智能指针等等。)