2009-08-26 21 views
5

Która jest właściwa:definiowania kilka metod statycznych w C++

class xyz { 
    static int xyzOp1() { } 
    static int xyzOp2() { } 
}; 

LUB

namespace xyz { 
    static int xyzOp1() {} 
    static int xyzOp2() {} 
}; 

Czy jest coś konkretnego, które możemy uzyskać, gdy określają za pomocą znacznika klasy w porównania z tagiem przestrzeni nazw?

Czy jest jeszcze coś innego w zarządzaniu pamięcią, o którą musimy się martwić?

Odpowiedz

5

Nie widząc ciała tych funkcji, powiedziałbym, że przestrzenie nazw są bardziej odpowiednie. Dzięki przestrzeniom nazw możesz mieć instrukcje using, dzięki czemu nie musisz w pełni kwalifikować nazw funkcji podczas ich wywoływania.

Jedynym przypadkiem, w którym używane są klasy, jest sytuacja, w której statyczne metody mają jakikolwiek związek z obiektami klasy, np. kiedy muszą uzyskać dostęp do prywatnych członków instancji. Z Twojego opisu wydaje się, że nie będziesz tworzyć żadnych wystąpień xyz, więc nie powinieneś używać tutaj klas.

Z punktu widzenia zarządzania pamięcią nie ma różnicy między tymi podejściami.

+0

Dzięki, Pisałem niektóre procedury pomocnika, aby uzyskać informacje systemowe z parsowania/proc fs, te procedury pomocnicze naprawdę nie wymagają skojarzenia z klasą, w moim wymaganiu sensowne jest używanie przestrzeni nazw. Mogłoby się coś zmienić, gdybym chciał ukryć kilka z tych procedur pomocniczych, które inne procedury pomocnicze nazywają, ale nie są odsłonięte, w takim scenariuszu mógłbym preferować podejście klasowe. – harishvk27

8

Mają na myśli różne rzeczy. W kontekście class, static oznacza, że ​​metody nie wymagają działania obiektu, więc są bardziej podobne do darmowych funkcji. W kontekście namespace oznacza to, że funkcje mają wewnętrzne powiązania, dlatego są unikalne dla jednostki tłumaczeniowej, w której są zdefiniowane.

Ponadto członkowie class są prywatni domyślnie, więc, jak napisano, twoje funkcje klasowe są tylko nawiązywane od siebie nawzajem. Aby to zmienić, należy dodać specyfikator dostępu public: lub dokonać class a struct.

Jeśli potrzebujesz zestawu darmowych funkcji i nie potrzebujesz obiektów klasowych, prawdopodobnie lepiej będzie je zdefiniować jako funkcje inne niż static w przestrzeni nazw. Jeśli są zdefiniowane w wierszu pliku nagłówkowego, zwykle muszą być zadeklarowane jako inline. Jest to dorozumiane, jeśli są zdefiniowane w class.

1

Głównym czynnikiem decydującym o wyborze metody będzie to, że same funkcje mogą chcieć działać w prywatnym stanie lub korzystać z prywatnych metod, w którym to przypadku klasa statyczna jest zdecydowanie lepszym rozwiązaniem.

Jest kilka innych niuansów, ale ostatecznie klasa statyczna pozwoli ci uzyskać większą kontrolę nad enkapsulacją.

Powiązane problemy