我有以下课程:
class A {
// Whatever
};
class B {
T attribute;
A a;
};
现在假设我有以下情况:
A aX, aY;
B bX, bY;
现在我可以将aX或aY“插入”到bX或bY中.
我希望A类型的对象知道它们所处的B,或者换句话说,它们的“超类”B的“属性”是什么.
题:
我希望能够在它们的“超类”B之间*移动类型A的对象,我需要一种在运行时动态地将B的属性泄漏给它们的方法,因此类型A的对象总是知道它们属于哪个B to(或者他们目前所处的B的属性是什么).
最好的方法是什么?
解决方法:
也许这很有用(从所有者到属性的指针,反之亦然):
class A;
class B {
T attribute;
A* a;
public:
void setA(A* newA);
T getAttribute() {return attribute;}
void setAttribute() {/*some code*/}
};
class A {
B* Owner;
friend void B::setA(A* newA);
public:
void setOwner(B* newOwner) {
newOwner->setA(this);
}
};
void B::setA(A* newA)
{
A* tempA = this->a;
B* tempB = newA->Owner;
tempA->Owner = NULL;
tempB->a = NULL;
this->a = newA;
newA->Owner = this;
}
更新:修复了循环定位和循环调用中的错误,只能通过友元函数解决.