解决c++两个类互相包含问题

在构造自己的类时,有可能会碰到两个类之间的相互引用问题,例如:定义了类A类B,A中使用了B定义的类型,B中也使用了A定义的类型

class A

{

int i;

B b;

}

class B

{

int i;

A* a;

}

请注意上面的定义内容,一般情况下是不能出现类A,类B相互引用都定义对象,即如下的样子:

class A

{

int i;

B b;

}

class B

{

int i;

A a;

}

在这种情况下,想想可以有a.b.a.b.a.b.a.b.a.b…………,很有点子子孙孙无穷尽之状,那么我的机器也无法承受。最主要的还是这种关系很难存在,也很难管理。这种定义方式类同程序中的死循环。所以,一般来说,两者的定义,至少有一方是使用指针,或者两者都使用指针,但是决不能两者都定义实体对象。

言归正传,那么,在定义时因为相互引用肯定会需要相互包含头文件,如果仅仅只是在各自的头文件中包含对方的头文件,是通不过编译的,如下:

//class A.h

#include "B.h"

class A

{

int i;

B b;

}

//class B.h

#include "A.h"

class B

{

int i;

A *a;

}

如上的包含方式可能会造成编译器有错误提示:A.h文件中使用了示知类型B。

怎么办?

一般的做法是:两个类的头文件之中,选一个包含另一个类的头文件,但另一个头文件中只能采用class *;的申明形式,而在实现文件中(*.cpp)中包含头文件,如下:

//class A.h

#include "B.h"

class A

{

int i;

B b;

}

//class B.h

class A;

class B

{

int i;

A *a;

}

//B.cpp

//在B.cpp中的文件包含处要有下面语句,否则不能调用成员a的任何内容

#include "A.h"

B::B()

{

……

}

解决c++两个类互相包含问题 - 1307520486 - 1307520486的博客 转发至微博
 
解决c++两个类互相包含问题 - 1307520486 - 1307520486的博客 转发至微博
阅读(1) | 评论(0)
|
       
解决c++两个类互相包含问题 - 1307520486 - 1307520486的博客

用微信  “扫一扫”

将文章分享到朋友圈。

 
解决c++两个类互相包含问题 - 1307520486 - 1307520486的博客

用易信  “扫一扫”

将文章分享到朋友圈。

 
喜欢 推荐 0人  |  转载
 
历史上的今天
最近读者
热度
在LOFTER的更多文章
关闭
玩LOFTER,免费冲印20张照片,人人有奖!      我要抢>
评论
this.p={ m:2, b:2, loftPermalink:'', id:'fks_087070085086082066083087086075072084085067080084086066080082', blogTitle:'解决c++两个类互相包含问题', blogAbstract:'在构 自己的类时,有可能会碰到两个类之间的相互引用问题,例如:定义了类A类B,A中使用了B定义的类型,B中也使用了A定义的类型

class A

{

int i;

', blogTag:'', blogUrl:'blog/static/240420144201491224436266', isPublished:1, istop:false, type:1, modifyTime:0, publishTime:1413096276266, permalink:'blog/static/240420144201491224436266', commentCount:0, mainCommentCount:0, recommendCount:0, bsrk:-100, publisherId:0, recomBlogHome:false, currentRecomBlog:false, attachmentsFileIds:[], vote:{}, groupInfo:{}, friendstatus:'none', followstatus:'unFollow', pubSucc:'', visitorProvince:'', visitorCity:'', visitorNewUser:false, postAddInfo:{}, mset:'000', mcon:'', srk:-100, remindgoodnightblog:false, isBlackVisitor:false, isShowYodaoAd:false, hostIntro:'', hmcon:'0', selfRecomBlogCount:'0', lofter_single:' 6608776266957018211.png' } {list a as x} {if !!x}
{if x.visitorName==visitor.userName} {else} {/if}
{if x.moveFrom=='wap'}   {elseif x.moveFrom=='iphone'}   {elseif x.moveFrom=='android'}   {elseif x.moveFrom=='mobile'}   {/if} ${fn(x.visitorNickname,8)|escape}
{/if} {/list} {if !!a} ${fn(a.nickname,8)|escape}
${a.selfIntro|escape}{if great260}${suplement}{/if}
 
{/if}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值