请教一个设计模式的问题
我现在在做一个游戏魔法类,
class magic;
在做追踪的魔法时我需要实时获得游戏中魔法的目标人物的坐标,也就是魔法要追着那人打必须要实时获得那人的坐标,
现在有一个角色类class char;
可以这样实现
class char
{
public:
point get_pos() const;
}
class magic
{
public:
magic(char *pDes)
{
m_pDes = pDes;
}
~magic();
point get_des_pos()
{
return m_char->get_pos();
}
private:
char *m_pDes;
}
也就是说必须要在magic类中传入char类的指针,然后调用get_char_pos方法实时获得目标人物坐标,但是魔法类又是角色类的一个属性,这样就a调用了b,b又调用了a ,如果不想这样,那该怎么设计程序,既可以实时获得人物坐标又可以让程序看起来好些呢,祝大家中秋快乐,合家幸福,谢谢!
[解决办法]
你这个框架设计失败,其它角色的属性是由上层调用它的时候传递的,不是由它自己控制的,否则你就发生循环引用
魔法实际上也属于角色的一种,一样有各种属性,并且是由电脑控制,这样的角色的行为应该由一个AI类控制
[解决办法]
你这种情况是关联的双向实现,要保证引用完整性。即在两个类中保证对另外一个类指针引用完整性,是互相引用。 可以讲初始化的工作交给一个类。为了防止其他的类进行类似操作,可以定义为private的构造函数。
下面是一个例子,可以给你参考。
class Account;
class DebitCard{
Account * theAccount;
private:
DebitCard(Account & a) {}
public:
getAccount(){}
friend class Account;
};
class Account {
DebitCard * card;
public:
void addCard() {
card = new DebitCard(*this);
}
DebitCard& getCard() {}
void removeCard() {}
};