LINUX.ORG.RU

[c++] Префиксы у классов, переменных и т.п.

 


0

0

Иногда вижу префиксы m у перменных (mSomeVar) и I (большая i) у классов (ISomeClass). Насколько я понимаю, второе говорит о том, что класс является интерфейсом. А что есть m?

Какие ещё бывают префиксы?

Если у меня проект графического редактора на Qt, у которого есть поле, область инструментов, линейки масштаба, палитра и т.п., следует ли давать всем этим виджетам какой-то префикс?

Спасибо.

★★★★★
Ответ на: комментарий от Obey-Kun

> а как правильно — mSomeStuff или m_someStuff?

Выбери себе вариант по вкусу и придерживайся его в Своем коде, а вообще надо придерживаться тех соглашений по оформлению кода, которые приняты в проекте.

anonymous
()
Ответ на: комментарий от jtootf

Вероятно он имел ввиду порядок вызова конструкторов переменных-членов (и базовых классов) при создании объекта

yoghurt ★★★★★
()
Ответ на: комментарий от shty

Если бы так: «считающих, что квалификатор доступа private является необходимым и достаточным условием инкапсуляции», то согласился. А иначе, как уже заметили, дешевые понты!

anonymous
()
Ответ на: комментарий от jtootf

инкапсуляция - это разделение интерфейса и реализации.

так

во-первых, добиться высокой степени их независимости можно и без приватных полей (в ряде ОО-языков их вообще нет);

тээк... дорожка свернула в поле

во-вторых, просрать все полимеры можно и с ними (от большой любви к геттерам/сеттерам, например)

ну можно, и что? :) буратины и не то могут наделать

и всё, это все аргументы?

shty ★★★★★
()
Ответ на: комментарий от jtootf

> при чём тут дочерние конструкторы

Базовые. Очевидный же фикс.

LamerOk ★★★★★
()
Ответ на: комментарий от jtootf

предлагаю превентивно кастрировать всех программистов, считающих, что квалификатор доступа private обеспечивает инкапсуляцию

ещё раз, к чему это было?

shty ★★★★★
()
Ответ на: комментарий от anonymous

Если бы так: «считающих, что квалификатор доступа private является необходимым и достаточным условием инкапсуляции», то согласился.

дык же :) причём, заметьте, я про private ничего не говорил - речь шла о том что переменные не светятся наружу, а уж сделать это можно по разному

shty ★★★★★
()
Ответ на: комментарий от shty

к тому, что я предлагаю кастрировать всех подобных программистов. во избежание. что ещё тебе объяснить?

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

к тому, что я предлагаю кастрировать всех подобных программистов. во избежание. что ещё тебе объяснить?

обоснуй :) что тут непонятного?

shty ★★★★★
()
Ответ на: комментарий от shty

>речь шла о том что переменные не светятся наружу, а уж сделать это можно по разному

А можно и вообще не делать, при этом интерфейс и реализация всё равно могут быть разделены

yoghurt ★★★★★
()
Ответ на: комментарий от yoghurt

>речь шла о том что переменные не светятся наружу, а уж сделать это можно по разному

А можно и вообще не делать, при этом интерфейс и реализация всё равно могут быть разделены

да, можно, не вижу в этом никакого противоречия, или Вы видели, может быть, чтобы я где-то обратное утверждал? :)

shty ★★★★★
()
Ответ на: комментарий от shty

> те же шары вид в профиль, только менее гибко...

зато можно сразу сказать, что функция/класс принадлежат определенной библиотеке, вобщем кому как удобней

lester ★★★★
()
Ответ на: комментарий от shty

> от member, то есть данный префикс намекае шо переменная - член класса

намекаешь, что поле - не член класса, да? ;)

lester ★★★★
()
Ответ на: комментарий от lester

> от member, то есть данный префикс намекае шо переменная - член класса

намекаешь, что поле - не член класса, да? ;)

Отнюдь, просто в классической литературе чаще употребляется член класса нежели поле :) тащемта и m (с чего всё и началось) которая от member на то намекае

shty ★★★★★
()
Ответ на: комментарий от lester

> те же шары вид в профиль, только менее гибко...

зато можно сразу сказать, что функция/класс принадлежат определенной библиотеке,

эммм, да в случаях с namespace тоже, если не использовать, во многих случаях вредную, директиву using namespace

вобщем кому как удобней

дык

shty ★★★★★
()
Ответ на: комментарий от shty

в классической литературе

в классической литературе на какую тему?

чаще употребляется член класса нежели поле

в Java, C# - поле и метод; в C++ - переменная-член и функция-член. сошлюсь, пожалуй, на Steve Dewhurst: C++ Gotchas #9 (Using Bad Language)

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

в классической литературе

в классической литературе на какую тему?

ты Пушкина не читал штоле? так ты не наш??? :)

в Java, C# - поле и метод;

настоящие Ъ не то что по ссылкам не ходят они и темы не читают, да?

C++ - переменная-член и функция-член

о чем я и сказал

shty ★★★★★
()
Ответ на: комментарий от jtootf

о чем я и сказал

нет

сбуратинил так сбуратинил :) ты действительно не понимаешь что тут написано? или у тебя проблемы с логикой?

P.S. иди перечитай внимательно ищо раз то сообщение к которому аппелируешь:)

shty ★★★★★
()
Ответ на: комментарий от shty

я не горю желанием спорить с людьми, у которых одна тривиальная мысль растекается на десять невнятных комментариев. мне лень

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

я не горю желанием спорить с людьми, у которых одна тривиальная мысль растекается на десять невнятных комментариев. мне лень

если не горишь желанием то и нечего тогда комментарии ставить, а то вякнул и в кусты, обосновать свою позицию не можешь

да, такое поведение с твоей стороны является очень жырным

shty ★★★★★
()
Ответ на: комментарий от yoghurt

:)

во-первых эта басня не в кассу

а во-вторых ну и что что лает что ж теперь по улицам не ходить ?

shty ★★★★★
()
Ответ на: комментарий от JackyTreehorn

Немного отвлекусь.

переменные — some_var функции — someFunct() классы — SomeClass

Так?

У меня раньше классы и функции были CamelCase, а переменные camelCase. Теперь, наверное, перейду на твой подход. При том что в Qt аналогично.

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

Правда, я не уверен, как в Qt называют переменные в классах, но не суть. camelCase для функций и CamelCase для классов они точно используют: http://qt.gitorious.org/qt/qt/blobs/master/src/gui/graphicsview/qgraphicsitem.h

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

ты не парься, возьми к примеру вот и следуй им, корректируй как тебе нравится, главное чтобы code style guidelines были под рукой

shty ★★★★★
()
Ответ на: комментарий от shty

предпочитаю Qt Coding Style. Только вот я сейчас его смотрю и не понимаю, что означают конструкции вроде

public:
    void setMinimum(int minimum);
    int minimum() const;

Как читать третью строку?

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

и ещё, насколько подробно следует комментировать код?

        /* Функции, относящиеся в автоматической прокрутке */
        void startAutoScroll();
        void stopAutoScroll();
        bool isAutoScrolling() const;
        bool shouldAutoScroll(const QPoint &pos) const;

Нормально, или описывать каждую? Названия-то говорящие.

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

> Названия-то говорящие.

void startAutoScroll();

void stopAutoScroll();



и что эти методы делают? выполняют реальный скролл, если да - то куда? или это просто выставляется флаг? если да - то почему не написать просто setAutoScroll?

/* Функции, относящиеся в автоматической прокрутке */


абсолютно бесполезный комментарий

lester ★★★★
()
Ответ на: комментарий от lester

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

lester ★★★★
()
Ответ на: комментарий от lester

Автоскролл — это скролл, который скроллит по направлению от начала скролла к точке назначения. startAutoScroll() его стартует, stopAutoScroll() останавливает.

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

где указывается точка назначения? в комментарии к startAutoScroll должно быть описано это

lester ★★★★
()
Ответ на: комментарий от Obey-Kun

предпочитаю Qt Coding Style.

ну не суть, главное что берёшь за основу некий вариант и допиливаешь его под себя

Только вот я сейчас его смотрю и не понимаю, что означают конструкции вроде

public: 
    void setMinimum(int minimum); 
    int minimum() const;

Как читать третью строку?

в третьей строчке модификатор const означает что вызов данной функции не приведёт к изменению членов класса (данных)

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

int getSomeIntValue() const;

кстати, для приобретения базовых знаний по C++ рекомендую книгу «C++ для профессионалов» (Professional C++), там такие моменты достаточно подробно расписаны

shty ★★★★★
()
Ответ на: комментарий от Obey-Kun

Нормально, или описывать каждую? Названия-то говорящие.

описывать и ещё раз описывать... это они сейчас тебе понятны, а через полгода, а через год?

вообще рекомендую открыть для себя doxygen, посмотри стандарт описания функций и нормально задокументированные проекты (сам Qt вроде неплохо им обработан, но сейчас точно не помню), оттуда и пляши

shty ★★★★★
()
Ответ на: комментарий от lester

>> /* Функции, относящиеся в автоматической прокрутке */

абсолютно бесполезный комментарий

особенно учитывая, что он на РЯ

korvin_ ★★★★★
()
Ответ на: комментарий от Obey-Kun

который скроллит по направлению от начала скролла к точке назначения. startAutoScroll() его стартует, stopAutoScroll() останавливает.

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

2) не определено что такое начало скролла

3) не определена точка назначения

4) не описан порядок смены состояний

5) не описаны работа автоскроллера в случае если состояние таргета изменилось

кстати, хороший принцип - давать определение термину как только он встретился, так что встретилась точка начала - опиши что это такое, дай определение

главное, пиши каменты подробно, даже если они тебе кажутся примитивными и очевидными (уверяю, что даже через 2-3 месяца они тебе не будут казаться такими очевидными) и, в первую очередь, описывай логику работы, а не конструкции языка

shty ★★★★★
()
Ответ на: комментарий от korvin_

> особенно учитывая, что он на РЯ

проект только для русских. как только кому-нибудь англоговорящему потребуется с ним работать, комментарии будут переведены.

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

> особенно учитывая, что он на РЯ

проект только для русских. как только кому-нибудь англоговорящему потребуется с ним работать, комментарии будут переведены.

это миф :) представь твой проект разросся и, ВНЕЗАПНО, стал интересен буржуйскому заказчику... на 2 месяца (оптимизм) засядешь переводчиком работать, да?

сразу лучше привыкай писать на бургунди (бургуйском языке) - будет профит, честное пионерское :) это если со стороны заказчика нет требования о каментах на русском (а при аутсорсе бывает и такое)

shty ★★★★★
()
Ответ на: комментарий от shty

> на 2 месяца (оптимизм) засядешь переводчиком работать, да?

2 дня работы максимум (в случае этого проекта). вот. и инглиш у меня кривой, лучше будет поручить это кому-нибудь.

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

> на 2 месяца (оптимизм) засядешь переводчиком работать, да?

2 дня работы максимум (в случае этого проекта). вот.

ну так и тренируйся на кошках пока есть возможность :)

и инглиш у меня кривой, лучше будет поручить это кому-нибудь.

в бою кого-нибудь не будет, а будешь только ты :) а потом тебя переводчики истерзают, это тебе не мануалы переводить :) и да инглиш прямее не станет, если устраняться от проблемы :) смотри как кутишники пишут и пиши, помни что от тебя никто не ждёт что окажешься Байроном, главное донесённая мысль

shty ★★★★★
()
Ответ на: комментарий от shty

> ну так и тренируйся на кошках пока есть возможность :)

ладно, обещаю, доведу проект до презентабельного вида (т.е. до того, когда можно будет заливать в vcs) — переведу :). Просто пока не хотелось бы тратить мозг на это.

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от shty

А структуры внутри класса стоит с префиксом m давать?

И правильно ли я понимаю, что членам c-style структуры (у которой методов нет) не нужны префиксы m?

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

По первому пункту. Наверное, нет. Как минимум, выглядит глупо.

        struct m_Anchor {
            /**
            * Точка, к которой осуществляется привязка курсора
            */
            QPoint point;
            
            /**
            * Возможна ли привязка
            */
            bool is_possible;
        };

        m_Anchor m_anchor;
Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

Я тебе выше давал ссылки на книги Майерса. Это абсолютный маст рид. Найдешь их у анатоликса, а также и другие нужные.

JackyTreehorn
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.