c++ - 只有公共(public)静态方法的帮助类

标签 c++ oop design-patterns static

<分区>

我希望创建一个仅包含公共(public)静态方法的辅助类。我声明了一个类而不是命名空间,因为我将把这个类与其他类交 friend ,这样它也可以对它们的私有(private)成员进行操作。

这被认为是一种糟糕的 OOP 做法吗?是否有更好的既定方法来实现此目标,或者为此类案例提供类似模式的名称,以便我可以在互联网上进行进一步研究?

谢谢。

最佳答案

Is this considered a bad OOP practice?

当然。事实上,它只是不是 OOP1。这本身很好,但使用类是不必要的麻烦。

Is there an established better way to achieve this goal

是的——使用命名空间:“辅助”函数几乎绝对不能在类中占有一席之地。

I will befriend this class with others so that it can operate on their private members as well.

如果你有很多公共(public)函数访问一个类型的私有(private)成员,这是一个很好的暗示,表明你的接口(interface)太宽泛,或者你的类有太多事情要做(记住“S”SOLID:一个单一的责任每个类(class))。是时候重构了。您的辅助函数现在可能应该知道您的其他类。相反,您的其他类应该调用这些助手并将数据成员作为参数传递。


1 OOP 意味着“这段代码使用了一个类”。相反,它是一种编写代码的方式,将数据与行为进行逻辑分组,以实现封装、抽象和(运行时)多态性。类是实现此目标的工具,但它们本身并不是目标。做您打算做的事情不会对数据及其行为进行分组(相反:如果有的话,它会将其拆分)并且不会帮助抽象、封装或多态性。

关于c++ - 只有公共(public)静态方法的帮助类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50452161/

相关文章:

c++ - 如何在 C++ 函数模板中指定默认的非模板参数初始值设定项?

c++ - std::bind: 错误:函数调用的参数太少,未指定单个参数

C++:去虚拟化叶子类

javascript - 对于构建 HTML/JavaScript Air Apps 是否有任何好的指南、引用资料、设计模式或只是好的建议

c# - IObservableCollection<ViewModel<T>> 包装 ObservableCollection<T>

c++ - 需要帮助确定输入的字符是符号、数字还是字母

android - 在 Android Studio 中调试动态加载的 native 库?

oop - 一棵树,其中每个节点可以有多个父节点

c# - 这是糟糕的 oop 设计吗?

javascript - 您认为哪个更好? Vue UI设计