C++, privée dans les fonctions vraiment besoin d'être dans le fichier d'en-tête?

J'ai toujours pensé que des fichiers d'en-tête comme une sorte de "interface" décrivant une classe, auquel cas il serait préférable de garder les champs privés et des fonctions dans le fichier cpp.

Je comprends que privés doivent être des champs dans l'en-tête de sorte que d'autres classes peuvent dire combien de mémoire une instance d'une classe de consommer, mais il m'est apparu que je m'apprêtais à écrire un privé fonction d'assistance, que cette fonction pourrait être faite statique, auquel cas il n'y a pas besoin d'être "une partie de la classe" à tout, il pourrait tout aussi bien être une fonction régulière dans la définition de la classe de .fichier cpp.

Puis, il m'est apparu que tous fonctions privées pourraient être ré-écrit pour être statique par l'acceptation de pointeurs/références à des champs de la classe au lieu d'attendre d'être défini dans la classe.

Cela permettrait d'éliminer la nécessité de déclarer les fonctions privées dans le fichier d'en-tête.

Je n'aime pas suivre les conventions alors maintenant, je veux vous demander, est-il considéré comme une convention établie en C++, que les non-static private fonctions devrait être dans le fichier d'en-tête? Qu'en est statique des fonctions ou des constantes statiques?

EDIT: je vais y mettre un peu de code pour expliquer ce que j'obtiens à:

.h fichier:

#ifndef SOME_CLASS_H
#define SOME_CLASS_H

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

#endif

.fichier cpp

#include "SomeClass.h"

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

void SomeClass::combineWithX(int y)
{
    someHelper(&x);
    x += y;
}

Noter que someHelper(int* x) dans le fichier cpp références privé membre de x dans l'esprit, mais pas directement, et n'a donc pas besoin d'apparaître dans l'en-tête. Je me demandais si ce genre de chose est considéré comme "mauvais style'

  • Notez que les fonctions privées doivent être demande d'ami de l'intérieur de la classe, ou bien ils ne pouvaient accéder aux membres privés. Si ils n'ont pas besoin privée membres de, peut-être que ces fonctions ne devraient pas être eux-mêmes membres à tous.
  • Puisque vous ne pouvez pas rouvrir une classe d'expansion une fois fermé (C++11 9.2-p2), oui, vos fonctions de membre et de membre de vars de cette catégorie doivent être accouplés dans son decl. Vous pouvez certainement faire un pimpl-mise en œuvre, si désiré.
  • merci, j'ai emprunté votre lien (à l'origine je l'ai lié à une aggravation de la question)
  • les fonctions privées peuvent être mis à l'intérieur d'un privé intérieur de la classe, de cette façon, ils n'ont pas à être dans l'en-tête. stackoverflow.com/a/28734794/463758
  • Voir th réponses constructives, des explications pourquoi les fonctions privées (même si ils sont statiques ou non virtuelle) doivent figurer dans la déclaration de la classe: softwareengineering.stackexchange.com/a/239175/221200 softwareengineering.stackexchange.com/a/324450/221200
InformationsquelleAutor Ghost314 | 2015-02-05