C++:类(Class)

内容整理自: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.hqwc.cn/news/412035.html

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

相关文章

构建中国人自己的私人GPT—限时免费部署

在现实生活中&#xff0c;很多公司或个人的资料是不愿意公布在互联网上的&#xff0c;但是我们又要使用人工智能的能力帮我们处理文件、做决策、执行命令那怎么办呢&#xff1f;于是我们构建自己或公司的本地专属GPT变得非常重要。 先看效果&#xff1a; 解方程&#xff0c;24小…

Kotlin程序设计(二)面向对象

Kotlin程序设计中级篇 我们在前面已经学习了Kotlin程序设计的基础篇&#xff0c;本章我们将继续介绍更多Kotlin特性&#xff0c;以及面向对象编程。 函数 其实函数我们在一开始就在使用了&#xff1a; fun main() {println("Hello World") }我们程序的入口点就是…

HarmonyOS—构建第一个ArkTS应用(Stage模型)

创建ArkTS工程 构建第一个页面 若首次打开DevEco Studio&#xff0c;请点击Create Project创建工程。如果已经打开了一个工程&#xff0c;请在菜单栏选择File > New > Create Project来创建一个新工程。选择Application应用开发&#xff0c;选择模板“Empty Ability”&am…

python PyQt5的学习

一、安装与配置 1、环境&#xff1a; python3.7 2、相关模块 pip install pyqt5 pyqt5-tools pyqt5designer 可以加个镜像 -i https://pypi.tuna.tsinghua.edu.cn/simple3、配置设计器 python的pyqt5提供了一个设计器&#xff0c;便于ui的设计 界面是这样的&#xff1a…

redis经典面试题

说说你对Redis的理解 Redis是一个基于Key-Value存储结构的开源内存数据库&#xff0c;也是一种NoSQL数据库。 它支持多种数据类型&#xff0c;包括String、Map、Set、ZSet和List&#xff0c;以满足不同应用场景的需求。 Redis以内存存储和优化的数据结构为基础&#xff0c;提…

adb 配对+无线连接

配对 打开手机开发者选项-无线调试-使用配对码配对设备 出现ip端口和配对码后&#xff0c;电脑输入命令&#xff1a; adb pair ip:端口 eg:adb pair 192.168.137.244:39683 提示输入配对码&#xff1a;就按照手机上的输入。 此时配对成功 连接 再使用命令adb connect ip:port…

【React】组件性能优化、高阶组件

文章目录 React性能优化SCUReact更新机制keys的优化render函数被调用shouldComponentUpdatePureComponentshallowEqual方法高阶组件memo 获取DOM方式refs如何使用refref的类型 受控和非受控组件认识受控组件非受控组件 React的高阶组件认识高阶函数高阶组件的定义应用一 – pro…

Vim命令大全

文章目录 简述&#xff1a;1. **命令模式&#xff08;Command Mode&#xff09;**2. **插入模式&#xff08;Insert Mode&#xff09;**3. **可视模式&#xff08;Visual Mode&#xff09;**4. **末行模式&#xff08;Ex Mode&#xff09;** 详细使用案例&#xff1a;1. **文件…

RHCE9学习指南 第21章 用bash写脚本

grep的用法是&#xff1a; grep 关键字 file 意思是从file中过滤出含有关键字的行。 例如&#xff0c;grep root /var/log/messages&#xff0c;意思是从/var/log/messages中过滤出含有root的行。这里很明确的是过滤含有“root”的行。 如果我要是想在/var/log/messages中过滤…

绝地求生:周三不停机维护: 修复BUG,“红面具”天使与恶魔套装上线!

嗨&#xff0c;我是闲游盒~ 本周三没有停机维护&#xff0c;10点退出游戏重新获取一下热更新即可直接进入游戏游玩啦~ *本周不停机维护修复几个问题 * 维护包括以下修复: 修复了与血猎人套装相关的问题修复了烟雾弹的烟雾高度比以前更高的问题修复了在某些游戏模式下&#x…

CSS Day10

10.1 2D位移 属性名&#xff1a;transform 属性值&#xff1a;translateX 水平方向的位移 相对于自身位置移动 translateY 垂直方向的位移 相对于自身位置移动 transform&#xff1a;translate(x,y); 位移和定位搭配使用&#xff1a; position:absolute; top:50%; left:50%; tr…

100天精通鸿蒙从入门到跳槽——第4天:TypeScript 知识储备:变量声明

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通Golang》…