Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
kylroma
Одессит
199 / 70 / 21
Регистрация: 30.12.2013
Сообщений: 254
Записей в блоге: 1
Завершенные тесты: 1
#1

Рекомендация: сначало public, потом protected/private - C++

10.07.2014, 16:15. Просмотров 1367. Ответов 28
Метки нет (Все метки)

На хабре есть статья "90 рекомендаций по стилю написания программ на C++". Интересует вот этот пункт:
44. Разделы класса public, protected и private должны быть отсортированы. Все разделы должны быть явно указаны.
Сперва должен идти раздел public, что избавит желающих ознакомиться с классом от чтения разделов protected/private.


Недавно столкнулся в примере программы. Сначало public, а потом private. Ужасно неудобно читать такую программу. Начинал с конца.
Так вот, действительно, ли является хорошим тоном так писать программы? Или это извращение какое-то?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
11.07.2014, 10:33     Рекомендация: сначало public, потом protected/private
  #16

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
только вот ассоциировать это именно с линуксом, по-моему, немного странно.
это да, просто говорю, что там это часто встречается. Еще по долгу службы сейчас OpenJDK ковыряю, там это тоже практикуется. В OpenJDK вообще много странностей)

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Voivoid
674 / 277 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
11.07.2014, 12:09     Рекомендация: сначало public, потом protected/private #17
Цитата Сообщение от Убежденный Посмотреть сообщение
группировать члены класса лучше по каким-то концептуальным или логически
общим признакам
А чем уровень доступа не признак?

Цитата Сообщение от Убежденный Посмотреть сообщение
конструкторы-деструкторы
Они как правило всегда public

Цитата Сообщение от Убежденный Посмотреть сообщение
затем public-интерфейс
public

Цитата Сообщение от Убежденный Посмотреть сообщение
дальше перегруженные операторы
Тоже как правило public

Цитата Сообщение от Убежденный Посмотреть сообщение
потом какие-нибудь там internal-методы
начался protected/private

Цитата Сообщение от Убежденный Посмотреть сообщение
потом private-данные
private

Цитата Сообщение от Убежденный Посмотреть сообщение
Если у меня какой-то член данных будет в паблике
Ну-у-у, похоже на весьма редкий случай. Обычно или все члены в public или все в private.



Итого по сути и получается сначала public потом private ( ну и protected если уж куда пихать, так между ними ). По-моему все логично и нисколько не противоречит рекомендации с хабра. Не знаю уж где ты нашел намеки на какую-то абсолютную истину. Разве кто-то утверждает, что данной рекомендации стоит следовать абсолютно всегда? Вроде нет

Цитата Сообщение от Renji Посмотреть сообщение
В C++11 не нужно уже.
Есть еще boost::noncopyable
John Prick
774 / 707 / 129
Регистрация: 27.07.2012
Сообщений: 2,026
Завершенные тесты: 3
11.07.2014, 12:32     Рекомендация: сначало public, потом protected/private #18
Цитата Сообщение от Kastaneda Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
public:
* * // что-нибудь
protected:
* * // что-нибудь
public:
* * // что-нибудь
private:
* * // что-нибудь
protected:
* * // что-нибудь
public:
* * // что-нибудь
// и т.д.
Некто Мэтью Уилсон обожает подобный стиль написания. Каждая логически отдельная секция (например, внутренние тайпдефы, конструкторы, изменяющие/константные методы и т.д.) отделяется через public/private. Ну какой-то смысл в этом есть (хотя можно было бы просто пустой строкой отдлять).

Добавлено через 2 минуты
Цитата Сообщение от Voivoid Посмотреть сообщение
конструкторы-деструкторы
Они как правило всегда public
Неужели? По-моему, 50/50, как минимум.
Voivoid
674 / 277 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
11.07.2014, 12:48     Рекомендация: сначало public, потом protected/private #19
Цитата Сообщение от John Prick Посмотреть сообщение
Ну какой-то смысл в этом есть (хотя можно было бы просто пустой строкой отдлять).
По-моему фигня какая-то. Вот внутри секции доступа имеет смысл разбивать объявления на логические группы ( скажем сначала typedef'ы, потом enum'ы, потом виртуальные функции и т. д. )

Цитата Сообщение от John Prick Посмотреть сообщение
Неужели? По-моему, 50/50, как минимум.
Не знаю как у тебя такие числа получились. Разве что за счет некопируемых классов. В этом случае да, имеет смысл воткнуть private конструктор на самый верх ( сам я кстати предпочитаю boost::noncopyable ), но это на мой взгляд скорее исключение подтверждающее правило. Ведь никто не писал, что надо отключать голову и тупо следовать рекомендациям, нет ведь?
John Prick
774 / 707 / 129
Регистрация: 27.07.2012
Сообщений: 2,026
Завершенные тесты: 3
11.07.2014, 12:52     Рекомендация: сначало public, потом protected/private #20
Цитата Сообщение от Voivoid Посмотреть сообщение
Не знаю как у тебя такие числа получились.
Я о том, что конструкторы и деструкторы, по твоему же собственному выражению, "как правило всегда" public. Это далеко не так, на мой взгляд.
Voivoid
674 / 277 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
11.07.2014, 12:54     Рекомендация: сначало public, потом protected/private #21
Цитата Сообщение от John Prick Посмотреть сообщение
Я о том, что конструкторы и деструкторы, по твоему же собственному выражению, "как правило всегда" public. Это далеко не так, на мой взгляд.
Ну вот мне и интересно как у тебя такие числа получились. В моей практике ( как я уже писал за исключением noncopyable классов ) приватные конструкторы и деструкторы это весьма редкий случай.
SatanaXIII
Супер-модератор
Эксперт С++
5604 / 2638 / 242
Регистрация: 01.11.2011
Сообщений: 6,497
Завершенные тесты: 1
11.07.2014, 12:59     Рекомендация: сначало public, потом protected/private #22
Voivoid, John Prick, ключевое место в ваших рассуждениях:
Цитата Сообщение от Voivoid Посмотреть сообщение
По-моему
и
Цитата Сообщение от John Prick Посмотреть сообщение
на мой взгляд

Мое персональное предвзятое мнение, что следует группировать методы по определенным, свойственным именно для этого класса (в другом можно и по другому), признакам, и ближе к началу писать основное - методы, ради которых класс и пишется. А всякие дополнительные внутренние плюшки уже можно и в конец писать. Что до фарша из public/private секций, то тут уж личное дело каждого. Ну или как говорит Jupiter.
John Prick
774 / 707 / 129
Регистрация: 27.07.2012
Сообщений: 2,026
Завершенные тесты: 3
11.07.2014, 13:00     Рекомендация: сначало public, потом protected/private #23
Цитата Сообщение от Voivoid Посмотреть сообщение
В моей практике
Видимо, здесь мы и расходимся. Я тоже не буду говорить "за всю Одессу", но я, например, располагаю конструкторы абстрактных классов в protected секции. Бывают и другие случаи. Ну если не 50/50, то всё равно не "почти всегда".

Добавлено через 51 секунду
SatanaXIII, да, согласен.
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,250
Записей в блоге: 1
Завершенные тесты: 1
11.07.2014, 13:04     Рекомендация: сначало public, потом protected/private #24
В Java кстати очень часто вот так пишут
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Klass {
    private int field1;
    private int field2;
    private int field3;
    ...
    private int fieldN;
 
    public int getField1() {
        return field1;
    }
 
    public int getField2() {
        return field2;
    }
    // etc
}
как в книгах "С++ для начинающих" , но в Java это считается нормальным.
John Prick
774 / 707 / 129
Регистрация: 27.07.2012
Сообщений: 2,026
Завершенные тесты: 3
11.07.2014, 13:13     Рекомендация: сначало public, потом protected/private #25
Таже шляпа в C#.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
11.07.2014, 14:04     Рекомендация: сначало public, потом protected/private #26
Цитата Сообщение от Kastaneda Посмотреть сообщение
В Java кстати очень часто вот так пишут
Так что в Java, что в шарпах уровень доступа указывается для каждой сущности отдельно, а не задается группами как в плюсах.
Цитата Сообщение от John Prick Посмотреть сообщение
располагаю конструкторы абстрактных классов в protected секции
Если класс абстрактный (имеет чисто виртуальный метод), то его всё равно инстанцировать не получится.
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,250
Записей в блоге: 1
Завершенные тесты: 1
11.07.2014, 14:19     Рекомендация: сначало public, потом protected/private #27
Цитата Сообщение от Tulosba Посмотреть сообщение
Так что в Java, что в шарпах уровень доступа указывается для каждой сущности отдельно, а не задается группами как в плюсах.
все равно группировать по уровням доступа то можно. Всмысле сначала public, потом private.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
11.07.2014, 14:28     Рекомендация: сначало public, потом protected/private #28
Цитата Сообщение от Kastaneda Посмотреть сообщение
все равно группировать по уровням доступа то можно. Всмысле сначала public, потом private.
Можно конечно. Но если в плюсах достаточно перенести сущность в нужную группу, то в жабе/шарпах нужно поменять модификатор доступа. А так как в процессе разработки это может произойти несколько раз, то в итоге может получиться класс с любопытным чередованием модификаторов доступа
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2014, 15:38     Рекомендация: сначало public, потом protected/private
Еще ссылки по теме:
Public и Private C++
C++ Предложите примеры деклараций классов с protected и private членами
C++ Зачем нужен тип private, если есть protected?
Перевод class из public в private C++
C++ LNK2019: о private и public в классе

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Avazart
Эксперт С++
7122 / 5299 / 273
Регистрация: 10.12.2010
Сообщений: 23,454
Записей в блоге: 17
11.07.2014, 15:38     Рекомендация: сначало public, потом protected/private #29

Не по теме:

Цитата Сообщение от John Prick Посмотреть сообщение
Таже шляпа в C#.
Вот именно шляпа...
Не зря говорят что С++ более лаконичен.



Сортировать/группировать нужно, хотя бы для собственного удобства, но по каким параметрам это от ситуации, благо С++ в этом не ограничивает.
Yandex
Объявления
11.07.2014, 15:38     Рекомендация: сначало public, потом protected/private
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru