C++类声明和成员函数定义

2023-11-17

C++类声明和成员函数定义的分离

在C++中,一般做法是将类的声明放在指定的头文件中,程序员如果想用该类,只要把有关的头文件包含进来即可,不必在程序中重复书写类的声明,以减少工 作量,提高编程的效率。

由于在头文件中包含了类的声明,因此在程序中就 可以用该类来定义对象,由于在类体中包含了对成员函数的声明,在程序中就可以调用这些对象的公用成员函数。

在C++中,如果一个类声明多次被不同的程序所选用,可以不必每次都对它重复进行编译,而只需编译一次即可,把第一次编译后所形成的目标文件保存起来,以后在需要时把它调出来直接与程序的目标文件相连接即可。

在实际C++开发中,并不是将一个类声明做成一个头文件,而是将若干个常用的功能相近的类声明集中在一起,形成类库。

C++类库有两种:

C++编译系统提供的标准类库
自定义类库,用户根据自己的需要做成的用户类库, 提供给自己和自己授权的人使用。

C++类库包括两个组成部分:

类声明头文件
已经过编译的成员函数的定义,它是目标文件。

案例:C++引用多个对象的成员。

#include<iostream>//预处理
using namespace std;//命名空间 
class Time
{
  public: //声明以下是公用的
    int day;
    int hour;
    int minute; 
};
int main()//主函数 
{
  Time time1;//定义time1为Time类对象
  cout<<"输入天:"<<endl; 
  cin>>time1.day;
  cout<<"输入小时:"<<endl;
  cin>>time1.hour;
  cout<<"输入分钟:"<<endl;
  cin>>time1.minute;
  cout<<"写这篇文章是"<<time1.day<<"号,";
  cout<<time1.hour<<"点:";
  cout<<time1.minute<<"分"<<endl;
  cout<<"------------------------------"<<endl;
  Time time2;//定义time2为Time类对象
  cout<<"输入天:"<<endl; 
  cin>>time2.day;
  cout<<"输入小时:"<<endl;
  cin>>time2.hour;
  cout<<"输入分钟:"<<endl;
  cin>>time2.minute;
  cout<<"写这篇文章是"<<time2.day<<"号,";
  cout<<time2.hour<<"点:";
  cout<<time2.minute<<"分"<<endl;
  return 0; //函数返回值为0;
}

编译运行结果:

输入天:
24
输入小时:
20
输入分钟:
25
写这篇文章是24号,20点:25------------------------------
输入天:
18
输入小时:
15
输入分钟:
56
写这篇文章是18号,15点:56--------------------------------
Process exited after 19.05 seconds with return value 0
请按任意键继续. . .

上述代码,读者可以自己尝试优化一下,比如把输入输出单独抽取为一个方法。

以上,如果你看了觉得对你有所帮助,就给小林点个赞叭,这样小林也有更新下去的动力,跪谢各位父老乡亲啦~
C++类声明和成员函数定义
更多案例可以go公众号:C语言入门到精通

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

C++类声明和成员函数定义 的相关文章

  • 当其源是 https uri 时如何使 wpf MediaElement 播放

    在 wpf 独立应用程序 exe 中 我在主窗口中包含了 MediaElement
  • C# 和月历,选择多个日期

    我正在制作一个程序 可以帮助人们用 C 为某个部门 预订 订单 他们需要能够选择不同月份的多个日期 我更愿意拥有它 这样他们就可以单击一个日期 然后按住 Shift 键单击另一个日期以选择这两个日期之间的所有日期 并控制单击以进行单选 取消
  • 如何调整 Windows 窗体以适应任何屏幕分辨率?

    我知道这是重复的问题 但我检查了所有其他相关问题 他们的答案没有帮助 结果仍然与屏幕截图 2 中所示相同 我是 C Windows 窗体新手 如截图1所示 我有Form1有一些控件 每组控件都放在一个面板中 我在 PC1 中设计了应用程序
  • C++中的类要具备什么条件才能成为容器?

    我是 C 编程新手 偶然发现了这个术语containers举例如下vector deque map etc 一个企业的最低要求应该是什么class应该满足被称为container in C 我将从 范围 这个概念开始 Range 只有两个方
  • MSMQ接收和删除

    是否有任何选项可以在读取消息后将其从 MSMQ 中删除 比如 接收 删除可以作为原子操作运行吗 听起来您想查看下一条消息 然后在处理完成后接收它 Message message Queue Peek Queue ReceiveById me
  • 类中是否可以有虚拟类声明?

    我正在为个人项目中框架的各个组件设置一个接口 我突然想到了一些我认为可能对接口有用的东西 我的问题是这是否可能 class a public virtual class test 0 class b public a public clas
  • 关闭整数的最右边设置位

    我只需要关闭最右边的设置位即可 我的方法是找到最右边位的位置 然后离开该位 我编写这段代码是为了这样做 int POS int n int p 0 while n if n 2 0 p else break n n 2 return p i
  • 判断串口是普通COM还是SPP

    我正在寻找一种方法来确定 COM 是标准 COM 还是 SPP COM 也称为 COM 设备的电缆替换蓝牙适配器 我有一个可以在 USB COM gt USB 和蓝牙下工作的设备 并且蓝牙接口可以与 SPP 一起工作 我目前正在使用Syst
  • C 类型命名约定,_t 或 ALLCAPS

    我一直想知道是否有任何命名约定 例如何时对类型使用全部大写以及何时追加 t 什么时候不使用任何东西 我知道当时 K R 发布了各种有关如何使用 C 的文档 但我找不到任何相关内容 在 C 标准库类型中 t看起来漂亮占主导地位 time t
  • 名称查找、实例化点 (POI) 和基本类型

    以下代码针对 X 进行编译 但不适用于 double struct X void foo double void foo X namespace NN struct A void foo A foo double error foo not
  • 无法获取本地或参数的值,因为它在此指令指针处不可用,可能是因为它已被优化掉

    Visual Studio 2010 会删除 没有其他词 不安全块中函数参数之一中的数据 什么可能导致此错误 调试器显示以下消息 Cannot obtain value of local or argument as it is not a
  • 如何增加ofstream的缓冲区大小

    我想增加 C 程序的缓冲区大小 以便它不会过于频繁地写入 默认缓冲区是 8192 字节 我尝试使用 pubsetbuf 将其增加到 200K 原始代码 ofstream fq fastq1 cstr ios out fastq1 is a
  • “没有合适的默认构造函数可用”——为什么会调用默认构造函数?

    我已经查看了与此相关的其他一些问题 但我不明白为什么在我的情况下甚至应该调用默认构造函数 我可以只提供一个默认构造函数 但我想了解它为什么这样做以及它会产生什么影响 error C2512 CubeGeometry no appropria
  • 如何在 EF Core 2.1 中定义外键关系

    我的 DAL 使用 EF Core 2 1 这就是我的模型的样子 一名用户只能拥有一种角色 Role entity kind of master public class Role public int RoleId get set pub
  • 在 C++ 代码 gdb 中回溯指针

    我在运行 C 应用程序时遇到段错误 在 gdb 中 它显示我的一个指针位置已损坏 但我在应用程序期间创建了 10 万个这样的对象指针 我怎样才能看到导致崩溃的一个 我可以在 bt 命令中执行任何操作来查看该指针的生命周期吗 谢谢 鲁奇 据我
  • 时间:2019-03-17 标签:c#TimerStopConfusion

    我想通过单击按钮时更改文本颜色来将文本框文本设置为 闪烁 我可以让文本按照我想要的方式闪烁 但我希望它在闪烁几次后停止 我不知道如何在计时器触发几次后让它停止 这是我的代码 public Form1 InitializeComponent
  • 使用 IdentityDbContext 和 Code First 自动迁移表位置和架构的实体框架?

    我正在尝试使用 IdentityDbContext 类设置自动迁移更新 并将更改传播到整个数据库的实际 DbContext 在进入代码之前 在使用自动迁移实现 IdentityDbContext 时 我收到此错误 影响迁移历史系统表位置的自
  • MSVC编译器下使用最大成员初始化联合

    我正在尝试初始化一个LARGE INTEGER在 C 库中为 0 确切地说是 C 03 以前 初始化是 static LARGE INTEGER freq 0 在 MinGW 下它产生了一个警告 缺少成员 LARGE INTEGER Hig
  • IDisposable 的显式实现

    虽然有很多关于IDisposable在 SO 上找到 我还没有找到答案 我通常遵循这样的做法 当我的一个班级拥有一个IDisposable对象然后它也实现IDisposable并打电话Dispose在拥有的对象上 然而最近我遇到了一个类 它
  • 是否可以使用 Dapper 流式传输大型 SQL Server 数据库结果集?

    我需要从数据库返回大约 500K 行 请不要问为什么 然后 我需要将这些结果保存为 XML 更紧急 并将该文件通过 ftp 传输到某个神奇的地方 我还需要转换结果集中的每一行 现在 这就是我正在做的事情 TOP 100结果 使用 Dappe

随机推荐

  • 【js】JSON.stringify 语法实例讲解

    语法 JSON stringify value replacer space value 是必选字段 就是你输入的对象 比如数组 类等 replacer 这个是可选的 它又分为2种方式 一种是数组 第二种是方法 情况一 replacer为数
  • Tcp建立连接为什么需要三次握手

    前言 众所周知tcp传输层协议在建立连接的时候需要三次才能建立起一个真正的可靠连接 可是为什么是三次呢 不可以是两次 四次等等呢 可以自己思考一番 带着疑问可以看下文 三次握手 在 计算机网络 一书中其中有提到 三次握手的目的是 为了防止已
  • 逐步视频讲解--用Tensorflow进行中文自然语言处理--情感分析

    本教程为原创 转载请注明教学视频地址 视频教程链接 https www bilibili com video av30543613 书面教程和代码链接 https github com aespresso chinese sentiment
  • 王者荣耀8月15日服务器维护,王者荣耀8月15日更新维护到什么时候 王者荣耀8月15日更新时间分享...

    王者荣耀 5V5英雄公平对战手游 腾讯最新MOBA大作 5V5 3v3 1v1 多样模式一键体验 海量英雄随心选择 10秒实时跨区匹配 与好友组队 类型 动作冒险 大小 792 06M 语言 简体中文 在王者荣耀8月15日更新到什么时候呢
  • BAT54C 二极管是如何工作的?

    这是一个多电源供电的电路 Vcc是正常供电电源 如5V 由市电变换得到 电压大于 Vcc1 Vf 正常供电时二极管不导通 Vcc1是电池供电电源 当Vcc撤掉时 DD1 上边的二极管 导通 由Vcc1供电 当电池Vcc1耗尽或更换电池时 V
  • openwrt上opkg更新报错"opkg_download: Failed to download ............."

    开始搞op的时候 看到op竟然可以直接安装一些插件 激动坏了 因为这东西对嵌入式的小系统来说简直不敢想 但是op就支持了 就是这么任性 好不容易编译了固件 按照网上的教程 telnet进去 首先opkg update 结果没有想象中的华丽更
  • 聚类算法(二)--层次聚类法

    本文主要介绍层次聚类法的基本原理 距离计算方法 算法的优缺点 以及R语言实战 一 概述 层次聚类 Hierarchical Clustering 试图在不同层次上对数据集进行划分 从而形成树形的聚类结构 数据集的划分可采用 自底向上 的聚合
  • CUDA编程学习0——环境搭建&环境详解

    目录 环境配置 软件安装 1 支持最高的cuda版本查询 下载cuda开发软件 3 配置环境 bashrc添加环境变量 4 后续维护查询 补 关于windows下的cuda环境配置 一 Visual Studio 2022 CUDA 11
  • java,html5+css3以及javascript面试题------自己面试的时候遇到的面试题,所以整理一下

    1 java部分 1 线程与进程的区别 一个程序至少有一个进程 一个进程至少有一个线程 线程的划分尺度小于进程 使得多线程程序的并发性高 另外 进程在执行过程中拥有独立的内存单元 而多个线程共享内存 从而极大地提高了程序的运行效率 线程在执
  • matlab 计算结果为nan,matlab 计算 结果总是为Nan

    本人刚刚接触matlab 对这些运算不是很懂 计算ni的位置 exp E g 2 k T eps 这个值之前一直是0 加了eps后就有结果显示了 后面部分exp alfa T 2 k T beita 一直为无穷大然后结果就为Nan 不知道怎
  • UIKeyboard键盘相关知识点-IOS开发

    一 键盘风格 UIKit框架支持8种风格键盘 java view plain copy print typedef enum UIKeyboardTypeDefault 默认键盘 支持所有字符 UIKeyboardTypeASCIICapa
  • 08.animation-----05.旋转

    1 旋转是将元素沿着x y z轴以指定的角度旋转 旋转方向为顺时针 单位可以为deg也可为turn 2 旋转也是使用transform标签 使用以下函数 rotatex 使元素沿着x轴旋转 rotatey 使元素沿着y轴旋转 rotatez
  • 微信小程序-天气预报案例之和风天气API-云开发版

    小程序 天气预报 在现实生活中是非常常用的 我们平时都可以通过自己的手机上面或网上进行查看天气等等 鉴于有些小伙伴对云开发不熟悉 学习请移步到我的另外一篇文章 天气预报之和风天气 简易版 这个demo可以应用到自己的小程序模块上 前期准备
  • 面试华为软件测试岗,收到offer后我却毫不犹豫拒绝了....

    我大学学的是计算机专业 毕业的时候 对于找工作比较迷茫 也不知道当时怎么想的 一头就扎进了一家外包公司 一干就是2年 我想说的是 但凡有点机会 千万别去外包 在深思熟虑过后 决定要提升自己 也发现自己身边的人都是在大厂上班 也听他们说了大厂
  • 第十章 os.path模块

    1 os path模块介绍 os 模块是Python 内置的与操作系统功能和文件系统相关的模块 该模块的子模块os path 是专门用于进行路径操作的模块 常用的路径操作主要有判断目录是否存在 创建目录 删除目录和遍历目录等 说明 在使用o
  • 腾讯视频url获取方法

    总公式 url fn vkey 第一步 复制视频地址 步骤如下 点击复制通用页面地址 第二布 http vv video qq com getinfo vid m00253deqqo platform 101001 charge 0 oty
  • [激光原理与应用-34]:《光电检测技术-1》- 光学测量基础 - 光电检测、光学测量、作用、应用、发展趋势

    目录 第1章 光学测量概述 1 1 什么是光学检测 1 2 光学检测的重要作用 1 3 计量 1 4 测量 1 5 光学测量的特点与优点 第2章 光的测量范围与相应技术手段 2 1 光的辐射度量与光度量的测量 2 2 非光物理量的光学测量
  • PAT Basic Level 1075 链表元素分类(静态链表)

    题目链接 点击查看 题目描述 给定一个单链表 请编写程序将链表元素进行分类排列 使得所有负值元素都排在非负值元素的前面 而 0 K 区间内的元素都排在大于 K 的元素前面 但每一类内部元素的顺序是不能改变的 例如 给定链表为 18 7 4
  • 机器学习岗位面试问题汇总 之 深度学习

    自己结合网络内容总结 欢迎指正欢迎补充 最新更新 20170624 版本2 增加22 28 1 模式识别 机器学习 深度学习的区别与联系 模式识别 过去 程序 机器做智能的事 决策树等 机器学习 热点领域 给数据 学习数据 深度学习 前言领
  • C++类声明和成员函数定义

    C 类声明和成员函数定义的分离 在C 中 一般做法是将类的声明放在指定的头文件中 程序员如果想用该类 只要把有关的头文件包含进来即可 不必在程序中重复书写类的声明 以减少工 作量 提高编程的效率 由于在头文件中包含了类的声明 因此在程序中就