类与助手例程-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,并管理这两个成员,以便