目录
01 前言
今天这期我们主要解决一个问题,就是 C++ 中的类和结构体有什么区别。
本期我们有两个术语,结构体 struct,它是 structure 的缩写,以及类 class。它们的用法看起来有点相似,很多人都会困惑他们之间的区别。你是应该使用 struct,还是应该使用一个 class,本期内容我们将搞清楚这些。
02 struct 与 class格式上的区别
看下图代码,一个类的成员默认为私有的(private)。这意味着如果我要做这样的事情,如果不加 public 的话,这里会得到一个错误。
编译器告诉我们 Player 类中的 platerX是不可访问的,因为它被标记为私有的(private)。如果我们想执行这段代码,我们必须在开始的位置必须写上 public。
#include <iostream>
class Player
{
public:
int playerX, playerY;
};
int main()
{
Player player;
player.playerX = 10;
return 0;
}
如果把 class 改成 struct ,你可以试着运行上面的代码,一切就都好了
如果我真的想让某些东西是私有的,在他们之前加上private这个关键字就可以了。
#include <iostream>
struct Player
{
int playerX, playerY;
};
int main()
{
Player player;
player.playerX = 10;
return 0;
}
这个就是两者的区别。非常简单,这就是他们的全部。
03 struct 与 class 使用上的区别
虽然从技术上讲他们可能没有太大区别,然而实际使用情况会有一些不同。
#include <iostream>
#define struct class
struct Player
{
public:
int playerX, playerY;
};
int main()
{
Player player;
player.playerX = 10;
return 0;
}
04 常用的代码风格
从根本上说这个类,不管是用 class 还是 struct,都是代表这两个整形数的一种结构。这个就是它的核心。他不应该像之前的 Player 类一样的,包含大量功能,——这个 Player 类可能有一个 3D 模型,它可能会为这个 3D 模型处理渲染代码,它可能处理比如 Player 如何在地图上移动并接收键盘输入,所有这些,可能有很多功能。
如果我只是想用结构体表示一些数据,我将使用一个结构体,
#include <iostream>
struct Player
{
int playerX, playerY;
};
int main()
{
Player player;
player.playerX = 10;
return 0;
}
如果我想要一个大量功能的整个类,比如一个游戏世界或者一个 Player,或者其他可能也有需要继承的东西,所有这些系统,我将使用一个类。这也是我个人区分这两种类型的方法。
#include <iostream>
class Player_Class
{
private:
int playerX, playerY;
public:
void setPlayerX(int x) { playerX = x; }
void setPlayerY(int y) { playerY = y; }
};
int main()
{
Player_Class player_class;
player_class.setPlayerX(20);
return 0;
}
再说一次,你可以在任何可以使用类的地方使用结构体,它们将以相同的方式工作。如果在C++中我更喜欢用类,因为C++的代码风格更适合面向对象,在写代码分析代码更清晰明了