Зачем определять частные члены ниже общедоступных членов в С++?

В C++ иногда в определении класса сначала объявляются общедоступные члены, а затем частные. Но переменные или данные-члены обычно являются закрытыми и используются публичными методами. Итак, в этом случае переменные используются, но еще даже не объявлены. Таким образом, код становится трудным для понимания. Но я нашел известных программистов, сайты или книги, чтобы объявить закрытых членов позже. Кто-нибудь знает, в чем причина?


person Community    schedule 27.04.2009    source источник
comment
Дубликат: stackoverflow.com/questions/308581/   -  person S.Lott    schedule 27.04.2009
comment
Также: stackoverflow.com/questions/778281/   -  person e.James    schedule 27.04.2009


Ответы (6)


Я поступаю таким образом, поскольку пользователям моего класса не нужны приватные члены, их интересует публичный API (т.е. как использовать мой класс).

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

person Dominic Rodger    schedule 27.04.2009
comment
+1: файл заголовка должен действовать как контракт для пользователей класса. Там нет реализации. - person kgiannakakis; 27.04.2009
comment
За исключением, конечно, встроенных функций. Однако во всех случаях, кроме самых тривиальных, они должны идти после определения класса. - person rlbond; 27.04.2009
comment
За исключением шаблонов и стеков библиотек и т. Д. Дублирование нетривиально, если вы хотите делать это все время. Просто потому, что вы можете видеть доступность, не означает, что вы должны возиться с ней (там есть аналог в отражении для управляемых языков, если вы читаете между строк)... Удачи с «контрактным» мышлением в С++.. - person rama-jka toti; 28.04.2009
comment
почему бы не использовать ключевое слово struct в первую очередь? - person Florian; 27.02.2019

Мы читаем текст сверху вниз, поэтому самая актуальная информация должна быть вверху. В определении класса это общедоступный интерфейс.

person Community    schedule 27.04.2009

Частные члены и реализация должны быть скрыты от заголовочного файла. Поместить определения закрытых членов внизу — это быстрый способ сделать это. Возможно, лучше использовать Pimpl и скрыть приватную часть вашего класс во внутренней структуре.

person kgiannakakis    schedule 27.04.2009

Обычно частные члены не имеют значения. Если я смотрю на класс, чтобы определить, как использовать его где-то еще в коде, меня не волнует его внутреннее устройство, поэтому поместите частные члены внизу, так как мне не нужно знать о них. Если я изменяю класс, я потрачу время на поиск закрытых членов и знаю, что они будут внизу, вместо того, чтобы просматривать весь класс.

person Jared    schedule 27.04.2009

Мы как противоположности: Мой вопрос

Я полагаю, что когда вы знакомитесь с классом, полезнее сначала познакомиться с общедоступным интерфейсом, а затем углубляться в частные члены, когда вам это нужно. Если вы начнете с просмотра закрытых членов, у вас не будет контекста их использования.

person JimDaniel    schedule 27.04.2009

Согласованный. Частные члены должны быть объявлены внизу. Единственная веская причина для объявления закрытых членов в первую очередь, которую я нашел, — это когда функции нужно получить или вернуть пользовательский тип данных, например: вектор. Компилятор спросит вас о том, что это за данные.

Но даже в этом случае я предпочитаю делать:

{
private: /// advicing ofc theres more private below!
   earlier declare just of the type

public:


private:

};
person user3541285    schedule 16.04.2014