c++几个类互相包含
假如有两个类分别为A,B 现在的情况是 A需要调用B中的成员,B需要调用A的成员。或者好几个类都是互相调用的关系。
一般情况下是这样做,互相包含头文件,但是这样肯定是错误的。
比如两个类:
文件A.h
#include "B.h"
#include <iostream>using namespace std;class A
{
public:int func();int n;B b;
}
文件B.h
#include "A.h"
#include <iostream>using namespace std;class B
{
public:int n;A a;
}
编译报错。
那应该如何处理呢
文件A.h
#include <iostream>
using namespace std;
class B; //前置声明类B,只供头文件中使用class A
{
public:int func();int n;B *b;
}
文件B.h
#include "A.h"
#include <iostream>using namespace std;class B
{
public:int n;A a;
}
文件A.cpp
#include "A.h"
#include "B.h"
A::~A() {}
void A::func() {return b->n;
}
总结上述情况:
当几个类需要相互包含的时候,如果两两之间需要互相包含,那么需要在其中一个类的头文件声明该类之前 先声明需要包含的类 即
class 类名 //类的前置声明
class 本类
{
}
然后如果需要实例化前之类,那么需要在本类的cpp文件中,再添加前置类的头文件,否则不能实例化。
c++几个类互相包含相关推荐
- 两个类相互包含引用的问题--类前向声明
在构造自己的类时,有可能会碰到两个类之间的相互引用问题,例如:定义了类A类B,A中使用了B定义的类型,B中也使用了A定义的类型 class A { int i; B b; } clas ...
- C++编程练习:设计一个银行账户类,包含户名、帐号以及当前余额属性,并且能完成开户、存款、取款和查询余额等行为。
文章目录 例题 分析 代码 测试 结语 例题 设计一个银行账户(Account)类,包含户名.帐号以及当前余额属性,可完成开户.存款.取款和查询余额等行为.银行账户类的定义要求如下: class Ac ...
- php遍历中记录所有,php遍历类中包含的所有元素的方法
这篇文章主要介绍了php遍历类中包含的所有元素的方法,涉及php中getConstants方法及数组操作的相关技巧,需要的朋友可以参考下 本文实例讲述了php遍历类中包含的所有元素的方法.分享给大家供 ...
- java中main方法返回类型是6_[单选] Java application中的主类需包含main方法,main方法的返回类型是什么()。...
[单选] Java application中的主类需包含main方法,main方法的返回类型是什么(). 更多相关问题 关于超声在人体中传播的速度,叙述正确的有A.与人体组织的弹性有关B.与人体组织的 ...
- 编写一个学生类 student,包含的属性有学号、姓名年龄,将所有学生存储在一个数组中
编写一个学生类 student,包含的属性有学号.姓名年龄,将所有学生存储在一个数组中,自拟数据,用数组的初始化方法给数组赋值,并实现如下操作: ①将所有学生年龄增加一岁 ②按数组中顺序显示所有学生信 ...
- C++类的包含编译模型
C++类的包含编译模型 一.C++普通类的包含编译模型 1.类定义头文件student.h class Student { public:void print(); };#include " ...
- python类中包含一个特殊的变量、它表示当前对象自身_知到APP教师职场礼仪第七单元章节测试网课答案大学课后答案...
[判断题]水参与了植物体内众多的生物化学反应. [单选题]所有参加保险的人为自己办理保险而合作成立法人组织的相互保险组织是( ). A. 相互保险公司 B. 相互保险社 C. 保险合作社 D. 保险合 ...
- [建立基类Building,作为楼房类,这个基类中包含楼房层数、房间数、楼房总面积等。再建立派生类Home_Arch、Office_Building和Hospital,分别作为住宅楼类、办公楼类和医院
[建立基类Building,作为楼房类,这个基类中包含楼房层数.房间数.楼房总面积等.再建立派生类Home_Arch.Office_Building和Hospital,分别作为住宅楼类.办公楼类和医院 ...
- JAVA测试题-定义一个运动员(Sportsman)类,包含姓名(name)、跳高(highJump)
定义一个运动员(Sportsman)类,包含姓名(name).跳高(highJump).跳远(longJump),鞍马(sideHorse)属性以及speak()方法,该方法的功能是,输出自己的相关信 ...
- python创建学生类姓名学号_定义一个学生类,包含学号、姓名、平时成绩和考核成绩四个数据成员和以下成员方法(用Python语言):...
定义一个学生类,包含学号.姓名.平时成绩和考核成绩四个数据成员和以下成员方法(用Python语言):Python实验题目:类与文件实验要求:1.定义类2.定义并使用类对象3.打开和存取文件... 定义 ...
最新文章
- Varnish使用小结
- 倘若马克·扎克伯格 15 年前没有辍学......
- 再探.NET的PE文件结构(安全篇)
- Java中下载jar包
- opengauss数据库常用SQL语句
- [每日一题]128:四则运算(小米OJ)表达式求值
- mysql-世界-全球数据
- 【分享】5G+北斗RTK高精度人员定位解决方案
- php搭建aria2,Mac配置Aria2,高速下载百度云
- 微信公众号前端40163解决办法
- luogu4093 序列 (cdq分治优化dp)
- python空字典怎么定义_python dict怎么定义
- input标签属性详解大全
- EA(enterprise architect)左侧工作空间隐藏,如何打开
- 2011-2012世界大学排行榜(前200)
- 关于springboot部署服务器的步骤
- 动态规划算法思想解决找零钱问题
- EasyNVR二次开发云台控制接口实例
- origin绘图技巧
- 【x86架构】MCA
热门文章
- php如何取屏幕大小,JavaScript_JS获取当前网页大小以及屏幕分辨率等,效果如下:代码如下:- phpStudy...
- 融云server sdk java_开源项目索引
- pythonsuper多重继承_解决python super()调用多重继承函数的问题
- 计算机网络的分类 ppt,认识计算机网络ppt
- python抓取天气预报_抓取天气预报的代码(Python)
- android 测试获取context,Android单元测试获取context问题,用AndroidTestCase获取为空
- 对应node版本_骚操作,Node.js接入Paddle Lite,网站也能AI推理
- python的flask实现接口_python+flask:实现POST接口功能
- linux内核安全模块,对Linux内核的修改 - Linux 安全模块(LSM)简介_Linux安全_Linux公社-Linux系统门户网站...
- 计算机网络最出优秀,职业高中计算机网络案优秀教案.doc