C++中的头文件.h 和 源文件.cpp 的关系

2023-11-11

在VS中  C++项目,我创建了一个类,
会自动创建头文件和源文件,这两个文件有什么关系?
如何快速切换?在头文件.h文件中声明的类方法,
如何快速在源文件中进行具体实现?

在 Visual Studio 中创建 C++ 项目时,当你添加一个新的类,它会自动为你创建两个文件:

  1. 头文件 (.h):

    • 头文件通常包含类的声明(class declaration),包括类的成员变量、成员函数的原型(函数声明)等。
    • 头文件的扩展名通常是 .h,例如 MyClass.h
    • 头文件的作用是将类的接口公开给其他代码文件,允许其他代码文件使用该类的对象、调用它的成员函数等。
  2. 源文件 (.cpp):

    • 源文件通常包含类成员函数的具体实现(函数定义)。
    • 源文件的扩展名通常是 .cpp,例如 MyClass.cpp
    • 源文件的作用是实现在头文件中声明的类成员函数的功能。

这两个文件的关系是,头文件中声明了类的接口(成员函数原型等),而源文件中实现了类的接口(成员函数的具体实现)。其他代码文件可以包含头文件,以便在其内部使用类的对象和成员函数,同时需要链接源文件,以便在运行时可以找到类成员函数的定义。

现在来看如何在 Visual Studio 中快速切换头文件和源文件:

  1. 快速切换头文件和源文件
    在 Visual Studio 中,你可以使用快捷键 F12 来快速切换头文件和源文件。如果你在头文件中,按下 F12 将会跳转到对应的源文件的实现部分;如果你在源文件中,按下 F12 将会跳转到对应的头文件的声明部分。这样可以很方便地在头文件和源文件之间进行切换。

  2. 在头文件中声明的类方法如何快速进行具体实现
    在头文件中声明类方法后,你可以在源文件中实现这些方法。在源文件中实现类方法时,需要包含头文件以便知道类的接口。具体步骤如下:

    • 打开头文件 .h,找到你要实现的类方法的声明,例如:

      // MyClass.h
      class MyClass {
      public:
          void SomeMethod(); // 声明 SomeMethod 方法
      };
      
    • 在源文件 .cpp 中包含对应的头文件,并实现类方法,例如:

      // MyClass.cpp
      #include "MyClass.h"
      
      void MyClass::SomeMethod() {
          // 在这里实现 SomeMethod 方法的具体功能
      }
      

    这样就能将类的方法声明和实现分开,保持代码的模块化,同时也符合 C++ 的分离编译原则。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++中的头文件.h 和 源文件.cpp 的关系 的相关文章

  • 为什么“dtoa.c”包含这么多代码?

    我将是第一个承认我对低级编程的整体知识有点稀疏的人 我理解许多核心概念 但我不经常使用它们 话虽这么说 我对需要多少代码感到非常惊讶dtoa c http www netlib org fp dtoa c 在过去的几个月里 我一直致力于用
  • 为什么在 lambda 内部引发异常是 C# 7 的一项功能? [复制]

    这个问题在这里已经有答案了 该语句在 VS2015 中无法编译 但在 VS2017 中可以编译 var example new Action gt throw new Exception 为了支持在 lambda 表达式内抛出异常 必须对
  • 为什么我应该使用内联代码? [复制]

    这个问题在这里已经有答案了 我是一名 C C 开发人员 这里有几个始终困扰我的问题 常规 代码和内联代码之间有很大区别吗 主要区别是什么 内联代码只是宏的一种 形式 吗 选择内联代码时必须进行什么样的权衡 Thanks 表现 正如之前的答案
  • 是否保证 sizeof(T[N]) == N * sizeof(T) ?

    我一直假设 N 个元素类型的数组的大小T 由返回sizeof保证正好是N次sizeof T The 对这个问题的评论 https stackoverflow com questions 46457449 is it always the c
  • 错误:“运行所选代码生成器时出错:包恢复失败”

    我正在尝试将控制器添加到 ASP NET Core 项目中的解决方案中 当我尝试这样做时 我收到此错误 我收到相同的消息 为控制器添加最小依赖项和完整依赖项 我也有这个问题 使用实体框架添加控制器 gt 带有操作的 API 控制器 将给出
  • .NET 中的 Class.forName() 等效项?

    动态获取对象类型然后创建它的新实例的 C 方法是什么 例如 如何在 C 中实现以下 Java 代码的结果 MyClass x MyClass Class forName classes MyChildClass newInstance Lo
  • 使用 LINQ 展平嵌套字典

    所以我有一本形式的字典Dictionary
  • UI 线程正在阻塞调用 COM 对象的后台线程

    我正在开发一个通过第三方 COM 库与外部设备通信的应用程序 我试图让与设备的所有通信都通过后台线程 以防止通信问题搞砸我的应用程序 并消除在 UI 线程中进行通信所引入的一些其他复杂性 问题是 每当发生导致主 UI 线程阻塞的情况 即调用
  • 将视频上传/保存到数据库或文件系统

    我以前从未尝试过保存视频 所以我对此了解不多 我知道如果视频很小 我可以转换为字节数组并保存到数据库 但是为了提高效率 我想了解如何将任何上传的视频保存到我的服务器文件中 然后只保存该文件的文件路径我的数据库表中的视频 我完全不知道如何开始
  • 用 OpenCL C 编写快速线性系统求解器

    我正在编写一个 OpenCL 内核 它将涉及求解线性系统 目前我的内核太慢了 提高线性系统部分的性能似乎是一个不错的起点 我还应该注意 我并没有尝试使我的线性求解器并行 我正在研究的问题在宏观层面上已经是令人尴尬的并行 以下是我编写的 C
  • 可以通过模板间接访问基类中的私有类型

    我试图在编译时根据类型是否在给定范围内公开可用来选择要使用的类型 最好直接看代码 include
  • 是否自初始化 'A a = a;'允许吗?

    此代码在运行时在复制构造函数中失败 但编译器 MSVS2008 没有发出警告 您能解释一下 最好引用标准 这段代码是否非法或什么 我理解 A a a 永远不应该写在第一位 但我正在寻找理论背景 class A public A p new
  • 在 Linq 查询中使用动态列名称

    foreach Dimension dimensions in Enum GetValues typeof Dimension var r new ReferenceTable dimensions referenceItems List
  • 如何在 C 语言中获取输入中的空格

    我想从控制台获取字符数组 它还包含空格 我在 C 中知道的唯一方法是 scanf 但是一旦遇到空格 它就会停止接受输入 我该做什么 这就是我正在做的事情 char address 100 scanf s address 尝试使用 fgets
  • “DeploymentItem”属性是什么意思?

    假设我们有一个简短的程序 namespace ConsoleTryIt static class Program static void Main string args var sum Add 1 2 private static int
  • 链接到ntdll.lib并调用ntdll.dll内部的函数

    我最近正在对私有 API 进行一些研究 我尝试调用诸如NtOpenFile在 ntdll dll 中LoadLibrary and GetProcAddress在运行时 幸运的是 它成功了 今天早上我在电脑上进行了文件搜索 发现ntdll
  • Rx 在不同的线程上生产和消费

    我试图通过此处的示例代码来简化我的问题 我有一个生产者线程不断地输入数据 并且我尝试在批次之间添加时间延迟来对其进行批处理 以便 UI 有时间渲染它 但结果并不如预期 生产者和消费者似乎在同一个线程上 我不希望批处理缓冲区在正在生成的线程上
  • C++ 在预处理器 #if 中对 sizeof() 比较抛出编译错误

    我有这个 它不会从 Visual Studio 编译错误 致命错误 C1017 无效的整数常量表达式 我该怎么做 template
  • 从数据库配置中的连接字符串中删除 SSIS 密码

    我有一个 SSIS 包 它使用 SQL 服务器中的 SSIS 配置表来检索 OLE DB 连接管理器的连接字符串属性 问题是我还需要相同的连接字符串来调用使用实体框架的程序集 我尝试访问连接管理器连接字符串属性 但 SSIS 总是删除密码
  • SMTP 客户端在 C# 应用程序中显示错误“未采取请求的操作”

    我正在尝试使用 hotmail 帐户设置电子邮件发送应用程序 代码如下所示 MailMessage mail new MailMessage from to mail Subject Proba email mail Attachments

随机推荐

  • springboot ajax 跨域,SpringBoot解决ajax跨域问题

    import org springframework context annotation Configuration import org springframework web servlet config annotation Cor
  • Mac电脑实用软件汇总

    软件用途 软件名称 简介 下载链接 截图 Snipaste Snipaste
  • 在服务器Linux系统中搭建JavaWeb环境

    目录 软件安装 安装JDK 安装Tomcat 本文使用的服务器是阿里云的云服务器ECS 软件安装 安装JDK 通过SSH软件把jdk安装包 任意版本皆可 传至指定位置 这里选择 home soft 将压缩包解压至 usr java 需提前创
  • qt使用自定义属性方法让子控件动态改变qss样式

    用动态改变QLabel样式为例 分为QLabel选择状态和未选择状态 1 自定义类继承自QLabel 用Q PROPERTY宏注册一个名称为select属性 2 QSS文件中预先设置QLabel属性 QLabel label2 select
  • 腾讯云coding平台平台inda目录遍历漏洞复现

    前言 其实就是一个python的库可以遍历到 并不能遍历到别的路径下 后续可利用性不大 并且目前这个平台私有部署量不多 大多都是用腾讯云在线部署的 CODING DevOps 是面向软件研发团队的一站式研发协作管理平台 提供从需求到设计 开
  • springmvc控制器的三种实现方式

    方式一 实现Controller接口 public class Test01 implements Controller Override public ModelAndView handleRequest HttpServletReque
  • vue实现element-ui自定义主题色切换(简单版)

    需求 通过点击图标实现了白天和黑夜的页面效果的实现 可以自定义颜色 手写 比较简单 如果需要复杂功能 根据颜色选择器实现element ui全部的主题色切换可以看我另一篇 还在写 效果 1 定义个图标用于切换主题 div div
  • Element el-table-column宽度设置百分比无效

    问题 使用Element table组件时 给列设置百分比宽度无效 width 30 解决 用属性min width 3 代替属性width 30 且每一列都必须设置 原因 el table 组件会被 vue 解析成 html width
  • android wifimanager实时scan,天博体育和BOB为什么不封 -官网

    内容管理 bin bash 挂载yum仓库 read p 请输入你yum仓库的挂载点 direcho 正在挂载光盘 mount grep q dev sr0 umount dev sr0 d dir mkdir dirmount dev s
  • 怎么把桌面添加到计算机的收藏夹,电脑浏览器怎么把书签添加到桌面

    把个人喜欢的网页保存到桌面 下次直接进入网页就十分便捷了 以下就是网页保存到桌面的几种方法 方法一 1 打开360浏览器 选择文件选项 2 保存网页桌面快捷方式 3 等待生成桌面快捷方式 4 生成了桌面快捷方式 直接打开就可以进入经常使用的
  • IDEA在使用maven命令时,控制台出现中文乱码的解决方式

    今天在进行maven打包的时候 由于项目路径有中文名称 然后控制台出现了中文乱码 如图所示 这种情况下 本狗试过很多种方法 比如在setting gt encoding中设置字符集为UTF 8等等方法 但是都没有用 后来经过大量百度 找到了
  • Secret File ctf web php伪协议

    Secret File php伪协议 打开网页并没有太多提示 查看一下网页源码 可以看到一个新的页面 Archive room php 尝试访问一下 这是就跳出了这样一个页面 点击SECRET 出现如下页面 比较之前的网页源码并没有什么变化
  • 成功解决:RuntimeError: DataLoader worker (pid(s) XXX) exited unexpectedly

    跑着跑着出现Bug RuntimeError DataLoader worker pid s x x x x exited unexpectedly 加上 if name main
  • 【数模】基于PageRank算法的学术论文重要性排序问题(matlab实现)

    基于PageRank算法的学术论文排序问题 matlab实现 问题描述 六篇学术论文的引用关系如图 A 指向 B 表示 A 引用 B 试排出它们重要性的顺序 问题分析 就是给节点来个重要性排序 PageRank简介 PageRank 又称网
  • oracle表空间迁移transport_tablespace的使用

    问题描述 如果某个表空间有多个用户 那么我们在迁移的时候如果按用户导出导入的话 那将是一个麻烦费事的活 这个时候我们可以通过transport tablespace参数进行表空间迁移 达到一次性迁移整个表空间的目的 下面通过一个实验来讲解整
  • layui table 跨页、翻页记忆选择

    示例 table class layui table table layui 需要初始化的 form layui form layfilter layui layfilter table render
  • linux du命令

    百度百科查到 du show disk usage 查看磁盘使用情况 个人用的比较多的命令是 du h max depth 1 查看这个目录下的文件目录大小 du ah max depth 1查看这个目录下的文件目录包括文件的大小 具体的命
  • 项目经验分享:基于昇思MindSpore实现手写汉字识别

    项目信息Program Info 项目要求 基于MindSpore的实现在线手写汉字识别 主要包括手写汉字检测和手写汉字识别 能较准确的对标准字体的手写文字进行识别 识别后通过人工干预对文本进行适当修正 需要有一定的创新特性 代码达到合入社
  • Android开发学习【Button控件】

    Android开发学习 Day02 Button 与TextView相比 Button增加了两个新属性 书写一个点击显示当前时间的按钮 获取当前时间的java类 xml主界面 MainActivity类 点击事件和长按事件 使用setOnC
  • C++中的头文件.h 和 源文件.cpp 的关系

    在VS中 C 项目 我创建了一个类 会自动创建头文件和源文件 这两个文件有什么关系 如何快速切换 在头文件 h文件中声明的类方法 如何快速在源文件中进行具体实现 在 Visual Studio 中创建 C 项目时 当你添加一个新的类 它会自