类:面向对象范式总是让我感到困惑
Class: Object oriented paradigm had always confused me
有人可以用一些很好的例子解释清楚我c++类是如何有用的,为什么它是一个很好的编程实践。我读了很多关于类的书,用一些类在c++中做了一些编程,但我仍然不清楚为什么需要类,以及它们如何使代码更健壮和可读。
谢谢! !
当你输入一个脚本或20行或100行代码时,这没什么大不了的。
当你达到数百万时,你开始需要一种方法来实际可视化你的代码。你需要能够谈论不同的部分以及它们如何相互作用。
当你看一个很长的程序时,它是如何组织的?当你有20个函数时,哪些函数对应于哪些数据?现在记录并记住它,这样下次你看代码的时候,你就能马上回到你所看到的地方。
对象允许您将功能与其相关的数据分组。它可以让您快速找到所需的功能。一旦习惯了它,就很难想象为什么要在没有它的情况下编写代码。我不确定如果没有面向对象流程图,你将如何绘制设计图并将其展示给其他人?真的吗?
如果你设计你的非oo代码非常好地使用私有变量(这个文件的私有)和与数据相关的函数,你可以得到一些这种组织效果,但它是混乱的,有很多开销。此外,对于那些不太"Get"OO的人来说,将整个代码库送入代码地狱是非常容易的。
这是一种非常舒适,逻辑合理的方式来组织代码和数据。
- 在一所声誉良好的学校注册CS课程。
- 尽可能多地学习计算机编程课程。
- 阅读大量关于面向对象的书籍(以及关于过程/模块化编程的旧经典)
- 冲洗并重复直到毕业。
到那时你应该明白什么是类了
在游戏中,你有一个枪支类。它有一定数量的弹药。你要确保开火时,少了一颗子弹。当重新装填时,弹夹大小会被添加回弹药中。
最重要的是你要保持正确的"弹药"数量。通过封装所有组成枪的变量,作用域到一个枪的实例。枪的使用者不需要考虑太多,也不需要担心破坏/破坏弹药(或其他)的价值。
class CGun
{
private:
unsigned int ammo;
public:
CGun();
void Reload()
{
if (ammo == 0)
{
ammo += 40/*40 bullets per clip*/
}
}
void Fire()
{
if (ammo > 0)
{
--ammo;
}
}
};
现在你可以很容易和安全地使用这个对象,而不用担心破坏底层数据。
int main()
{
CGun aGun;
aGun.Fire();
}
我要给你的过于简化的答案是,当你注意到你的程序往往有1)由相关数据组成的结构,以及2)在这些结构上操作的许多函数时,那么你就有了一个类。
例如,在实时操作系统中,一个任务通常有一个任务控制块结构,它包含了很多关于任务的信息,比如它的开始指针,它的优先级,它的堆栈的位置,它的状态(准备运行,阻塞,停止,尚未启动,等等),它的名字,以及任何线程特定的全局变量的位置。还有很多对任务进行操作的函数,它们将指向该任务控制块的指针作为参数。如果这个实时操作系统是用c++编写的,那么你就可以创建一个包含任务控制块数据的Task类,而在任务上操作的函数将是这个类的方法。
这是一个非常开放的问题,但简而言之,类提供了编程与需要考虑的现实世界对象、概念和想法之间更好的表示。类可以用来表示物理对象或概念以及可以对其执行的操作。通过链接对象和操作,可以使使用和关系更加明显,简而言之,使代码更容易掌握(尽管在大多数情况下仍然不是琐碎的)。
- 分段错误(内核转储) C++面向对象编程
- 由于缺少类模板,NVCC 编译面向对象代码时出现问题
- 在C++面向对象程序中,谁负责删除传递给构造函数的对象
- 是否有一种设计模式或面向对象的基本原则来处理这种共享资源的情况?
- 对"车辆的 vtable"的未定义引用 - 面向对象的编程练习
- 关于 C++ 中面向对象中的 decltype 类型
- 多态性的面向对象方法
- 成员功能在面向对象的框架中返回std :: vector.size()的效率
- 以面向对象的方式解析自定义数据包
- 面向对象编程 - 位域私有结构的公共参考
- 面向对象的编程-C 练习
- 如何使用面向对象的技术在 win32 和 c++ 中创建编辑控件
- C++面向对象的字典程序
- 面向对象架构,用于简单的基于着色器的GL程序
- 面向对象 成本计算C++不起作用
- 面向对象编程和对象组合,如何放置组合属性?
- 我在哪里可以找到一些 c++ 中的好例子来研究面向对象的概念
- 面向对象的设计选择
- 面向对象编程错误
- 类:面向对象范式总是让我感到困惑