C++前置声明的学习

【C++】C++中前置声明的应用与陷阱_前置生命如何使用-CSDN博客

首先,这样写会报错:

#pragma once
#include "A.h"
class B
{A a;
public:B(void);~B(void);
};

#include "B.h"
B::B(void)
{
}B::~B(void)
{
}
#pragma once
#include "B.h"
class A
{B b;
public:A(void);virtual ~A(void);
};
#include "A.h"A::A(void)
{
}A::~A(void)
{
}

这么写依然不行:

#pragma onceclass A;
class B
{A a;
public:B(void);~B(void);
};

#include "B.h"
#include "A.h"
B::B(void)
{
}B::~B(void)
{
}
#pragma onceclass B;
class A
{B b;
public:A(void);virtual ~A(void);
};
#include "A.h"
#include "B.h"
A::A(void)
{
}A::~A(void)
{
}

这样写可以:

#pragma onceclass B;
class A
{B* b;
public:A(void);virtual ~A(void);
};
#pragma onceclass A;
class B
{A*a;
public:B(void);~B(void);
};

在头文件中,不用使用

A a;

可以使用

A *a;

指针类型的大小是固定的。 

也可以使用引用:

A& a; 

但我没有怎么使用过引用。

 错误示例:

在B的声明中使用A的方法

#pragma onceclass A;
class B
{A* a;
public:B(void);~B(void);void xxx() {a->mmm();}
};

解决方法:把xxx函数在.cpp中进行实现。

使用前置声明可以减少头文件中包含头文件,也就减少了.cpp文件中包含不必要的头文件。

可以一定程度地提高编译速度。

反证:

a.h中:包含b.h,c.h,d.h

b.h中:  包含e.h,f.h,g.h

如果a.cpp中不需要e.f,f.h,g.h,那么a.cpp文件中就包含了不必要的头文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/518998.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode】并查集OJ

目录 1.省份数量 2. 等式方程的可满足性 1.省份数量 题目地址: 547. 省份数量 - 力扣(LeetCode) 解题思路:对于该题我们直接使用并查集,将可以直接的城市都归类一个集合,最后统计数组中集合的总数就是…

Linux Ubuntu部署SVN服务端结合内网穿透实现客户端公网访问

文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…

docker部署若依项目

目录 目录 一、搭建局域 二、redis安装 1.创建目录 2. redis.conf修改 三、MySQL安装 1. 安装 2. 设置远程连接 3. 创建数据库 四、若依后端项目搭建 1. 切换到家目录 2. 上传jar包 3. 上传Dockerfile文件 4. 构建镜像 5. 运行容器 6. 查看运行情况 7. 测试(自己…

实用干货!产品经理的进阶秘籍:必备的10项核心技能

在现代商业环境中,产品经理的角色变得愈发关键和多样化。成功的产品经理不仅需要深厚的行业知识,还要具备一系列多面手的技能,以应对不断变化的市场需求和竞争压力。本文将深入探讨产品经理必备的10项核心技能,揭示职场进阶的秘籍…

个推与华为深度合作,成为首批支持兼容HarmonyOS NEXT的服务商

自华为官方宣布HarmonyOS NEXT鸿蒙星河版开放申请以来,越来越多的头部APP宣布启动鸿蒙原生开发,鸿蒙生态也随之进入全新发展的第二阶段。 作为华为鸿蒙生态的重要合作伙伴,个推一直积极参与鸿蒙生态建设。为帮助用户在HarmonyOS NEXT上持续享…

MedSAM 项目排坑记录

MedSAM 项目排坑记录 任务排坑过程配置python环境测试构建docker模型训练数据预处理 单GPU训练最后推理 任务 做一个课程大作业,需要进行CVPR2024年医疗影像分割赛题的打榜(CVPR 2024: SEGMENT ANYTHING IN MEDICAL IMAGES ON LAPTOP)。看到…

买不到的数目c++

题目 输入样例: 4 7输出样例: 17 思路 一个字,猜。 一开始不知道怎么做的时候,想要暴力枚举对于特定的包装n, m,最大不能买到的数量maxValue是多少,然后观察性质做优化。那么怎么确定枚举结果是否正确呢…

内存管理 三大技术(覆盖交换虚存)

1.覆盖技术 程序显然比内存要大的 因为A的话要调用很多,bc ,所以把A放在了常驻区域,然后bc 再同一个分区,如果B调用的话那么这50k就是b在调用,DEF的话三的共享,需要的话就从内存中划拨出来。C在调E的时候&…

局域网管理工具

每个组织的业务运营方法都是独一无二的,其网络基础设施也是如此,由于随着超融合基础设施等新计算技术的发展,局域网变得越来越复杂,因此局域网管理也应该如此,组织需要量身定制的局域网管理解决方案,这些解…

VBA技术资料MF127:移动文件覆盖目标文件

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…

Vivado HLS学习笔记

任意精度的数据类型 u 代表 unsigned&#xff0c;fixed代表定点数据&#xff0c;即常数 采用任意精度的数据类型可以使用更少的资源&#xff0c;硬件友好性 数据类型定义在 header file 中 表示任意进制 ap_int<6> a("101010",2); //二进制数据101010 ap_in…

overleaf latex 笔记

overleaf: www.overleaf.com 导入.tex文件 1.代码空一行&#xff0c;代表文字另起一段 2. 1 2 3 排序 \begin{enumerate} \item \item \item \end{enumerate} 3.插入图片 上传图片并命名 \usepackage{float}导包\begin{figure}[H]&#xff1a;表示将图…