本文主要是介绍类相互包含引用的问题--类前向声明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在构造自己的类时,有可能会碰到两个类之间的相互引用问题,例如:定义了类A类B,A中使用了B定义的类型,B中也使用了A定义的类型
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 X; 的声明形式,而在实现文档中(*.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()
{
……
}
这篇关于类相互包含引用的问题--类前向声明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!