C++,私有函数真的需要在头文件中吗?

C++, do private functions really need to be in the header file?(C++,私有函数真的需要在头文件中吗?)
本文介绍了C++,私有函数真的需要在头文件中吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直认为头文件是一种描述类的"公共接口",在这种情况下,最好将私有字段和函数保留在cpp文件中。

我知道头中需要有私有字段,这样其他类才能知道一个类的实例将消耗多少内存,但当我要编写一个私有帮助器函数时,我突然想到这个函数可以成为静态的,在这种情况下,它根本不需要是类的一部分,它可以很容易地成为类定义的.cpp文件中的常规函数。

然后我想到,所有私有函数可能会重写为静态函数,方法是接受指向类字段的指针/引用,而不是期望在类中定义。

这将消除在头文件中声明任何私有函数的需要。

我确实喜欢遵循约定,所以现在我想问一下,非静态私有函数应该在头文件中是不是在C++中被认为是既定的约定?静态函数或静态常量怎么办?

编辑:我将放入一些代码来解释我的意思:

.h文件:

#ifndef SOME_CLASS_H
#define SOME_CLASS_H

class SomeClass
{
private:
    int x;
public:
    void combineWithX(int y);
};

#endif

.cpp文件

#include "SomeClass.h"

void someHelper(int* x)
{
    *x = (*x) + 1;
}

void SomeClass::combineWithX(int y)
{
    someHelper(&x);
    x += y;
}
请注意,cpp文件中的someHelper(int* x)在本质上引用了私有成员x,但不是直接引用,因此不需要出现在头中。我想知道这种事情是不是被认为是‘糟糕的风格’

推荐答案

我同意需要在头文件中公开实现详细信息是一个问题;这会干扰接口和实现的分离。

如果.cpp文件中的私有帮助器函数需要访问私有成员变量,则将这些函数移动为自由函数(我假设这就是您所说的"静态")将不起作用。

您可能有兴趣查看pImpl idiom(more)

这篇关于C++,私有函数真的需要在头文件中吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Unknown type name __m256 - Intel intrinsics for AVX not recognized?(未知类型名称__M256-英特尔AVX内部功能无法识别?)
How can an declare an array in a function that returns an array in c++(如何在用C++返回数组的函数中声明数组)
Is it possible to define a class in 2 or more file in C++?(在C++中可以在两个或多个文件中定义一个类吗?)
Why can#39;t I create an array of automatic variables?(为什么我不能创建一个自动变量数组?)
zeromq: reset REQ/REP socket state(Zeromq:重置REQ/REP套接字状态)
Can I resize a vector that was moved from?(我可以调整从中移出的矢量的大小吗?)