c++ 类互相包含的问题

c++ 类互相包含的问题

http://bbs.csdn.net/topics/390287148

问题描述:存在两个类的头文件a.h和b.h,在a.h中有这样的语句:#include "b.h",在b.h文件中有这样的语句:#include "a.h" 且在一个类中有另一个类的对象,如下例子:
// a.h
#ifndef A_H_INCLUDED
#define A_H_INCLUDED

class A
{
private:
         B b;
};

#endif
// A_H_INCLUDED

// a.cpp 仅仅作为例子, 没什么意义
#include "a.h"

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

// b.h
#ifndef B_H_INCLUDED
#define B_H_INCLUDED

class B
{
private:
         A a;
};

#endif
// B_H_INCLUDED

// b.cpp
#include "b.h"

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

// main.cpp
#include <iostream>
using namespace std;

int main()
{
         return 0;
}

 

 

//总结:
不行!!!

A,B相互嵌套,在实例化A对象的时候,会去找B对象的实例化,而在实例化B对象的时候,又会去找A对象的实例化。
如此循环下去。逻辑上的设计就是错误的。

更直接的意思:
在实例化A的时候,要知道A的大小,并给它分配空间。但因为A中包含B对象实体,所以又要知道B的大小。
而在实例化B的时候,又要知道A的大小,因为B中又包含A对象实体,所以又要知道A的大小。
如此反复查找,肯定确定不了哪个大,哪个小了。

比喻:
将对象比喻成盒子。
A盒子中包含B盒子,B盒子中又包含A盒子。哪个大?哪个小?谬论!!!!

再比喻:
先有鸡还是先有蛋?就好比这个问题!

修改方法:
将实体成员改成指针。如下:

class A
{
private:
         B *b;
};

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

class B
{
private:
         A *a;
};

说明:因为指针大小是固定的,一般是4个字节。
所以在实例化A对象或者B对象的时候,可以确定他们的大小。所以可成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值