首页 > 编程语言 >【C++学习笔记 4】C++中的类

【C++学习笔记 4】C++中的类

时间:2024-06-16 18:01:21浏览次数:29  
标签:调用 ya 代码 Move 笔记 学习 player C++ speed

面向对象的程序设计

试想一下,假如我要写一个游戏,玩家在其中移动

#include <iostream>
#define LOG(x) std::cout << x << std::endl

void move(int x, int y, int speed);

int main() 
{
	int PlayerX0, PlayerY0;
	int speed = 2;

	int PlayerX1, PlayerY1;
	int speed = 2;

	std::cin.get();
}

假如存在多个玩家,那我只能多次定义玩家,并且多次引用同一个函数,这样的重复会导致很多难以维护的代码,因此,引入类的概念,通过面向对象编程来简化代码。

如何使用class

#include <iostream>

#define LOG(x) std::cout << x << std::endl

class Player
{
public:
	int x, y;
	int speed;
};

int main() 
{
	Player player;

	std::cin.get();
}

像声明函数一样声明一个类,并且进行调用,由类类型制成的变量叫做对象,新创建对象的过程叫做实例化。
其中,public意味这下面的变量是可以被外部调用的,如果不加这一句,则默认这些变量只能被类内部的函数访问,这种机制叫做访问控制。
如果我想声明一个移动函数

void Move(Player& player, int xa, int ya)
{
	player.x += xa * player.speed;
	player.y += ya * player.speed;
}

一种选择是将其放在类的外面,这时我必须通过引用传递参数。但其实还有一种方法,就是将函数放在类的里面,这种函数被称为method,可以将代码改为

void Move(int xa, int ya)
{
	x += xa * speed;
	y += ya * speed;
}

在类中,对象已经明确,因此不必再传递对象参数。这样在调用时的代码也可以从Move(player, 1, -1)修改为player.Move(1, -1) ,代码又被简化了!
需要注意的是,类的作用仅限于将代码整理简化,并不提供额外的功能,这就是为什么没有类的语言仍然能用甚至好用,类只是一种让编程者更轻松的语法糖。在类中,对象已经明确,因此不必再传递对象参数。这样在调用时的代码也可以从Move(player, 1, -1)修改为player.Move(1, -1) ,代码又被简化了!
需要注意的是,类的作用仅限于将代码整理简化,并不提供额外的功能,这就是为什么没有类的语言仍然能用甚至好用,类只是一种让编程者更轻松的语法糖。

结构体与类的区别

实际上这两者非常类似,区别仅在于在类中,变量默认是私有的,直接在外部调用会被编译器报错。而结构体中的变量默认是公用的,可以直接在外部调用。
一般而言,在为了实现一些处理数据一类的简单功能时会选用struct,在想要实现复杂功能的时候选择class


教程来源:The Cherno C++ 教程

标签:调用,ya,代码,Move,笔记,学习,player,C++,speed
From: https://blog.csdn.net/m0_59669215/article/details/139723731

相关文章

  • (已校对)深入理解XGBoost:高效机器学习算法与进阶 (何龙)
    书:pan.baidu.com/s/1tGbGhhQ3Ez1SIkqdEREsjQ?pwd=eqp0提取码:eqp0XGBoost算法原理:XGBoost(ExtremeGradientBoosting)是一种基于梯度提升决策树的机器学习算法,其核心是通过多个弱学习器的组合来构建一个强学习器。梯度提升与决策树:XGBoost在每轮迭代中,通过计算每个样本的梯度和......
  • 机器学习(一)
    机器学习机器学习第一周机器学习的应用机器学习是什么?何时去应用它?监督学习回归算法(数值)分类算法(标签)无监督学习(在未标记的数据中发现一些有趣的东西。)聚类算法(把没有标签的数据尝试将它们自动分组到集群中。)异常检测(寻找不寻常的数据点)降维(使用较少的压缩数据数字)......
  • SpringBoot源码学习之AOP切面编程原理
    1.前言&目录AOP切面编程主要用于抽取与具体业务逻辑无关的逻辑并组织起来以另一种方式重新与业务逻辑“耦合”在一起。比如,在WEB项目中,往往需要对接口做鉴权、性能统计、日志记录、事务处理等,这些逻辑跟业务逻辑无关、是独立的,但它也是多数业务逻辑都需要的。将这些横跨多种......
  • JavaWeb学习-MVC
    前言基于JavaWeb基础知识进行优化,形成了MVC的开发模式。程序结构优化教程原来案例中的servlet太多了,希望只有一个servlet,把原来多个servlet的合并成一个,根据参数operation判断用哪个方法并用反射调用,都写到了新servlet的service方法中了。引入dispatcherservlet,作为中心控制器,......
  • 《菜根谭》读书笔记
    信息《菜根谭》洪应明吉林出版集团有限责任公司摘录处世让一步为高,退步即进步的张本;待人宽一分是福,利人是利己的根基。完名美节,不宜独任,分些与人,可以远害全身;辱行污名,不宜全推,引些归己,可以韬光养德。忧勤是美德,太苦则无以适性怡情;澹泊是高风,太枯则无以济人利物。澹泊之士......
  • 《道德经》读书笔记
    信息《道德经》老子中国华侨出版社摘录上善若水。水善利万物而不争,处众人之所恶,故几于道。居善地,心善渊,与善仁,言善信,正善治,事善能,动善时。夫唯不争,故无尤。五色令人目盲,五音令人耳聋,五味令人口爽,驰骋畋猎,令人心发狂,难得之货,令人行妨。是以圣人为腹不为目,故去彼取此。企者......
  • JavaWeb学习-前端知识小结
    前言参照B站尚硅谷的教程进行学习,对javaweb的前端知识做个简单的小结,主要内容包括html、css、javascript。其中html表示了前端页面的结构和元素,例如表格、文本框、表单等;css表示前端页面的样式,例如段落中文字的颜色、字体大小,表格中文字的颜色,字体大小等;JavaScript是弱类型的脚本......
  • JavaWeb学习-tomcat和servlet
    前言本文介绍javaweb的基本知识,包括CS和BS的架构形式、web容器、servlet等。CS和BSCS:客户端服务器架构模式优点:充分利用客户端机器的资源,减轻服务器的负荷。缺点:需要安装;升级维护成本较高。BS:浏览器服务器架构模式优点:客户端不需要安装;维护成本较低。缺点:所有的计算和存储......
  • 学习心得
    《构建之法》是一本深入探讨软件工程实践与项目管理精髓的书籍,它不仅仅局限于技术层面的讲解,而是从更广阔的视角出发,涵盖了团队协作、项目规划、质量控制、持续集成等多个方面,为读者提供了一套全面而实用的软件开发方法论。阅读此书后,我深受启发,以下是我几点深刻的体会。首先,书中......
  • 学习心得2
    接着昨天的继续学习每一次翻开《构建之法》,都仿佛是在与一位智慧而经验丰富的导师进行对话,它不仅提供了构建高质量软件的实践框架,更是一次对个人成长和团队协作哲学的深刻探讨。这次重读,我又有了一些新的收获和感悟。最令我触动的是书中对“持续学习”文化的强调。在软件行业,技......