QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1256|回复: 9

关于C++里面双向依赖的问题

[复制链接]
发表于 2003-11-17 12:11:31 | 显示全部楼层 |阅读模式
在如下定义和实现的两个类A 和类B中,各自存在着指向对方对象的指针成员
。且在运行时刻,对于任意Male类对象m,若m.m.pWife的值不空,则有m.
pWife->getHusband( )==&m;同时,对任何Felmale类对象f,若f.pHusband的值不
空,有f.pHusband->getWife( ) == &f。这种情况称为双向依赖。现请你在不改变
这两个类已有的各成员函数的原型及功能的条件下,重新实现这两个类,使得A和
B两个类之间不存在双向依赖。允许增加类,也允许增加方法。(10分)
class Femal;
class Male
{
public:   
        Female* getWife( ) const {return pWife;}                 
      //其它方法及实现,略。     
private:           
      Female*  pWife;   
};      
class Female
{
public:   
      Male* getHusband( ) const { return pHusband; }                    //其它方法及实现
,略。   
private:                 
      Male*   pHusband;
};


从上面这个例子,我还是不太明白"双向依赖"的意思.
哪位能够给讲解一下,或者告诉哪有相关的比较详细的介绍.
谢谢.
发表于 2003-11-18 14:50:07 | 显示全部楼层
male:   <---------|       |----------------> female:
---------------      |----- |---|            --------------------
|------------- |             |   |             |-------------------|
|--------------|             |   |             |-------------------|
|  *pwife    |-----------|   |-----------|     * husband |
---------------                                --------------------
图很难看,希望能说明问题
双向包含,打个比喻,就是我的心里包含着你,你的心里包含着我
而你在我心里或我在你心里都只能是一个形象,不是真实的(表现为指针)
否则不能实例化(无限循环)
回复

使用道具 举报

 楼主| 发表于 2003-11-19 09:34:06 | 显示全部楼层
明白你说的意思了,谢谢啊。
不过,那怎么来消除这个双向包含呢???

比如说这个例子
回复

使用道具 举报

发表于 2003-11-19 14:09:57 | 显示全部楼层
唉,辛苦画的图由于空格就全乱了
失败。
按照我的理解,可以构造一个中间类,消除双向
比如说
[code:1]
class lover
{
     male *husband;
     female *wife;
     public:
      male * gethus(){return husband;)
      female * getwife(){return husband;}
}
     class Male
{
      lover wife;
...................
}
[/code:1]
不知道这样符合要求么
回复

使用道具 举报

发表于 2003-11-23 15:01:02 | 显示全部楼层
我想应该可以了,因为两者相互独立了!!! :-)
回复

使用道具 举报

发表于 2003-11-23 15:02:23 | 显示全部楼层
不过,这个问题好像很少遇见啊@
回复

使用道具 举报

发表于 2003-11-23 20:59:27 | 显示全部楼层
应该说是很少见
除了在程序作业或者考试时用
在现实程序中
好象没有什么必要吧
回复

使用道具 举报

发表于 2003-11-24 23:13:20 | 显示全部楼层
哈哈,说的也是,不过,中国是应试教育啊!!!
回复

使用道具 举报

发表于 2003-11-25 10:54:28 | 显示全部楼层
虽然说是应试教育
可是我们是独立人
还是可以自己选择
不为考试而学习
为自己的理想和目标努力
回复

使用道具 举报

发表于 2003-11-26 13:04:50 | 显示全部楼层
this case is not rare, especially in OOP due with data.
examples:
doctor need to have list of his patients, and for each patient , he need a record who are the doctors he have consulted. (in a hospital managing sys)

a record of bood need to keep track people who ordered it, and customers will have a list of books he ordered. (in a online book store , for example)

And eventurally you will face problems will need you do due with these kind of relationship, which may be much more complex. and if there is ever such a concept, there must be some situration need it, because computer language is make by humans.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-9 10:47 , Processed in 0.053064 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表