Mam wątpliwości dotyczące metod prywatnych & funkcji. Powiedzmy, że mam pewne metody użytkowe, które nie muszą znajdować się w klasie. Ale te same metody muszą wywoływać inne, których nie chcę ujawniać użytkownikowi. Na przykład:Prywatny obszar nazw w plikach źródłowych
Suspect.h
namespace Suspect {
/**
* \brief This should do this and that and more funny things.
*/
void VerbalKint(void); // This is for you to use
}
Suspect.cpp
namespace Suspect {
namespace Surprise {
/**
* \brief The user doesn't need to be aware of this, as long
* the public available VerbalKint does what it should do.
*/
void KeyserSoze(void) {
// Whatever
}
} // end Surprise
void VerbalKint(void) {
Surprise::KeyserSoze();
}
}
Tak, ten układ działa. Po dodaniu Suspect.h
widoczny jest tylko VerbalKint
. ten można także osiągnąć stosując klasę i znakowanie VerbalKint
jako statyczne:
class Suspect {
public:
// Whatever
static void VerbalKint(void);
private:
static void KeyserSoze(void);
};
Chciałbym wiedzieć, czy jest jakaś różnica między tymi dwoma podejściami. Czy jest lepszy (szybszy, łatwiejszy do utrzymania) niż drugi?
Jakie są Twoje myśli?
Powinieneś zrobić 'KeyserSoze'' static' również w klasie, jeśli chcesz, aby przykłady były równoważne. Jeśli jednak umieścisz go jako klasę w pliku nagłówkowym, to wszyscy, włącznie z tym plikiem nagłówkowym, mogą stwierdzić, że istnieje funkcja o nazwie 'KeyserSoze', więc nie można jej" ukryć ". –
Po pierwsze: nie można utworzyć deklaracji przekazania statycznej funkcji bez uwzględnienia definicji klasy. – selalerer
@JoachimPileborg, dzięki. Tęsknie za tym! –