在构造自己的类时,可能会遇到两个类相互引用的问题。
例如:
class A
{
int i;
B b;
};
class B
{
int i;
A a;
};
在这种情况下,这样就会出现一个死循环a.b.a.b.a.b....,一般来说,应避免这种情况。
如果确实需要的话,一般来说,至少有一方需要定义成指针。
例如:
class A
{
int i;
B b;
};
class B
{
int i;
A* a;
};
如果按照以上的方式,既然存在互相引用,就必须互相包含头文件,如果仅仅是在自己的头文件中包含另外一个头文件,这样是没法编译通过的。怎样解决这个问题呢?
一般的做法是:两个类的头文件中,选择一个包含另外一个头文件。而另外一个头文件中只能以class *的形式声明,而在类的实现文件中包含头文件。
具体为:
//A.h
#include "B.h"
class A
{
int i;
B b;
};
//B.h
class A;
class B
{
int i;
A* a;
};
//B.cpp
//在B.cpp中的文件包含处要有下面语句,否则不能调用成员a的任何内容
#include "A.h"
B::B()//c++中,构造函数如果被重写,默认的构造函数就没了
{
……
}
本文探讨了在C++编程中如何处理两个类之间的相互引用问题,提出了使用指针和仅在其中一个类中包含另一个类头文件的方法,避免了编译错误,确保了代码的正确性和可读性。
1634

被折叠的 条评论
为什么被折叠?



