Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
类与助手例程-C++; 我是C++新手,来自C背景。 我现在正在研究C++项目,当我添加代码时,我经常会问自己,我应该只需要一组辅助程序或为它们创建一个专用类。_C++_C_Oop - Fatal编程技术网

类与助手例程-C++; 我是C++新手,来自C背景。 我现在正在研究C++项目,当我添加代码时,我经常会问自己,我应该只需要一组辅助程序或为它们创建一个专用类。

类与助手例程-C++; 我是C++新手,来自C背景。 我现在正在研究C++项目,当我添加代码时,我经常会问自己,我应该只需要一组辅助程序或为它们创建一个专用类。,c++,c,oop,C++,C,Oop,有什么建议吗?我可以看出是否存在代码可恢复性元素,或者创建类是否有意义。但是,如果一组助手例程中的代码只用于单个功能的专用任务,那么将它们放入类中会有什么好处呢 我意识到我的问题相当抽象,可能含糊不清,但如有任何建议/最佳做法,将不胜感激 谢谢。我的情况也一样。我刚从C世界来,现在我一直在使用C++。 我的建议是创建一个类并调用它的方法 也许将来,有人可以使用同一个类;) 在进行面向对象编程时使用类,即当有某种类型的对象被操作时,而不是在编写实用程序函数时 更具体地说,当使用C时,您将有一个 t

有什么建议吗?我可以看出是否存在代码可恢复性元素,或者创建类是否有意义。但是,如果一组助手例程中的代码只用于单个功能的专用任务,那么将它们放入类中会有什么好处呢

我意识到我的问题相当抽象,可能含糊不清,但如有任何建议/最佳做法,将不胜感激


谢谢。

我的情况也一样。我刚从C世界来,现在我一直在使用C++。 我的建议是创建一个类并调用它的方法


也许将来,有人可以使用同一个类;)

在进行面向对象编程时使用类,即当有某种类型的对象被操作时,而不是在编写实用程序函数时

更具体地说,当使用C时,您将有一个

typedef struct { /*...*/ } Foo;
什锦

Foo *make_foo();
void print_foo(FILE *, Foo const *);
// etc.
您应该将操作
Foo
对象的函数放在
类Foo
中。但是,当您实现了一组有用的数学运算时,它们只使用浮点数并返回它们,使它们成为独立的函数,并考虑使用命名空间而不是类来将它们分组在一起。
<> P> C++的伟大之处在于它不强制基于类的方法对你;这并不是每个问题域都能很好地匹配。

在我看来,在良好的OO设计中,您不应该创建任何帮助器类。每个类都应该表示现实世界中的某个对象,并且应该包含表示该对象所执行操作的方法。在现实世界中,我们没有任何与某个物体无关的动作。因此,我认为帮助器类或静态方法是OO开发中的地狱:)。应该提到的是,如果您创建的类不表示系统的任何对象,并且仅用于内部使用(仅用于您的方法中,不会在uml中显示),则可以将其移动到另一个子模块项目。

这取决于功能。如果他们操纵一组公共数据, 将数据放入类中并使其成为成员是有意义的。如果 他们或多或少是相互独立的,把他们放在一个班级里 实际上是误导;它暗示了一种不存在的关系

无论如何,当功能更多时,不要害怕使用免费功能
合适

下面是创建类可能有用的一些原因:

  • 通过类名可以避免名称冲突

  • 类名可能会简化函数名和/或使它们更具可读性

  • 如果您的函数需要枚举,那么这些枚举将与您的函数一起打包

  • 如果函数访问常量,则常量将打包到类中

  • 如果函数支持设置(或在将来的版本中支持),则将其作为非静态方法实现会使多线程更容易


如果函数不保持内部状态并且可重新输入,我看不到定义一个具有静态成员的类或创建类对象只是为了调用方法的点——这将是无意义的键入

什么是

在最严格的OOP意义上,类是一组相关数据,其中包含对这些数据进行操作的方法。然而,C++远不是纯OOP语言,而<>强>封装< /强>是一些宗教狂热的无意识Uutopy的更好的目标。 哪些数据应放入

相关数据通常应该绑定在一起,例如,缓冲区的长度和关联的缓冲区属于一起,因为没有缓冲区的长度就不能使用缓冲区

封装(和德米特定律)然后建议它们应该是私有的,这样类的客户机就不会依赖于它的内部表示。但是在实践中,直接向公众公开一些信息是可行的,以避免创建一堆getter/setter函数(尽管这些函数有自己的优点)

但至少,具有相关不变量(*)的数据应该是
私有的
,以便可以强制执行这些不变量

哪些函数应放入
类中

需要直接访问类私有数据的任何函数都应该是类方法。一个值得注意的例外是运算符,其签名是固定的。这可以通过给他们一个友好的访问来解决

最重要的是,任何不需要直接访问的函数(因为其他方法为其功能提供了足够的信息)最好作为自由函数实现。这增加了封装

典型的例子是(和相关的)的
std::string::find_first_应作为自由函数实现

什么是斑点

有时,您会发现自己拥有一堆相关数据,但它们之间没有强不变量,例如:

struct State {
  Language language;
  Page currentPage;
};
如果更改语言,则不会更改页面,反之亦然。这两者只是为了方便而结合在一起。这不是一个
本身,由于其非结构化形状,有时被称为
blob
。这里不需要更多的封装,因此方法是多余的(尽管构造函数可以提供帮助)


(*)关于不变量

如前所述,缓冲区的长度与缓冲区本身紧密相连,它们应该一起更改。因此,应该存在一个buffer类,它有两个成员:length和buffer,并管理这两个成员,以便