Не обязательно лучше, но учтите также идею не переопределять назначение, а предоставлять преобразования.
Вы можете сделать как
#include "b.h"
class A
{
public:
A(const B&);
operator B() const;
};
Если вы сделаете a=b;
, это станет неявноa=A(b)
и если вы сделаете b=a;
, станет неявно b=a.operator B();
Это все равно, что сказать, что B можно «повысить» до A, а «понизить» до B. Но вы можете делать все вокруг A, не модифицирующий B.