2013-07-18 17 views
5

Szukałem przez jakiś otwarty kod źródłowy i znalazł deklarację klasy tak:Kilka „prywatny” deklaracji w klasie

class Foo{ 
    private: 
     // declarations 
    private: 
     // declarations 
    private: 
     // declarations 
    public: 
     // declarations 
}; 

Czy jest jakiś czas, co chcesz zrobić coś takiego, chyba przypomnieć, prywatności członków, mając długą listę deklaracji?

+7

Używam tego czasami w celu ułożenia członków w grupy. –

+0

wydaje się zbyt pedantyczny, ale może jest resztką starszego kodu, który zawierał naprzemiennie sekcje publiczną i prywatną. – TemplateRex

+0

@TemplateRex Nie, to się nie zmieniało - tak po prostu. –

Odpowiedz

4

Jest to szczególnie użyteczne dla tego typu scenariusz:

class SomeClass 
{ 
    // COnstructors etc. 
    public: 
     SomeClass(); 
     SomeClass(const SomeClass& other); 
     ~SomeClass(); 
     SomeClass operator=(const SomeClass& other); 
     SomeClass(const OtherClass& other); 

    // Internal use functions. 
    private: 
     int SomePrivateFunc(); 
     int OtherPrivateFunc(); 

    // Functions that "do stuff" with this class. 
    public: 
     int SomeFunc(); 
     int OtherFunc(); 

    // Private member variables. 
    private: 
     int x, y; 

    // Public member variables. 
    public: 
     int value; 
} 

(Uwagi jak // Constructurs etc. są po prostu tam, aby pokazać, że jest to część „te rzeczy są ze sobą”)

+0

to nie jest tak przydatne, czytelnik może być zdezorientowany (szczególnie z długimi fragmentami kodu), więc pewna zasada jest potrzebny, na przykład 'public' -protected' -prywatny'. Komentarze są nie tylko w tym celu, ale są jedyną niezbędną rzeczą;) –

+0

@EnoahNetzach: To jest to, do czego służą standardy kodowania/przewodniki stylu. Za pierwszym razem możesz być zaskoczony, ale jeśli kod konsekwentnie stosuje to samo podejście, nie trzeba wiele, aby to zrozumieć. Stosujemy takie podejście, w którym pracuję [standardy kodowania BDE] (https://github.com/bloomberg/bsl/wiki/Introduction-to-BDE-Coding-Standards) i pierwszego dnia było to dziwne, ale potem staje się * normalny *. W szczególności wolałbym inną kolejność, ale fakt, że ** jest ** zamówieniem, jest ważniejszy niż wybór. –

+0

"Zajmując się" deklaracjami klasy o długości 2500 linii, tak, doskonale zdaję sobie sprawę z tego, że "pomaga to mieć ścisły standard". Ale możesz również skończyć z kilkoma sekcjami prywatnych/publicznych deklaracji, jeśli klasa musi być binarnie zgodna z istniejącą klasą, ponieważ nie możesz zmienić kolejności wirtualnych funkcji w tym przypadku lub rzeczy się psują. –

1

Tak można to zrobić do zapamiętania członków prywatność, ale także, aby oddzielić typy danych Twojego klasa jest, atrybuty i metody, etc ...

0

Chyba mówisz kodu C++, W języku C# Państwo przypuszczają zadeklaruj akcesor taki jak (publiczny) przed każdą zmienną. powoduje, że kod jest trochę czytelniejszy. Zgaduję, że

+3

Zobacz tag C++: p – dotixx

+0

@dotixx może to programista C#, który stara się nauczyć C++ – TemplateRex

1

To nie jest złe, a możesz mieć rację, może to być przypomnienie, semantycznie to samo, co użycie go tylko raz. Moim zdaniem (i używanie) używanie jednej sekcji więcej niż jeden raz może wprowadzać w błąd i wprowadzać w błąd czytelników, nie mówiąc, że silniejsze przypomnienie używa komentarzy, zwłaszcza dla członków struktury w grupy.

+0

Ta odpowiedź zastanawia mnie, czy istnieje IDE C++, które koloruje w tle strefy 'public' /' private'/'protected' klasy' struct'/'w zależności od jej dostępu ... jeśli nie, to byłoby fajnie :) –

+0

w edytorach kodu takich jak _TextMate_ oraz (jeśli się nie mylę) _Sublime Text 2_ można zdefiniować fragmenty kodu za pomocą wyrażenia regularnego, a następnie użyć tych definicji, aby utworzyć reguły podświetlania, dzięki czemu można zdefiniować wyrażenie regularne składni, aby rozpoznać sekcje 'public/private/protected', a następnie przypisać je kolor bg. –

+0

To brzmi dobrze ... mam nadzieję, że któregoś dnia wszystkie OO IDE zaoferuje to domyślnie (nie przez * regex witchery *;) –