博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何让两个文件的两个类相互关联
阅读量:5879 次
发布时间:2019-06-19

本文共 1589 字,大约阅读时间需要 5 分钟。

做项目过程中,一般会遇到两个类相互关联的情况,而这两个类又分别放在两个不同文件中,所以就“情不自禁”地相互包含对方的头文件,然后就“理所应当”地编译错误了。在这里,就讲一下如何让位于不同文件的的两个类相互关联。

 

首先设计类A(包括头文件classA.h和源文件classA.cpp),其中头文件classA.h要#include "classB.h",而源文件classA.cpp又#include"classA.h。这样,在头文件classA.h和源文件classA.cpp都可以使用类B的东西了。

 

头文件classA.h源码如下:

 

#ifndef _CLASSA_H_#define _CLASSA_H_ #include "classB.h" class A{      public:             void display();             void callB(B *b);}; #endif

 

源文件classA.cpp源码如下:

 

#include 
#include "classA.h" using namespace std; void A::display(){ cout<<"this is class A"<
display(); }

 

其次设计类B(包括头文件classB.h和源文件classB.cpp),这里,头文件classB.h是不能#include "classA.h",因为这样会和头文件classA.h形成相互包含,从而编译错误。那怎么样才能让头文件classB.h和源文件classB.cpp也都可以使用类A的东西呢?可以这样:头文件classB.h中声明类A,源文件classB.cpp中#include "classA.h"。头文件classB.h中声明类A,就是要告诉本模块类A是一个在其他地方声明定义的东西,在这里可以使用这个东西的名字,但由于还不知这个东西的具体定义,所以不能再这里实例化这个东西。

 

头文件classB.h源码如下:

 

#ifndef _CLASSB_H_#define _CLASSB_H_ class A;class B{      public:             void display();             void callA(A *a);}; #endif

 

源文件classB.cpp源码如下:

 

#include 
#include "classB.h"#include "classA.h" using namespace std; void B::display(){ cout<<"this is class B"<
display(); }

 

到这里,我们可以设计一个场景(main文件),源码如下:

 

#ifndef _MAIN_CPP_#define _MAIN_CPP_ #include 
#include "classA.h"#include "classB.h" using namespace std; int main(){ int pause; A *ap = new A(); B *bp = new B(); ap->callB(bp); bp->callA(ap); cin>>pause; return 0;} #endif

 

运行结果如下:

 

 

可以看出:

类A调用了callB(B *b),而callB又调用了类B的display()

类B调用了callA(A *a),而callA又调用了类A的display()

你可能感兴趣的文章
软链接和硬链接详解
查看>>
Redis_master-slave模式
查看>>
3.使用Maven构建Web项目
查看>>
cisco 多生成树MST笔记
查看>>
C 到 C++ 的升级(一)
查看>>
彻底卸载删除微软Win10易升方法
查看>>
Ajaxload动态加载动画生成工具的实现(ajaxload的本地移植)
查看>>
SWT/JFACE之环境配置(一)
查看>>
手把手构建LAMP
查看>>
关于outlook 保存的.msg文件打开一次之后不能再次打开的问题
查看>>
CentOS 6.6安装python3.4.3后yum不能使用的解决办法
查看>>
应用程序日志中总是说MS DTC无法正确处理DC 升级/降级事件,是什么意思
查看>>
毕业了,爱情怎么办?
查看>>
关于django一个请求的生命周期
查看>>
Supervisor-容器中启动多个程序
查看>>
CSS颜色代码大全
查看>>
mybatis数据处理的几种方式
查看>>
QStandardItem and QStandardItemModel Class Reference
查看>>
我的友情链接
查看>>
使用Nginx搭建WEB服务器
查看>>