佛山企业网站建设服务,京东的网站建设分析,WordPress评论列表去掉回复,婚礼摄影网站源码目录
01 类是什么
02 如何创建类
03 方法
后话 本期我们要讲的是 C 中的类。
我们终于讲到了面向对象编程#xff0c;这是一种非常流行的编程方式#xff0c;面向对象编程实际上只是一种你可以采用的编写代码的方式#xff0c;其他语言例如 C#、Java 这些主要是面向对象…目录
01 类是什么
02 如何创建类
03 方法
后话 本期我们要讲的是 C 中的类。
我们终于讲到了面向对象编程这是一种非常流行的编程方式面向对象编程实际上只是一种你可以采用的编写代码的方式其他语言例如 C#、Java 这些主要是面向对象的语言事实上用这些语言你真的不能写任何其他类型的代码尽管你也可以尝试这样做因为最终这些语言都是面向对象的语言C 有点不同因为它并没有强加给你一种特定的风格。
C 语言实际上并不支持面向对象编程因为为了面向对象编程你需要有一些概念比如类和对象这些东西 C 语言没有如果你想使用面向对象的话 C 会添加所有这些功能。 01 类是什么
简单地说类只是对数据和功能组合在一起的一种方法。
例如在一个游戏中我们可能想要一些代表角色的东西那么我们需要什么样的东西来代表一个角色呢我们当然需要一些数据例如角色在游戏中的位置角色可能拥有的某些属性角色移动的速度我们可能还需要一些 3D 模型代表角色的屏幕形象。所有这些数据都需要存储在某个地方实际操作中我们可以为所有这些创建变量让我们来看看它会是什么样子。 #include iostream
using namespace std;int main()
{int x, y;int speed;return 0;
}我们想要创建一个角色然后想要一个角色位置以及它的速度这些都是整数。你可能发现这有点乱了因为这些名字太普通了你可能想写成 PlayerX、 PlayerYspeed 改成 PlayerSpeed哪怕是这样还是有点乱。
尤其是当我们的游戏有 2 个角色时你就不得不先复制然后改成 PlayerX0、PlayerX1 等。
这样的话代码太糟糕了现在还只是两个角色如果三个四个呢 #include iostream
using namespace std;int main()
{int PlayerX0, PlayerY0;int playerspeed0 0;int PlayerX1, PlayerY1;int playerspeed1 0;return 0;
}你当然可以使用数组但其实问题重点还是一样的它们只是一堆没有组合在一起的变量他们是无组织的只是被放在我们的代码中这不是一个好方式。
另一个很好的例子可以说明为什么这很烦人我想写一个函数来 move 角色例如下面这样。 #include iostream
using namespace std;int Move(int x, int y,int speed)
{return 0;
}int main()
{int PlayerX0, PlayerY0;int playerspeed0 0;int PlayerX1, PlayerY1;int playerspeed1 0;return 0;
}看起来更乱了是吧。
所有这一切都变成了如此多的代码难以维护非常混乱所以我们要做的就是通过使用类来简化它。
02 如何创建类
我们可以创建一个叫做 Player 类它包含了所有的数据我们想要把所有的变量变成一种类型。 在上面的代码中我们创建一个名为 Player 的类通过使用关键字 class然后给它一个名字来实现。这个名字必须是唯一的因为 class 是类型这里是创建一个新的变量类型然后是左右花括号就像定义函数那样注意末尾需要一个分号在花括号里面我们指定了我们需要的所有变量。
ok我们创建了一个全新的类叫 Player本质上它是一种类型如果我们开始使用 Player 类可以把它当作其他变量来创建。 我们给一个新变量命名为 player类型是 Player。
由类类型构成的变量称为对象新的对象变量称为实例我们在这里所做的是实例化了一个 Player 对象因为我们已经为那个 Player 类型创建了一个新实例。
如果我们想设置这些变量如果你有一点概念基础的话可能会这样使用。 然而如果我们现在尝试编译会得到一个错误。告诉我们 player 不能访问在类 Player 中声明的私有成员。
这是因为 “可见性” 的原因当你创建一个新类时您可以选择指定类中的内容的可见性默认情况下类中所有东西都是私有的这意味着只有类中的函数才能访问这些变量。然而我们希望能够从 main 函数中访问这些变量时我们需要做的是把它设为 public公有的。 public 意味着我们可以在类之外的任何地方访问这些变量。我们会在以后的内容中更多地讨论可见性现在先不讲这个。
现在编译程序就没有问题了。
现在我们实现了第一个目标已经彻底清理了代码把所有的变量都放在了一个地方这些变量集合可以代表一个 player我们把它们恰当地分组了。
03 方法
现在我们有了这些数据我们想让 Player 做一些事情例如移动所以要写一个函数来改变 X 和 Y 变量的值我们怎么做呢我们可以把它写成单独的函数。 #include iostream
using namespace std;class Player
{
public:int playerX;int playerY;int playerSpeed;
};void movePlayer(int x, int y,Player player)
{player.playerX player.playerSpeed *x;player.playerY player.playerSpeed*y;
}int main()
{Player player;move(1, -3,player);return 0;
}
这个函数的参数我们通过引用传递给它一个想要被移动的 Player因为我们要修改 Player 对象。所以还要取 xa 和 ya也就是我们在 X 轴和 Y 轴上 player 移动的距离。
我们现在试着调用这个函数。 没有问题。
我们可以做得更好一点之前我说过类实际上可以包含函数这意味着我们可以将 Move 函数移动到类中类内的函数被称为 方法 method 。 #include iostream
using namespace std;class Player
{
public:int playerX;int playerY;int playerSpeed 2; // speed移动速度void Move(int player_X, int player_Y){player_X playerSpeed*player_X;player_Y playerSpeed*player_Y;}
};int main()
{Player player;player.playerX 10; //X轴player.playerY 5; //Y轴//move(1, -3,player);player.Move(player.playerX,player.playerY);coutplayer.playerXendl;coutplayer.playerYendl;return 0;
} 我们还做了一些修改因为这个函数已经在类中了所以不需要传入 player 对象了因为它已经在 Player 对象中了所以我删除了里面相关的内容这样我们已经简化了我们的代码。 上面代码主函数的代码依旧还是有些复杂我们还可以进行修改也不想让角色的XY轴被随意调用所以我们可以通过private私有化下XY如果要修改角色的XY点则需要通过公有函数setPlaer代码如下
#include iostream
using namespace std;class Player
{
//私有的变量
private:int playerX; //x轴int playerY; //y轴int playerSpeed 2; // speed移动速度
public:void Move(int player_X, int player_Y){player_X playerSpeed*player_X;player_Y playerSpeed*player_Y;}void Move() //重载函数{playerX playerSpeed*playerX;playerY playerSpeed*playerY;}void setPlayer(int x, int y, int speed) //设置人物属性{playerSpeed speed;playerX x;playerY y;}
};int main()
{Player player;player.setPlayer(12,-4,5); //设置人物的X轴Y轴移动速度player.Move(); //需先设置人物属性才能能进行有效移动否者按照上一次数据进行移动//player.Move(player.playerX,player.playerY);return 0;
}
好了每个 Player 对象都有了自己的Move 函数当我们为指定的 Player 对象调用 Move 时这个 Player 对象将会移动这与 Player 类之外的 Move 函数没有什么不同它的作用就是让我们代码更干净看起来更好看当你处理很多代码时这是一个巨大的优势因为你有越多的代码情况就越复杂就越需要有这样的代码来保持代码整洁。
后话
这就是类的基本概念了它允许我们将变量分组到一个类型中并为这些变量添加功能因为如果你再回看一下这些代码我们真正做的是在一个类型中定义了三个变量我们还有一个处理这些变量的函数。当然这个函数可以做其他任何事情但它的要点是我们有数据和处理这些数据的函数这就是所谓的类了。