LINUX.ORG.RU

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

 


0

0

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

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

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

Спасибо.

★★★★★

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

да, выглядит странновато и m в имени структуры точно не нужна

я бы эту структуру определил так

typedef struct {
    QPoint point;
    bool bindable;
} anchor_t, *anchor_ptr_t;

обрати внимание на имя булевской переменной, в данном случае bind явно указывает на связывание, в то время как possible - это какая то абстрактная возможность

иногда имена структур пишут большими буквами, типа так

typedef struct {
    QPoint point;
    bool bindable;
} ANCHOR, *PANCHOR;

но это уже как кому нравится :)

если структуре надо ссылаться на себя то её можно определить например так

typedef struct __anchor {
    QPoint point;
    bool bindable;
    __anchor *next_anchor;
} anchor_t, *anchor_ptr_t;
shty ★★★★★
()
Ответ на: комментарий от shty

если тебе не нужен указатель на структуру можешь писать например так

typedef struct { 
    QPoint point; 
    bool bindable; 
} anchor_t;

и да, в С++ структура - это класс без закрытых членов, так что никто тебе не мешает определить в структуре конструктор (или деструктор), например так

typedef struct __anchor { 
    QPoint point; 
    bool bindable; 
    /* ctor */
    __anchor() {
    // OMG, it works! :)
    }
} anchor_t, *anchor_ptr_t;

вот как то так :)

причём в структуре можно определить и функции

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

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

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

Тебе не кажется что уже давно пора прочитать хотя бы одну книжку по плюсам??? Иначе в мире на одного говонокодера больше станет.

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

> По теме: я использую постфикс.

Ужас!!! Откуда столько извращенцев!!!

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

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

Не слушай уже советов этих школьников и студентов! Ничему хорошему они тебя не научат! Им самим еще учиться и учиться!

Лучше посмотри заголовочные файлы стандартной либы c++ из gcc, еще пары-другой либ (например, горячо любимой тобой Qt:)) и все сразу станет понятно.

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

> ладно, обещаю, доведу проект до презентабельного вида (т.е. до того, когда можно будет заливать в vcs)

Нам ссылочку не забудь кинуть, а мы оценим ;-)

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

> еще пары-другой либ (например, горячо любимой тобой Qt:)) и все сразу станет понятно.

анонимус показал то, что никогда не писал ничего серьезного :) у Qt и подобных библиотек есть обширная документация отдельно от кода, т.к. это именно «либы», которые люди изучают не по коду, а по примерам и той же документации, а к коду программ такая документация встречается гораздо реже - потому и комментарии там нужны обширные и полные

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

опять же - если пользоваться doxygen, то будет двойной профит, вот пример из библиотеки juce:

//==============================================================================
/**
    Holds a list of primitive objects, such as ints, doubles, or pointers.

    Examples of arrays are: Array<int> or Array<MyClass*>

    Note that when holding pointers to objects, the array doesn't take any ownership
    of the objects - for doing this, see the OwnedArray class or the ReferenceCountedArray class.

    If you're using a class or struct as the element type, it must be
    capable of being copied or moved with a straightforward memcpy, rather than
    needing construction and destruction code.

    For holding lists of strings, use the specialised class StringArray.

    To make all the array's methods thread-safe, pass in "CriticalSection" as the templated
    TypeOfCriticalSectionToUse parameter, instead of the default DummyCriticalSection.

    @see OwnedArray, ReferenceCountedArray, StringArray, CriticalSection
*/
template <class ElementType, class TypeOfCriticalSectionToUse = DummyCriticalSection>
class Array   : private ArrayAllocationBase <ElementType>
{
public:
    //==============================================================================
    /** Creates an empty array.

        @param granularity  this is the size of increment by which the internal storage
        used by the array will grow. Only change it from the default if you know the
        array is going to be very big and needs to be able to grow efficiently.

        @see ArrayAllocationBase
    */
    Array (const int granularity = juceDefaultArrayGranularity) throw()
       : ArrayAllocationBase <ElementType> (granularity),
         numUsed (0)
    {
    }
lester ★★★★
()
Ответ на: комментарий от lester

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

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

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

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

Как-то один дядька из команды разработчиков ядра Windows рассказывал, что когда они открывали исходники ядра для студентов, то приняли решение удалить почти все комментарии т.к. они уже давно не соответствовали коду :)

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

> Если бы ты участвовал в долгоиграющем проекте

ололо :)

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


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

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

> Как-то один дядька из команды разработчиков ядра Windows рассказывал, что когда они открывали исходники ядра для студентов, то приняли решение удалить почти все комментарии т.к. они уже давно не соответствовали коду :)

«К удивлению специалистов по безопасности, компания Microsoft отказалась патчить недавно выявленную уязвимость TCP/IP в Windows XP и Windows 2000. Один из ведущих менеджеров по безопасности программ Microsoft Эдриан Стоун сказал, что этот фрагмент исходников слишком стар, имеет возраст от 12 до 15 лет, и разобраться в коде на этом уровне «просто нереально». Данная фраза была сказана в прямом эфире ежемесячного вебкаста по безопасности, отвечая на вопросы слушателей.»

ничего удивительного

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