我在一个名为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: 没有第二个想法。相关链接: 是否可能将友元函数声明为静态?
someVal
编写一个公共 setter,并在doSomething
中使用它。除非你想防止任何人都能访问该 setter,否则不需要使用 friends。正如 Neil 所说,需要更多信息才能做出决定。 - 463035818_is_not_a_numberfoo
和bar
函数比演示的更复杂(因此不能将它们改为简单的setter和getter)。重点是要有一些可以修改类但不会使其接口混乱的函数。 - user10607