假设我有3个课程class BaseA
,class BaseB
和class DerivedC
(所有前进的delcared)。
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之间的转换涉及arctangents和sqrts(你能猜出它是什么吗?)。但我想摆脱演员阵容。
编辑:基类有一些应该被继承的get-sets和运算符。
答案 0 :(得分: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;
};