问一下关于包含头类的问题。类A我要定义一个类B的成员对象,类B也要定义类A的成员对象。

cen_jin_long 2008-04-01 10:37:12
请问应该怎么样实现呢?

//A.h file
class A
{
};

//B.h file
class B
{
};

在A类中定义一个成员变量为B对象。
在B类中定义一个成员变量为A对象。

请问大家有何方法?
...全文
92 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
cen_jin_long 2008-04-02
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 arong1234 的回复:]
如果按照你的设计,A,B类自身构成一个间接的死循环,这怎么可能做得了?
[/Quote]


多谢荣哥指点!

为什么会简单死循环呢?有点不明白。本人愚钝,学得不好。
liveforme 2008-04-02
  • 打赏
  • 举报
回复
class B;
class A{
public:
void UseB(){ B b;}
}
这样的问题是class B在最上面只是声明,不是定义
所以不能用未定义class B去创建一个对象。。
arong1234 2008-04-01
  • 打赏
  • 举报
回复
如果按照你的设计,A,B类自身构成一个间接的死循环,这怎么可能做得了?
cen_jin_long 2008-04-01
  • 打赏
  • 举报
回复

看来这不是个好的设计方法,有一个一定要用指针?晕了。
arong1234 2008-04-01
  • 打赏
  • 举报
回复
不当匪首好多天了
[Quote=引用 13 楼 wuyu637 的回复:]
引用 10 楼 arong1234 的回复:
你是哪位?偶像我的人太多了:)
引用 7 楼 wuyu637 的回复:
我靠。。居然看见阿荣了。。。偶像啊。。。


以前在vckbase上混过几个星期。。。在大学的时候很崇拜你。。:(
[/Quote]
wuyu637 2008-04-01
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 arong1234 的回复:]
你是哪位?偶像我的人太多了:)
引用 7 楼 wuyu637 的回复:
我靠。。居然看见阿荣了。。。偶像啊。。。
[/Quote]

以前在vckbase上混过几个星期。。。在大学的时候很崇拜你。。:(
enewell 2008-04-01
  • 打赏
  • 举报
回复

学习
星羽 2008-04-01
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 arong1234 的回复:]
你是哪位?偶像我的人太多了:)
引用 7 楼 wuyu637 的回复:
我靠。。居然看见阿荣了。。。偶像啊。。。
[/Quote]


- -b
arong1234 2008-04-01
  • 打赏
  • 举报
回复
你是哪位?偶像我的人太多了:)
[Quote=引用 7 楼 wuyu637 的回复:]
我靠。。居然看见阿荣了。。。偶像啊。。。
[/Quote]
星羽 2008-04-01
  • 打赏
  • 举报
回复
用指针或者引用吧
effective_person 2008-04-01
  • 打赏
  • 举报
回复
怎么会设计类这样的牵强呢???

wuyu637 2008-04-01
  • 打赏
  • 举报
回复
我靠。。居然看见阿荣了。。。偶像啊。。。
jackzhhuang 2008-04-01
  • 打赏
  • 举报
回复
1楼说了
arong1234 2008-04-01
  • 打赏
  • 举报
回复
彼此定义对方对象的方法造成对象的自我循环,这是违反规定的,A包含B的实例,B包含A的实例,这个对象将是无穷大的

如果不是对象而是指针或者引用,可以使用超前引用

http://www.vckbase.com/bbs/prime/viewprime.asp?id=431
wuyu637 2008-04-01
  • 打赏
  • 举报
回复
class1.h
===========================================
#ifndef __class1__
#define __class1__
#include "class2.h"

class class1{

public:
class2 temp;
int i;
int j;

};


#endif

==============================================

class2.h
#ifndef __class2__
#define __class2__

#include "class1.h"
class class1;

class class2{

public:
class1* c1;
int a;
int b;
class2(){

};

};

#endif
==============================================
交叉应用类的关键在于,其中一个类可以做为成员出现在另一个类里,但是另一个类的成员类表里只能是一个指向一个类的指针,并且要在出现指针类的头文件里指出,指向的对象是一个类。。
ryfdizuo 2008-04-01
  • 打赏
  • 举报
回复

class Car;
class Apple;
class Apple
{
public:
void abc(Car *aCar);
};
class Car
{
public:
Apple anApple;
void bcd(){ cout<<"The car is excuted!"<<endl;}
};
void Apple::abc(Car *aCar)
{
aCar->bcd();
}
int main()
{
Apple app;
Car car;
app.abc(&car);
return 0;
}
wuyu637 2008-04-01
  • 打赏
  • 举报
回复
嵌套类。。


ryfdizuo 2008-04-01
  • 打赏
  • 举报
回复
注意前置申明;
通过成员指针实现;

64,312

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧