Форум программистов, компьютерный форум 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. Просмотров 1368. Ответов 28
Метки нет (Все метки)

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


Недавно столкнулся в примере программы. Сначало public, а потом private. Ужасно неудобно читать такую программу. Начинал с конца.
Так вот, действительно, ли является хорошим тоном так писать программы? Или это извращение какое-то?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Voivoid
674 / 277 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
10.07.2014, 16:50     Рекомендация: сначало public, потом protected/private #2
Цитата Сообщение от kylroma Посмотреть сообщение
Ужасно неудобно читать такую программу

Все правильно, сначала public секция, затем все остальное. В идеале вообще в private секцию не нужно смотреть. Инкапсюлация же
zss
Модератор
Эксперт С++
6322 / 5906 / 1913
Регистрация: 18.12.2011
Сообщений: 15,189
Завершенные тесты: 1
10.07.2014, 17:02     Рекомендация: сначало public, потом protected/private #3
И все же - это дело программиста.
На мой взгляд, если программу документируем, то сначала надо ознакомиться
с данными класса, а уж потом - что с ними можно делать.
Да и зачем тогда придумали class, осталась бы struct!
Voivoid
674 / 277 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
10.07.2014, 17:07     Рекомендация: сначало public, потом protected/private #4
Цитата Сообщение от zss Посмотреть сообщение
сначала надо ознакомиться
с данными класса
Зачем? Как тебе это информация поможет?
zss
Модератор
Эксперт С++
6322 / 5906 / 1913
Регистрация: 18.12.2011
Сообщений: 15,189
Завершенные тесты: 1
10.07.2014, 17:13     Рекомендация: сначало public, потом protected/private #5
Цитата Сообщение от Voivoid Посмотреть сообщение
Зачем?
Например, собираемся создать производный класс:
В первую очередь надо определить, какие данные уже есть и какие надо добавить.
Voivoid
674 / 277 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
10.07.2014, 17:17     Рекомендация: сначало public, потом protected/private #6
Цитата Сообщение от zss Посмотреть сообщение
В первую очередь надо определить, какие данные уже есть и какие надо добавить.
Какая разница, если они все равно в private секции. Ты до них сможешь добраться только через public или protected интерфейс. А значит опять смысла смотреть в private секцию нет
Renji
1878 / 1276 / 290
Регистрация: 05.06.2014
Сообщений: 3,642
10.07.2014, 17:42     Рекомендация: сначало public, потом protected/private #7
Зачем? Как тебе это информация поможет?
Скажем, выяснится что very_slow_method() на самом деле кеширует свои результаты и very slow лишь при первом вызове. Хотя, конечно, по хорошему это должно быть подписано где-то рядышком с объявлением метода.
Voivoid
674 / 277 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
10.07.2014, 17:58     Рекомендация: сначало public, потом protected/private #8
Цитата Сообщение от Renji Посмотреть сообщение
Скажем, выяснится что very_slow_method() на самом деле кеширует свои результаты
1) Такие вещи обычно пишут в документации к библиотеке
2) Преждевременная оптимизация - корень всех зол
3) Если все же нужна ультра-производительность, то конечно не грех и в реализацию посмотреть что там да как, но это, согласитесь уж, довольно редкий случай. Имеет смысл только после того, как профайлер показал там узкое место
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.07.2014, 19:06     Рекомендация: сначало public, потом protected/private #9
Цитата Сообщение от zss Посмотреть сообщение
И все же - это дело программиста.
это дело guidelines компании
Убежденный
Системный программист
Эксперт С++
15299 / 6931 / 1096
Регистрация: 02.05.2013
Сообщений: 11,341
Завершенные тесты: 1
11.07.2014, 08:21     Рекомендация: сначало public, потом protected/private #10
Цитата Сообщение от kylroma Посмотреть сообщение
На хабре есть статья "90 рекомендаций по стилю написания программ на C++". Интересует вот этот пункт:
44. Разделы класса public, protected и private должны быть отсортированы. Все разделы должны быть явно указаны.
Сперва должен идти раздел public, что избавит желающих ознакомиться с классом от чтения разделов protected/private.
Опять этот Хабр ! Чего, спрашивается, люди туда лезут как в источник абсолютной истины ?
По поводу сортировки членов класса по уровню доступа - ну бред же ! Быстрый пример:
если у меня некопируемый класс, в котором копирующий конструктор и оператор присваивания
помещены в private-секцию и не имеют реализаций, я помещу эту секцию повыше, чтобы она
бросалась в глаза и читающий сразу понял, что класс копировать нельзя.

И вообще, группировать члены класса лучше по каким-то концептуальным или логически
общим признакам, чем просто по спецификаторам доступа. Ну например: конструкторы-деструкторы,
затем public-интерфейс, дальше перегруженные операторы, потом какие-нибудь там internal-методы, и
потом private-данные. Если у меня какой-то член данных будет в паблике, я не буду его
совать на самый верх из-за того, что так типа правильно. Лучше я сделаю для него отдельную
public-секцию в правильном месте, скажем, сразу над private-данными, и помещу его туда.
Renji
1878 / 1276 / 290
Регистрация: 05.06.2014
Сообщений: 3,642
11.07.2014, 09:10     Рекомендация: сначало public, потом protected/private #11
Быстрый пример:
если у меня некопируемый класс, в котором копирующий конструктор и оператор присваивания
помещены в private-секцию и не имеют реализаций, я помещу эту секцию повыше, чтобы она
бросалась в глаза и читающий сразу понял, что класс копировать нельзя.
В C++11 не нужно уже.
C++
1
2
3
4
5
struct my_struct
{
    my_struct(const my_struct&)=delete;
    void operator=(const my_struct&)const=delete;
};
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
11.07.2014, 09:44     Рекомендация: сначало public, потом protected/private #12
Renji, всё же Убежденный (если я правильно понял) сделал акцент на расположении к началу объявления класса, а не на том, в какой конкретно секции это размещать. Потому что в случае с =delete их всё равно есть смысл разместить повыше (опять-таки опираясь на логику Убежденный, с которой я, в принципе, согласен).
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,251
Записей в блоге: 1
Завершенные тесты: 1
11.07.2014, 09:53     Рекомендация: сначало public, потом protected/private #13
Еще в линуксовых исходниках часто встречаю такое
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
public:
    // что-нибудь
protected:
    // что-нибудь
public:
    // что-нибудь
private:
    // что-нибудь
protected:
    // что-нибудь
public:
    // что-нибудь
// и т.д.
вот это реально жесть, глаза вместе с мозгом ломаются)
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
11.07.2014, 09:57     Рекомендация: сначало public, потом protected/private #14
Цитата Сообщение от Kastaneda Посмотреть сообщение
Еще в линуксовых исходниках
Я что-то сразу подумал про ядро, но оно ж на С.
А подобное расположение тоже встречал, только вот ассоциировать это именно с линуксом, по-моему, немного странно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2014, 10:02     Рекомендация: сначало public, потом protected/private
Еще ссылки по теме:
Public и Private C++
C++ Предложите примеры деклараций классов с protected и private членами
C++ Зачем нужен тип private, если есть protected?
Перевод class из public в private C++
C++ LNK2019: о private и public в классе

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт CЭксперт С++
13063 / 7326 / 817
Регистрация: 27.09.2012
Сообщений: 18,085
Записей в блоге: 3
Завершенные тесты: 1
11.07.2014, 10:02     Рекомендация: сначало public, потом protected/private #15
Цитата Сообщение от Kastaneda Посмотреть сообщение
Еще в линуксовых исходниках часто встречаю такое
наткнулся на такое:
C++
1
2
3
4
5
6
7
8
class EnumSet {
public:
   //...
private:
    //...
private:
    //...
};
Yandex
Объявления
11.07.2014, 10:02     Рекомендация: сначало public, потом protected/private
Ответ Создать тему
Опции темы

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