C++:类(Class)

news2025/1/8 5:52:36

内容整理自:The Cherno:C++系列,2024年1月18日

---------------------------------------------------------------------------------------------------------------------------------

简单地说,

类,只是  数据+功能 的整合体。类,就是一个语法糖,让你的代码简单干净。

比如说游戏,在游戏中,我们怎么去表示一个玩家(player)呢?------我们可能会需要 玩家的位置,玩家的某些属性(性别、攻击值..血条)、玩家的移动速度..可能还要3D模型-----上述所有的数据都需要被储存在计算机的某个地方。

如上,main函数中定义了相关的变量来表示这个player的种种属性,有编程经验的同学应该都可以感觉到,假设开发一个小游戏项目,变量会非常多、非常乱(尤其是有时候搞不清楚这些变量到底是代表什么的时候,会取一些非常长的名字),有2个玩家的时候就已经够乱了,不能想象10个玩家的代码会乱成什么样子(编程时,代码的干净整洁非常重要)。

如上图,就是一堆没有组合在一起的变量。在写完函数之后会显得更加零散、混乱、难以维护。

A Good Idea-----把上面关于Player的这些东西全部“打包”成一个整体

----创建一个Player类,它包含了关于player的所有属性(data)和功能(method)

//classes are 'types',创建类就是创建一个新的变量类型,如同int一样

格式:
class 类名{

};

点击“运行”,发现报错,错误信息提示我们private变量不可访问。

于是引出了下一个关于类的话题-----“可见性”

默认情况下,一个类中的所有东西都是私有的private,这意味着,只有类内部的函数才能访问这些变量,然而,当我们希望能够从main函数中访问这些变量的时候,只需要把我们即将访问的东西全部设置成public就可以了。

public意味着我们可以在类之外的任何地方访问这些变量, 

看这一下子就不报错了。

------------------------------------------------------------------

现在我们想写一个函数,它能够将我们的player位置移动。 

 

现在让我们尝试一下将函数写在Player类的内部。

类内部的函数称为方法 method

functions inside classes are called methods

看看这下代码就干净多了

#include <iostream>
//classes are 'types',创建类就是创建一个新的变量类型,如同int一样
class Player{
public:
    int x,y;//玩家的位置
    int speed;//玩家的速度

    //Player内部的Move方法
    void Move(int xa,int ya){
        x+=xa;
        y+=ya;
    }
};
/*现在我们创建了一个全新的类叫做Player,本质上是一种类型
 *我们可以在main中把它当做其他变量来创建
 */
using namespace std;
int main(){
    Player Luna;
    /*这句话的意思类比 int a;
     * Luna是一个变量,它的类型是Player
     * 由类类型构成的变量被称作“对象”
     * 新的对象变量称为“实例”
     */
    Luna.x=0;
    Luna.y=0;
    Luna.speed=2;
    Luna.Move(1,-1);
    cout<<Luna.x<<","<<Luna.y<<endl;
    return 0;
}

当处理很多代码时,这将会是一个巨大的优势,代码越多,你处理的情况就会越复杂,你就越需要把东西“打包”,来保持代码的干净整洁。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SPI传感器接口设计与优化:基于STM32的实践

SPI&#xff08;串行外设接口&#xff09;是一种常用的串行通信协议&#xff0c;用于在微控制器和外部设备之间进行全双工的高速数据传输。在本文中&#xff0c;我们将探讨如何基于STM32微控制器设计和优化SPI传感器接口&#xff0c;并提供相应的代码示例。 1. SPI传感器接口设…

RXJS中Subject, BehaviorSubject, ReplaySubject, AsyncSubject的区别?

在RxJS&#xff08;Reactive Extensions for JavaScript&#xff09;中&#xff0c;Subject、BehaviorSubject、ReplaySubject和AsyncSubject都是Observable的变体&#xff0c;它们用于处理观察者模式中的不同场景。以下是它们之间的主要区别&#xff1a; 1、Subject: 是一种特…

【VMware】安装和卸载VMware的Ubuntu

安装视频&#xff1a;&#xff08;全程无废话&#xff09; https://www.bilibili.com/video/BV1W34y1k7ge/?spm_id_from333.337.search-card.all.click&vd_sourcefb8dcae0aee3f1aab700c21099045395

SegVol: Universal and Interactive Volumetric Medical Image Segmentation

Abstract 精确的图像分割为临床研究提供了有意义且结构良好的信息。尽管在医学图像分割方面取得了显著的进展&#xff0c;但仍然缺乏一种能够分割广泛解剖类别且易于用户交互的基础分割模型。 本文提出了一种通用的交互式体医学图像分割模型——SegVol。通过对90k个未标记的C…

Midjourney 1 月 17 日官方版本补丁更新公告,可能于二月底或三月向公众开放

Midjourney专区&#xff1a;Midjourney-喜好儿aigc 更多消息&#xff1a;AI人工智能行业动态&#xff0c;aigc应用领域资讯 功能更新和开发 修复/改变区域和缩小功能预计在本周或下周推出 测试一致的样式&#xff0c;强调样式而不是内容 常量字符功能正在开发中&#xff0c;但…

如何使用批量图片转换工具快速转换图片格式

你好!在我们的日常生活中&#xff0c;我们常常需要处理大量的图片。而有时候&#xff0c;我们可能会遇到一种情况&#xff0c;就是需要将多张图片批量转换为特定的格式&#xff0c;比如将图片批量转换为PNG格式。那么&#xff0c;如何实现这一操作呢?在本文中&#xff0c;我将…

详解IP安全:IPSec协议簇 | AH协议 | ESP协议 | IKE协议_ipsec esp

目录 IP安全概述 IPSec协议簇 IPSec的实现方式 AH&#xff08;Authentication Header&#xff0c;认证头&#xff09; ESP&#xff08;Encapsulating Security Payload&#xff0c;封装安全载荷&#xff09; IKE&#xff08;Internet Key Exchange&#xff0c;因特网密钥…

漏洞检测和评估【网站子域扫描工具02】

上一篇&#xff1a;爬取目标网站的域名和子域名【网站子域扫描工具01】 在Python中&#xff0c;有一些流行的漏洞扫描库可以对子域进行漏洞扫描和评估&#xff0c;比如Nmap、Sublist3r等。 1.端口扫描 以下是一个简单的示例代码&#xff0c;展示了如何使用Nmap进行基本的端口扫…

基于springboot+vue的高校心理教育辅导系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

查看pip及Python版本

Python环境正确安装之后&#xff0c;按“WinR”组合键打开“运行”对话框&#xff0c;输入“cmd”&#xff0c;如下图 打开命令提示符窗口后&#xff0c;输入以下命令查看Python及pip的版本。 pip -V 如果命令提示符窗口能够正确显示pip及Python版本&#xff0c;则说明Python…

如何制作产品的说明书!跟我学!

​产品说明书可以清晰地描述产品的功能、使用方法、注意事项以及维护保养等方面。但很多朋友对于如何制作产品的说明书感到困惑&#xff0c;其实这并不难。今天&#xff0c;教大家如何制作一份简单明了的产品说明书。 我们需要选择合适的制作工具和格式。比如FLBOOK在线制作电子…

目标检测--01

基本概念 什么是目标检测&#xff1f; ​ 目标检测&#xff08;Object Detection&#xff09;的任务是找出图像中所有感兴趣的目标&#xff08;物体&#xff09;&#xff0c;确定它们的类别和位置&#xff0c;是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状…

【动态规划】【离线查询】【前缀和】689. 三个无重叠子数组的最大和

作者推荐 【动态规划】【数学】【C算法】18赛车 本文涉及的基础知识点 动态规划 滚动向量 离线查询 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 LeetCode689. 三个无重叠子数组的最大和 给你一个整数数组 nums 和一个整数 k &…

关键信息基础设施安全相关材料汇总

文章目录 前言一、法律(1)《中华人民共和国国家安全法》(2)《中华人民共和国网络安全法》(3) 《中华人民共和国密码法》(4)《中华人民共和国数据安全法》(5) 《中华人民共和国个人信息保护法》二、行政法规(6)《中华人民共和国保守国家秘密法实施条例》(7) 《关键信息基础设施安…

Java数据结构之图(头歌平台,详细注释)

第1关&#xff1a;图的表示 任务描述 图&#xff08;Graph&#xff09;是表示一些事物或者状态的关系的表达方法。由于许多问题都可以归约为图的问题&#xff0c;人们提出了许多和图相关的算法。 本关任务&#xff1a;学习图的相关概念和表示&#xff0c;并用邻接表示图。 相关…

python2实现数据库表定时全量同步sftp

python2实现数据库表定时全量同步sftp 需求 周边系统需要通过sftp接口&#xff0c;将本系统数据库的8张表吐给sftp&#xff0c;文件名为txt,提供的字段用#号分隔&#xff08;逗号存在分隔不开的情况&#xff09;&#xff0c;8张表采用全量每天同步。 环境 操作系统centos7.…

Discuz论坛网站登录账号操作慢,必须强制刷新才会显示登录怎么办?

飞飞发现在登录服务器大本营账号时&#xff0c;输入账号密码登录后还是显示的登录框&#xff0c;强制刷新后才知道已经登录了&#xff0c;每次都要刷新才能正常显示&#xff0c;非常影响用户体验&#xff0c;于是在网上找了类似的问题故障解决方法&#xff0c;目前问题已经解决…

Maven普通工程和web工程创建

文章目录 创建项目前设置maven工程前设置工作创建项目前--》设置utf-8配置maven参数Maven普通工程和web工程创建Maven简单工程第一步&#xff1a;File–New–Project 第二步&#xff1a;选择maven然后下一步&#xff1a;填写后询选择finish初始化maven工程目录简介maven简单工程…

产品经理NPDP

产品经理是告诉团队做正确的事情&#xff0c;项目经理是告诉团队正确地做事情 产品经理的核心能力是商业洞察能力、产品规划与设计、团队管理能力。 产品经理国际资格认证(NPDP)

Linux:shell脚本:基础使用(8)《函数局部|全局变量函数传入位置变量return》

基本的函数定义 把一些重复调用的命令写进一个函数里&#xff0c;下次直接调用函数名&#xff0c;这样的既方便修改&#xff0c;又可以让思路清晰 function 函数名(){ 当调用这个函数时候执行的命令...... } 这个是一个基础的函数定义&#xff0c;当然你不加function也是可以的…