免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3406 | 回复: 6
打印 上一主题 下一主题

[C++] 双向关系的两个类相互作为成员可以吗 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-09-29 17:14 |只看该作者 |倒序浏览
定义两个类型teacher和student,希望通过teacher型对象直接找到该对象所有的学生,通过student对象可以找到该对象的老师。

我试着student作为teacher的数据成员,teacher作为student的成员。但是编译通不过,因为两个对象的头文件需要相互包含,编译报错头文件太多,深度=1024.。。。。。

初学菜鸟想问一下,c++如何处理这种向双向链表一样的关系呢?


欢迎言无不尽      更欢迎加 小弟qq710168558

论坛徽章:
0
2 [报告]
发表于 2011-09-29 17:31 |只看该作者
本帖最后由 狗蛋 于 2011-09-29 17:33 编辑

1、不需要头文件相互包含
2、互为数据成员最好使用指针或其它间接方案,否则会无限递归,这是任何语言无法支持的。

例:
class student
{
private:
     class teacher;  //C++只要知道teacher是个类名,下面的代码就可以生成了
     vector<teacher*> m_teacher;
}

class teacher
{
private:
     class student;  //同上
     vector<student*> m_student;
}

其实……设计这类数据结构,你最好还是去看看关系数据库的理论

论坛徽章:
0
3 [报告]
发表于 2011-09-29 18:20 |只看该作者
回复 2# 狗蛋


    那么在student.h中要声明teacher类吗? 还是直接在数据区写 class teacher就好了?
谢谢了

论坛徽章:
0
4 [报告]
发表于 2011-09-29 18:53 |只看该作者
本帖最后由 xyfree 于 2012-01-21 04:18 编辑

论坛徽章:
0
5 [报告]
发表于 2011-09-30 16:22 |只看该作者
回复 4# xyfree


    谢谢了。非引用和指针的成员对象在析构的时候会多米诺

论坛徽章:
0
6 [报告]
发表于 2011-10-04 22:31 |只看该作者
这个问题,,想通过老师找到老师的的学生,通过学生找到老师,用指针和引用可以解决:

  1. class teacher
  2. {
  3.       class student;    //包含类
  4.       hash_map<int, student*> students;   //用一个hash_map来保存老师的每一个学生
  5. };

  6. class student
  7. {
  8.      class teacher;
  9.      teacher& m_teacher;   //学生所属的老师
  10. };
复制代码
这样你就可可以通过学生 找到老师 ,通过老师找到他所有的学生了

论坛徽章:
0
7 [报告]
发表于 2011-10-08 16:52 |只看该作者
回复 6# myaiee


    谢谢你。自己调试了一下,迷迷糊糊可以了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP