【发布时间】:2015-04-01 12:55:43
【问题描述】:
我在头文件interface.h 中有一个类MyClass 声明,在file1.cpp 中有一些静态函数(foo 和bar 等等)。静态函数仅在 file1.cpp 内部使用,但它们需要修改 MyClass 的私有/受保护成员。
// in "interface.h"
class MyClass {
// maybe declare as friend?
// friend static void foo(MyClass &ref);
private:
double someval;
}
// in "file1.cpp"
static void foo(MyClass &ref) {
ref.someval = 41.0;
}
static void bar(MyClass &ref) {
ref.someval = 0.42;
}
// function that uses foo/bar
void doSomething(MyClass &ref) {
foo(ref);
}
想法 1:以某种方式宣布他们为 MyClass 的朋友?
为什么不好:它们是静态的并且在不同的编译单元中。除此之外,它们会将它们暴露给 MyClass 的用户,他们不需要知道任何关于它们的信息。
想法 2:没有想法 2。
【问题讨论】:
-
您是否考虑过重新设计您的班级以使其不再需要朋友?需要更多背景信息在这里提供建议。
-
在您的示例中,我将简单地为
someVal编写一个公共设置器并在doSomething中使用它。除非您想防止任何人都可以访问设置器,否则不需要朋友。正如尼尔所说,需要更多信息才能做出决定。 -
foo和bar函数比演示的更复杂(因此它们不能更改为简单的 setter 和 getter)关键是要有一些可以修改类的函数,但是不会弄乱它的界面。 -
所以我不希望班级的用户知道
foo和bar函数,但我希望foo和bar更改MyClass中的任何内容。 -
相关问题的链接实际上包含您问题的答案。
标签: c++