我有一个与C ++设计有关的问题。在决定是否应该创建课程时,您使用了哪些标准?从理论上讲,你可以在课堂上放置任何东西(主要功能除外) - 但我慢慢地了解到这种方法可能不是最好的方法。那么 - 你认为什么时候不应该创建一个类,为什么?
答案 0 :(得分:4)
作为一般规则,只要您拥有数据结构,并且该数据结构具有将(大部分)使用该结构的特定操作集,就创建一个类。
答案 1 :(得分:2)
当您拥有一些对其进行某些操作的数据时,创建一个类。如果您发现自己有一个文件包含一些静态全局数据,而某些函数使用它们,那么最好使用类。确实,您可能只需要该类的一个实例,然后基本上与具有全局/函数的文件相同,但您永远不知道是否需要更多实例。我发生了很多个人经历!
不要强迫所有人上课。有些事情不是阶级。例如数学函数。它们只是对输入进行操作并产生输出的函数,它们没有任何状态。类中强制输入数学函数的一个例子是Java,其中有一个充满静态函数的Math类!这完全是愚蠢的。 (是的,我知道,Java不能在课外进行任何操作,因为它可以通过设计强制提供所有课程!BY DESIGN!)
无论如何,有些事情非常明显。例如,一个“大数字”的类加上大量的运算符重载,OO的东西(显然),增强的数据结构,自我构建/破坏等。
有些可能不那么明显。以一个随机发电机为例。一方面,你可能会争辩说它有一个需要存储的种子并且rand()
对它进行操作,所以它应该放在一个类中。这是有道理的。然而,您可能还说所有程序使用相同的rand()
,您不需要2个实例,如果您为它创建了一个对象,您必须不断地将它传递给所有不值得的人。在这种情况下,您必须根据您的程序本身决定是否根据您的程序创建课程。
答案 2 :(得分:1)
没有严格的规则(除了你可以在教科书或“专家”的讲座中找到的那些规则),但基本上你可以出于以下两个原因之一来定义一个新课程:
第一种情况实质上是定义一个全新的类(虽然它可能是一个相对通用的类的子类),而第二种情况是定义一个超类的新子类,它主要描述了它的外部行为。
有点担心“疯狂”。 C ++有普通的结构和类(虽然从技术上讲,区别仅在于成员默认为公共与私有),有些东西(例如,参数列表或简单的内部结构)可能更好地保留为简单的结构,而不是全部数据成员私有,需要setter和getter等(Java和其他一些没有struct概念,因此所有内容都必须定义为类,无论如何。)