C++中两个类相互引用的情况

Question

现在有两个类A和B需要定义,定义A的时候需要用到B,定义B的时候需要用到A。

//A.h
#include "B.h"
class A
{
    B b;
};
//B.h
#include "A.h"
class B
{
    A a;
};

Analyze

A和B的定义和调用都放在一个文件中肯定是不可以的,这样就会造成两个循环调用的死循环。

根本原因是:定义A的时候,A的里面有B,所以就需要去查看B的占空间大小,但是查看的时候又发现需要知道A的占空间大小,造成死循环。


Solution

  • 写两个头文件A.h和B.h分别用于声明类A和B;
  • 写两个.cpp文件分别用于定义类A和B;
  • 在A的头文件中导入B的头文件;
  • 在B的头文件中不导入A的头文件,但是用extern 的方式声明类A,并且,在B中使用A的时候要用指针的形式。

原理:在B中用指针调用A,那么在A需要知道B占空间大小的时候,就会去找到B的定义文件,虽然B的定义文件中并没有导入A的头文件,不知道A的占空间大小,但是由于在B中调用A的时候用的指针形式,B只知道指针占4个字节就可以,不需要知道A真正占空间大小,也就是说,A也是知道B的占空间大小的。

参考博客:


Terry Tang
Terry Tang
Software Development Engineer

My research interests include distributed robotics, mobile computing and programmable matter.

comments powered by Disqus

Related