2013-07-18 2 views
5

я просматривал открытый исходный код и нашел объявление класса, как это:несколько «частные» деклараций в классе

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

Есть ли какое-то время вы хотели бы сделать такую ​​вещь, за исключением того, чтобы напомнить вам конфиденциальности членов, когда очень длинный список деклараций?

+7

Я использую это иногда для того, чтобы структурировать членов в группы. –

+0

кажется чересчур педантичным, но, возможно, это остаточный код старого кода, который чередовал общественные и частные разделы. – TemplateRex

+0

@TemplateRex Нет, это не изменилось - просто так. –

ответ

4

Это особенно полезно для этого типа сценария:

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; 
} 

(Комментарии, как // Constructurs etc. только там, чтобы показать, что это часть «эти вещи принадлежат вместе»)

+0

это не так полезно, читателя можно смутить (особенно с длинными частями кода), поэтому некоторое правило необходимо, например, 'public'-' protected '-'private'. Комментарии есть не только для этой цели, но они - единственная существенная вещь;) –

+0

@EnoahNetzach: Это то, для чего предназначены стандарты кодирования/руководства по стилю. В первый раз вы можете быть удивлены, но если код последовательно использует один и тот же подход, это не займет много времени, чтобы понять это. Мы следим за этим типом подхода, когда я работаю [стандарты кодирования BDE] (https://github.com/bloomberg/bsl/wiki/Introduction-to-BDE-Coding-Standards), и в первый день это было странно, но тогда это становится * стандартный *. Особенно я предпочел бы другой порядок, но тот факт, что ** есть порядок, является более важным, чем выбор. –

+0

«Рассматривая» объявления класса 2500 строк, да, я хорошо знаю «это помогает иметь строгий стандарт». Но вы также можете получить несколько разделов частных/публичных объявлений, если класс должен быть двоичным, совместимым с существующим классом, так как вы не можете изменить порядок виртуальных функций в этом случае, или что-то сломается. –

1

Да, вы можете сделать это, чтобы помнить член приватности, но и отдельные тип данных вашего класса, атрибуты и методы, и т.д ...

0

Я думаю, вы говорите о коде C++, В C# вы думаете, что в объявить accessor like (public) перед каждой отдельной переменной. делает код более читаемым. Я думаю,

+3

См. тег C++: p – dotixx

+0

@dotixx Возможно, это был программист на C#, который пытается научиться C++ – TemplateRex

1

Это не так, и вы можете быть правы, это может быть напоминание, семантически то же самое, что использовать его только один раз. На мой взгляд (и использование), используя один раздел более одного раза, можно смутить и ввести в заблуждение читателей, не говоря о том, что более сильное напоминание использует комментарии, особенно для членов структуры в группы.

+0

Этот ответ заставляет задуматься, есть ли C++ IDE, который раскрашивает фон 'public' /' private'/'protected' zone' struct'/'class' в зависимости от его доступа ... если не я думаю, что это было бы хорошо :) –

+0

в редакторах кода, таких как _TextMate_ и (если я не ошибаюсь) _Sublime Text 2_ вы можете определить части кода с регулярным выражением, а затем использовать эти определения для создания правил подсветки, чтобы вы могли определить пользовательское синтаксическое регулярное выражение для распознавания разделов «public/private/protected», а затем назначить им bg цвет. –

+0

Это звучит хорошо ... надеюсь, что когда-нибудь все OO IDE предлагают это по умолчанию (не * regex witchery *;) –

Смежные вопросы