使用派生类C ++的方法的超类

时间:2017-08-28 14:54:40

标签: c++ inheritance

我有一个关于继承的问题。我的情况是这样的:

我有两个课程(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;
        }
}

1 个答案:

答案 0 :(得分:1)

我可能无法正确理解“交换时间”的含义,但在我看来,您应该创建一个AThisWayAThatWay的公共基类,然后让类{ {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

(上面的例子忽略了一些细节,例如:动态内存的释放,使用智能指针等等。)