面向对象的程序设计
试想一下,假如我要写一个游戏,玩家在其中移动
#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