c++ - 辅助函数应该放在头文件中还是放在实现文件中?

标签 c++ oop coding-style

在 C++ 中为类编写辅助方法时,是否应在头文件 (.h) 中的类定义中将其声明为私有(private)方法?例如:

/*Foo.h*/
class Foo {

     public:
         int bar();

     private:
         int helper();
};
...
/*Foo.cpp*/
...
int foo::bar() {
    int something = this->helper();
}

int foo::helper() {
    ...
}

或者,最好不要将其声明为类的私有(private)成员,而是将其设为实现中的独立函数?

/*Foo.h*/
class Foo {
    public:
        int bar();
};
...
/*Foo.cpp*/
...
int Foo::bar() {
    int something = helper();
    ...
}

int helper() {
    ...   
}

最佳答案

实现文件中的独立函数改进了封装:它不需要在 header 中声明,因此无论出于何种原因,当其签名发生更改时,都无需重新编译客户端代码。对我来说,这是一个足够好的理由在可行的情况下更喜欢这个选项。 (请务必将其放在匿名命名空间中,以防止链接时标识符冲突。)

但是,private 方法可以通过 this 指针访问类实例及其私有(private)部分。如果它需要这样的访问,那么它必须是方法或 friend。在这两种情况下,它都会在类定义(头文件)中可见,并且方法比 friend 更方便。

关于c++ - 辅助函数应该放在头文件中还是放在实现文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12737203/

相关文章:

c# - 为具有大量依赖项的库创建包装器的正确方法

c++ - JSON 响应拆分为多个 cURL 回调

java - NoSQL DAO 实现

c++ - 在 C++ 中调用辅助类的重写方法

java - 在 Eclipse 中,如何更改类/类型模板中的默认修饰符?

c++ - 如何从现有的 vtkPolyData 复制折线的子集?

c++ - CStrings 初始化和使用 vector 的 vector

javascript - 使用 Javascript OOP 进行图像显示

c++ - 一段用 gcc 而不是 g++ 编译的代码

coding-style - 与不遵循团队定义标准的队友合作的想法?