当前位置: 首页 > news >正文

C++中类的声明

C++中类的声明

假设您要编写一个模拟人(如您自己)的程序。人有其特征:姓名、出生日期、出生地和性别(这些信息让每个人都是独一无二的),还能做某些事情,如交谈、自我介绍等。

要在程序中模拟人,需要一个结构,将定义人的属性(数据)以及人可使用这些属性执行的操作(函数)整合在一起。这种结构就是类。

要声明类,可使用关键字 class,并在它后面依次包含类名,一组放在{}内的成员属性和成员函数,以及结尾的分号。

class 类名;

我们可以仅仅声明类而暂时不定义它,这种声明被称为前向声明。在它声明之后定义之前该类是个不完全类型。

不完全类型只能在非常有限的情况下使用:可以定义指向这种类型的指针或引用,也可以作为一个已经声明(但没有定义)的函数的参数或返回类型。

对于一个类来说,在创建它的对象前必须首先完成类的定义,而不能仅仅被声明。否则编译器就无法了解这样的对象需要多少存储空间。类似的,类也必须首先被定义,然后才能用引用或者指针访问其成员。

对于类的静态成员,直到类被定义之后数据成员才能被声明成这种类类型。我们必须首先完成类的定义,然后编译器才能知道存储该数据成员需要多少空间。因为只有当类全部完成后类才算被定义,所以一个类的成员类型不能是该类自己。然而,一旦一个类的名字出现后,它就被认为是声明过了(但尚未定义),因此类允许包含指向它自身类型的引用或指针。
类声明将类本身及其属性告诉编译器。类声明本身并不能改变程序的行为,必须要使用类,就像需要调用函数一样。
模拟人类的类类似于下面这样(请暂时不要考虑其中的语法):

class Human
{// Member attributes:string name;string dateOfBirth;string placeOfBirth;string gender;// Member functions:void Talk(string textToTalk);void IntroduceSelf();...
};

不用说,IntroduceSelf() 将使用 Talk() 以及封装在类 Human 中的一些数据。通过关键字 class, C++ 提供了一种功能强大的方式,让您能够创建自己的数据类型,并在其中封装属性和使用它们的函数。
类的所有属性(这里是 name、 dateOfBirth、 placeOfBirth 和 gender)以及在其中声明的函数(Talk()IntroduceSelf( ))都是类(Human)的成员。
封装指的是将数据以及使用它们的函数进行逻辑编组,这是面向对象编程的重要特征。

该文章会更新,欢迎大家批评指正。

推荐一个零声学院的C++服务器开发课程,个人觉得老师讲得不错,
分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
TCP/IP,协程,DPDK等技术内容
点击立即学习:C/C++后台高级服务器课程

相关文章:

C++中类的声明

C中类的声明 假设您要编写一个模拟人(如您自己)的程序。人有其特征:姓名、出生日期、出生地和性别(这些信息让每个人都是独一无二的),还能做某些事情,如交谈、自我介绍等。 要在程序中模拟人&…...

IDEA常用AI插件

只推荐免费的 一、对话式AI 1. ChatGPT GPT-4 - Bito AI Code Assistant ChatGPT GPT-4 - Bito AI Code Assistant 插件地址:https://plugins.jetbrains.com/plugin/18289-chatgpt-gpt-4–bito-ai-code-assistant支持自定义prompt支持解释代码支持生成代码注释支持…...

【LeetCode】每日一题最后一个单词的长度投票法求解多数元素异或操作符巧解只出现一次的数字整数反转

个人主页直达:小白不是程序媛 LeetCode系列专栏:LeetCode刷题掉发记 目录 LeetCode 58.最后一个单词的长度 LeetCode169.多数元素 LeetCode 136.出现一次的数字 LeetCode 7.整数反转 LeetCode 58.最后一个单词的长度 难度:简单 OJ链接…...

自然语言处理---注意力机制

注意力概念 观察事物时,之所以能够快速判断一种事物(当然允许判断是错误的),是因为大脑能够很快把注意力放在事物最具有辨识度的部分从而作出判断,而并非是从头到尾的观察一遍事物后,才能有判断结果。正是基于这样的理论&#xf…...

目标检测YOLO实战应用案例100讲-基于改进YOLO v7的智能振动分拣系统开发(续)

目录 3.2 引入EIOU损失函数 3.2.1 CIOU损失函数 3.3.2 基于Focal-EIOU损失函数的网络优化 ​编辑...

Ubuntu - 用户和权限

sudo sudo(Super User Do)是在Linux和Unix系统中用于执行具有超级用户(root)权限的命令的命令。它允许普通用户以特权身份运行特定命令,通常需要输入密码以确认其身份。 sudo 是一种安全的方式,用于限制哪…...

JAVA实现Jfilechooser搜索功能

JAVA实现Jfilechooser搜索功能 背景介绍需求描述思路和方法Java代码实现和注释相关知识点介绍视频演示结语 背景介绍 Java是一种面向对象的编程语言,广泛应用于各种应用程序开发中。文件搜索是我们在日常工作或者学习中经常会遇到的需求,比如查找某个文…...

​iOS上架App Store的全攻略

第一步:申请开发者账号 在开始将应用上架到App Store之前,你需要申请一个开发者账号。 1.1 打开苹果开发者中心网站:Apple Developer 1.2 使用Apple ID和密码登录(如果没有账号则需要注册),要确保使用与公…...

线性代数3:矢量方程

一、前言 欢迎回到系列文章的第三篇文章,内容是线性代数的基础知识,线性代数是机器学习背后的基础数学。在我之前的文章中,我介绍了梯队矩阵形式。本文将介绍向量、跨度和线性组合,并将这些新想法与我们已经学到的内容联系起来。本…...

线性代数的本质笔记

课程来自b站发现的《线性代数的本质》,可以帮助从直觉层面理解线性代数的一些基础概念,以及把一些看似不同的数学概念解释之后,发现其实有内在的关联。 这里只对部分内容做一个记录,完整内容请自行观看视频~ 01-向量究竟是什么 …...

[SQL | MyBatis] MyBatis 简介

目录 一、MyBatis 简介 1、MyBatis 简介 2、工作流程 二、入门案例 1、准备工作 2、示例 三、Mapper 代理开发 1、问题简介 2、工作流程 3、注意事项 4、测试 四、核心配置文件 mybatis-config.xml 1、environment 2、typeAilases 五、基于 xml 的查询操作 1、…...

FreeRTOS介绍 和 将FreeRTOS移植到STM32F103C8T6

一、FreeRTOS 介绍 什么是 FreeRTOS ? Free即免费的,RTOS的全称是Real time operating system,中文就是实时操作系统。 注意:RTOS不是指某一个确定的系统,而是指一类操作系统。比如:uc/OS,Fr…...

zookeeper(目前只有安装)

安装 流程 学kafka的时候安装 Apache ZooKeeper 安装地址:https://archive.apache.org/dist/zookeeper/zookeeper-3.5.7/apache-zookeeper-3.5.7-bin.tar.gz 解压 tar -zxvf kafka_2.12-3.0.0.tgz -C /export/server/ 改配置 cd config cp zoo_sample.cfg z…...

点云cloudpoint生成octomap的OcTree的两种方法以及rviz可视化

第一种:在自己的项目中将点云通过ros的topic发布,用octomap_server订阅点云消息,在octomap_server中生成ocTree 再用rviz进行可视化。 创建工作空间,记得source mkdir temp_ocotmap_test/src cd temp_ocotmap_test catkin_make…...

Python---死循环概念---while True

在编程中一个靠自身控制无法终止的程序称为“死循环”。 在Python中,我们也可以使用while True来模拟死循环: 代码: while True: print(每天进步一点点) 图示 应用: 比如,在测试里面,自动化测试用例…...

ElasticSearch容器化从0到1实践(问题汇总)

文章目录 ik插件如何安装?6.8.0版本JVM参数调整 ik插件如何安装? ik插件(中文分词插件)无法直接通过install指定插件名称的方式进行安装,可以通过指定zip包的方式对插件进行安装,需要注意的是通过zip包方式…...

01、Python 安装 ,Pycharm 安装

目录 安装安装 Python安装 Pycharm 创建项目简单添加文件运行 简单爬取下载小视频 安装 python-3.8.10-amd64.exe – 先安装这个 pycharm-community-2022.2.exe 再安装这个 安装 Python python-3.8.10-amd64.exe 安装(这个是其他版本的安装,步骤一样…...

从输入URL到展示出页面

目录 了解URL 1. 输入URL 2. 域名解析 3. 建立连接 4. 服务器处理请求: 5. 返回响应: 6. 浏览器解析HTML: 7. 加载资源: 8. 渲染页面: 9. 执行JavaScript: 10. 页面展示: 从输入URL到…...

【C++】哈希的应用 -- 位图

文章目录 一、位图的概念二、位图的实现三、库中的 bitset四、位图的应用五、哈希切割 一、位图的概念 我们以一道面试题来引入位图的概念: 给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中 我…...

系列二、IO流原理及流的分类

一、概述 IO是Input、Output的缩写,IO流技术是非常实用的技术,用于处理数据传输,例如读写文件,网络通讯等。在Java程序中,对于数据的输入/输出操作以"流(stream)"的方式进行&#xff…...

IPv6

第一部分:为什么要有IPv6?(先解决“IPv4是什么”) 想象一下,全世界的电脑、手机、服务器要互相通信,就像寄信需要门牌号。这个门牌号在互联网里叫 IP地址。 IPv4:就是使用了30多年的老门牌号系…...

51单片机IIC通信避坑指南:用Proteus8调试24C02C EEPROM时,时序不对怎么办?

51单片机IIC通信深度调试:Proteus8与24C02C实战避坑手册 当你在Proteus8中调试51单片机与24C02C EEPROM的IIC通信时,是否遇到过数据读写异常、设备无响应的问题?这往往不是代码逻辑错误,而是隐藏在时序细节中的"魔鬼"。…...

终极指南:如何用EverythingToolbar实现Windows文件搜索效率翻倍 [特殊字符]

终极指南:如何用EverythingToolbar实现Windows文件搜索效率翻倍 🚀 【免费下载链接】EverythingToolbar Everything integration for the Windows taskbar. 项目地址: https://gitcode.com/gh_mirrors/eve/EverythingToolbar 你是否厌倦了在Windo…...

Arch Linux无线安装保姆级教程:从iwctl联网到KDE/GNOME桌面完整配置

Arch Linux无线安装全流程指南:从零配置到KDE/GNOME桌面环境部署 当你面对一台没有有线网络接口的机器,却想体验Arch Linux的纯净与自由时,传统的安装教程往往显得力不从心。这份指南将彻底解决无线环境下的安装难题,从最基础的iw…...

3大技术架构深度解析:VRM-Addon-for-Blender如何实现跨格式模型转换的高性能解决方案

3大技术架构深度解析:VRM-Addon-for-Blender如何实现跨格式模型转换的高性能解决方案 【免费下载链接】VRM-Addon-for-Blender VRM Importer, Exporter and Utilities for Blender 2.93 to 5.1 项目地址: https://gitcode.com/gh_mirrors/vr/VRM-Addon-for-Blende…...

别再死记硬背了!用这5个真实案例,彻底搞懂Yocto BitBake的变量赋值语法(.bb文件)

别再死记硬背了!用这5个真实案例,彻底搞懂Yocto BitBake的变量赋值语法(.bb文件) 第一次打开Yocto项目的.bb文件时,那些看似简单的等号、问号和冒号组合,往往让人一头雾水。为什么有的变量赋值会神奇地改变…...

OpenAI 图像生成 API 的应用与使用

DALL-E 3 是 OpenAI 开发的一款图像生成模型,能够根据文本描述生成高质量的图像。通过 OpenAI 图像生成 API,开发者可以轻松利用 DALL-E 的图像生成功能,在各种应用场景中实现创意设计、内容生成等需求。 环境准备/前置条件 在开始之前&…...

[1]锁相环 PLL 几个版本的matlab相位噪声拟合仿真代码,质量杠杠的,都是好东西

[1]锁相环 PLL 几个版本的matlab相位噪声拟合仿真代码,质量杠杠的,都是好东西 [2]锁相环matlab建模稳定性仿真,好几个版本 [3]锁相环2.4G小数分频 simulink建模仿真最近在折腾锁相环设计,发现手头这几个版本的Matlab相位噪声拟合…...

别再手推机器人动力学方程了!用Python的Sympybotics库5分钟自动生成C代码

用Sympybotics实现机器人动力学方程自动生成:从符号推导到嵌入式C代码的完整实践 在机器人控制算法开发中,动力学方程的推导一直是工程师们的噩梦。传统手工推导不仅耗时费力,还容易出错。想象一下,当你花费数周时间推导六自由度机…...

从刷题到实战:一文搞懂C/C++进制转换(含itoa、strtol、bitset函数避坑指南)

从刷题到实战:C/C进制转换全攻略与避坑指南 引言:为什么进制转换如此重要? 记得第一次参加技术面试时,面试官抛出一道看似简单的题目:"如何将十六进制的颜色代码转换为RGB值?"当时手忙脚乱的样子…...