Имена классов, которые запускаются с C

MFC имеет все имена классов, которые запускаются с C. Например, CFile и CGdiObject. Кто-либо видел, что это использовало в другом месте? Существует ли официальное руководство соглашения о присвоении имен от Microsoft, которая рекомендует этот стиль? Идея происходила с MFC или была им некоторый другой проект?

10
задан Dylan Corriveau 12 May 2015 в 13:36
поделиться

9 ответов

Нечто похожее используется в Symbian C ++, где принято следующее соглашение:

T-классы являются «значениями», например TChar, TInt32, TDes

Классы R - это дескрипторы ресурсов ядра (или других), например RFile, RSocket

M классы - это миксины, которые включают интерфейсы (сконструированные как миксины без реализации функций). Рекомендация заключается в том, что множественное наследование должно включать не более 1 класса, отличного от M.

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

HBufC существует в первую очередь для создания запутанных сообщений на форумах Symbian, и наличие собственного префикса - это только начало. Буква H означает «да?» Или, возможно, «Ха, ха! У вас нет STL!» ; -)

Это похоже на венгерскую нотацию приложений, а не на системную венгерскую нотацию. Префикс сообщает вам кое-что о классе, которое вы могли бы найти в документации, но о котором вы бы не узнали иначе. Весь смысл присвоения имен чему-либо в программировании заключается в предоставлении таких подсказок и напоминаний , иначе вы бы просто назвали свои классы «Class001», «Class002» и т. Д.

Systems Hungarian просто сообщает вам тип переменной, которая в IMO не вызывает особого восторга, особенно на таком языке, как C ++, где типы, как правило, либо постоянно повторяются, либо полностью скрываются параметрами шаблона. Его аналогом при именовании типов является практика Java, когда все интерфейсы именуются I.Опять же, меня это не очень волнует (как и стандартные библиотеки Java), но если вы собираетесь определять интерфейс для каждого класса в дополнение к интерфейсам, которые фактически используются для полиморфизма в не-тестовых ситуации, то вам нужно каким-то образом различать их.

15
ответ дан 3 December 2019 в 13:13
поделиться

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

Например, btnSubmit подходит для описания кнопки с именем Submit (которая будет иметь сопутствующую lblSubmit для метки рядом с кнопкой)

Но такие вещи, как CMyClass для Class и uiCount для беззнакового целого числа с именем count, не помогают программистам и только приводят к лишней пустой опечатке.

17
ответ дан 3 December 2019 в 13:13
поделиться

Это был старый стиль кодирования C ++, и MFC, вероятно, был одним из последних, кто его использовал.

Обычно это было просто соглашение C ++ (и, возможно, нескольких других языков), и, следовательно, он начал терять популярность, поскольку языки стали более совместимыми через COM, а затем .NET.

Вы все еще довольно часто видите его двоюродный брат, префикс «I» для интерфейсов. Мне всегда было интересно, что «я» выжил, когда умер «C», но это, вероятно, произошло из-за того, что интерфейсы так активно использовались для взаимодействия с COM.

13
ответ дан 3 December 2019 в 13:13
поделиться

Я помню, что компиляторы Borland поставлялись с библиотеками, в которых имена классов начинались с 'T'. Вероятно, для "типа" :)

6
ответ дан 3 December 2019 в 13:13
поделиться

Много лет назад соглашение об именах имеет решающее значение для определения класса, типа и даже для группировки класса. Не забывайте, что тогда не было пространства имен и доступного / ограниченного intellisense. C - это форма венгерской записи, но, безусловно, популярная благодаря MFC. Borland и Delphi использовали T - как префикс для типа

5
ответ дан 3 December 2019 в 13:13
поделиться

В то время как MFC и многие программы, написанные для Windows, использовали соглашение "C" для классов, вы, как правило, не найдете его в программах, написанных для UNIX-платформ. Я думаю, что эта привычка очень сильно поощрялась Visual C++. Я помню, что Visual C++ 6.0 добавлял префикс "C" к любым классам, которые создавались с помощью мастера классов.

5
ответ дан 3 December 2019 в 13:13
поделиться

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

Интересно, что это, видимо, вызывает споры не только за пределами MS, но и внутри.

4
ответ дан 3 December 2019 в 13:13
поделиться

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

под многими я подразумевал C для классов, p для указателей, m_ для членов, s_ для статических членов, n для целого числа ... не многие документы

0
ответ дан 3 December 2019 в 13:13
поделиться

API-интерфейс Google Maps имеет JavaScript, а не PHP. Чтобы достичь желаемого, переместите 2 почтовые коды в координаты LatLang и используйте функцию distureFrom , чтобы найти расстояние между ними.

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

-121--2314814-

Посмотрите на исходный код для декораторов django.contrib.auth . Они делают именно то, что вы хотите, но для встроенной системы аутентификации Django ( см. документацию ). Это не должно быть трудно сделать что-то подобное для вашей системы аутентификации.

BTW, почему бы вам не использовать встроенную проверку подлинности? Вы можете использовать его с настраиваемыми бэкендами проверки подлинности...

-121--3171115-

Смотрите здесь: http://www.jelovic.com/articles/stupid_naming.htm для получения подробной статьи по этому вопросу.

2
ответ дан 3 December 2019 в 13:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: