0

假设我有 3 个课程class BaseAclass BaseB并且class DerivedC(全部向前)。

class BaseA
{
public:
    BaseA();
    BaseA(const BaseB&);
};

class BaseB
{
public:
    BaseB();
    BaseB(const BaseA&);
};

如您所见,A 类和 B 类是“对称兼容的”(我发明的一个短语),因此可以相互转换。

class DerivedC: virtual BaseA, virtual BaseB
{
public:
    DerivedC();
    DerivedC(const BaseA &a): BaseA(a), BaseB(a) {};
    DerivedC(const BaseB &b): BaseA(b), BaseB(b) {};

    void A() {
        (BaseA)*this = (BaseB)*this;
    };
};

我想知道是否有更优雅/更有效的方法来做到这一点。我想将 DerivedC 的 BaseA 部分设置为等于 DerivedC 的 BaseB 部分,但是这些类是低级别的并且使用频率很高,我更喜欢只使用高级别的类作为最后的手段。

编辑: A 和 B 之间的转换涉及反正切和平方(你能猜出它是什么吗?)。但我想远离演员表。

编辑:基类有一些应该被继承的get-sets和操作符。

4

1 回答 1

1

为什么不只是这样:

struct Point { float x,y; };
struct Vector { float mag,theta; };
struct PointVector {
  PointVector(const Point& p_,const Vector& v_):p(p_),v(v_) {}
  Point p;
  Vector v;
};
于 2013-06-08T18:24:46.270 回答