Термин «метод» часто используется для обсуждения кода на C++. Имеет ли автономный термин четко определенный смысл в C++ или он неоднозначен? Допустимо ли использовать этот термин сам по себе или он должен быть квалифицирован (например, «метод класса» или «виртуальный метод»), или его вообще следует избегать?Является ли термин «метод» определенным стандартом C++?
ответ
Я бы полностью избегал этого термина, так как ясно, что вы подразумеваете под «функцией-членом», но не «метод», - что вы задали этот вопрос достаточно.
Однако нормативные появлений слова "метод" в стандарте C++ 14 являются
В списке содержимого:
17,5 Метод описания (справочном)
Это повторяется в заголовке этого раздела.
[basic.compound]:
Эти методы построения типов может быть применен рекурсивно;
[cpp.include]
Метод, с помощью которого последовательность предобработки лексем между
<
и>
предварительной обработки маркера пару или пару символов"
совмещен в один маркер предварительной обработки заголовка заголовка определяется реализацией.[библиотека.Вообще]
В следующих подразделах описаны определения (17.3), метод описания (17,5), [..]
В таблице 32,
FLT_EVAL_METHOD
упоминается.На стадии 2
num_get
«ыdo_get
:для арифметических типов,
punct.thousands_sep()
символы вставляются в последовательности, как определено значение, возвращаемоеpunct.do_grouping()
использованием метод, описанный в 22.4. 3.1.2[forwardlist.modifier]:
В противном случае, вставляет
sz - distance(begin(), end())
элементов в конце список таким образом, что каждый новый элемент,e
, инициализируются метод эквивалентен вызовуallocator_traits<allocator_type>::construct(get_allocator(), std::addressof(e), c)
.[filebuf.virtuals]:
ведет себя в соответствии с описанием
basic_streambuf<charT,traits>::uflow()
, по специальности , что последовательность символов считывается из входного с тот же метод, как используетсяunderflow
.
Термин не ясно никогда не ссылаясь на «функции члена».
. Это, по сути, копирует часть моего ответа: * «простой поиск в Google показывает больше случаев этого термина». *. – cybermonkey
@cybermonkey: Это не «ответ», бл. И это не имеет никакого сходства с этой фразой. Вы уверены, что прокомментировали правильный ответ? –
Термин метод не определен в стандарте C++. Терминология использует функция-член вместо.
Бьярне Страуструп однако определяет метод термин в своей собственной glossary как виртуальной функции члена. Таким образом, это свидетельствует о том, что этот термин является приемлемым.
Хороший ответ. Но функция * virtual * member не совпадает с функцией-членом, и, что более важно, она не является значением по умолчанию для функции-члена (которая по умолчанию не является виртуальной). –
Это делает его более двусмысленным. Хотя, честно говоря, когда я вижу «метод», используемый в нестандартной терминологии, я всегда думаю о «функции-члене». – vsoftco
@GiulioFranco Согласен. Обычным дефинированием для OOp является вызов атрибутов данных и методов поведения. Я не уверен, почему Бьярне Страуструп считает это виртуальным. Возможно, он ссылается на определение метода, которое подразумевает полиморфизм (т. Е. Поведение, связанное с объектом, а не с его классом). – Christophe
C++ standard не упоминает термин method
. Следует отметить, что official C++ FAQделает, используя этот термин, но для описания функции virtual
; a simple Google search показывает больше случаев этого термина.
Я никогда не видел термин method
в среде IDE (Visual Studio), но я видел термин member function
. По-моему, method
- термин «один размер подходит всем».
Термин метод исторически использовался как синоним процедуры объекта. Учитывая, что объект имеет как данные, так и поведение, именно такое поведение называется методом. Трассировка назад, я мог бы найти ссылку на использование метода термина когда они относятся к версии MIT Алголе, AED-0
MIT алгол версия, AED-0, связанные структуры данных («plexes», в этом диалекте ) непосредственно с процедурами, предваряющими то, что позднее было названо «сообщения», «методы» и «функции-члены».
Метод лет был неотъемлемой частью объектно-ориентированного анализа и проектирования и объектно-ориентированного программирования. Теперь C++ развился как процедурный язык, где он расширил C процедурным языком, чтобы иметь объектно-ориентированные возможности. C имел концепцию структуры, а элементы данных назывались членами. См. Methods in C++. Чтобы не нарушить родословную, C++ продолжал называть элементы структурированного и нового класса жанра в качестве членов.
Теперь, чтобы отличать данные и функции, вместо введения новой терминологии, она расширила эту терминологию, чтобы вызвать элементы данных и функции-члены. Функции-члены, поддерживающие динамическое связывание, назывались виртуальными функциями.
Так что, строго говоря, официальные ссылки воздерживаются от использования терминологических методов при обращении к функциям-членам. Терминология наиболее распространена среди людей с более объектно-ориентированным фоном. Так что, если вы хотите оставаться однозначными, то лучше всего использовать терминологию
- элемента данных
- функции члена
- виртуальных функциями
Пожалуйста, используйте форматирование цитаты, чтобы понять, насколько это в ваших собственных словах и сколько из них написано кем-то другим. –
@ LightningRacisinObrit: Пожалуйста, уточните, какая часть нечеткая? Я должен был надлежащим образом процитироваться по мере необходимости. Downvoter: Не могли бы вы помочь мне понять, какая часть не является полезной или неправильной? – Abhijit
Что заставляет вас предположить, что downvotes являются «причудливыми» или «без какой-либо соответствующей причины»? –
Вот мой анализ относительно слова метода.
Я проверил официальную документацию (стандарты, спецификации и т. Д.) На нескольких языках программирования.
http://componentsprogramming.com/using-the-right-terms-method/
Адекватная таксономия (не зависит от каких-либо языков программирования) будет опубликована в следующей статье.
Что касается C++, то правильная терминология: член/не членская функция. Некоторые люди используют функции члена/бесплатно.
- 1. Является ли размер std :: array определенным стандартом
- 2. Является ли size_t только стандартом C++ или стандартом C?
- 3. Является ли u_char стандартом?
- 4. Является ли постоянная справка стандартом C?
- 5. Является ли C++ 21 следующим стандартом?
- 6. Является ли syslog стандартом ведения журнала или стандартом протокола?
- 7. Является ли токен $ id стандартом JSON?
- 8. Является ли порядок инициализации гарантированным стандартом?
- 9. Является пустой строкой, определенной стандартом C++?
- 10. Является ли динамическая загрузка строго совместимой со стандартом C++?
- 11. Является ли Xcode 6.1.1 стандартом ISO для C++?
- 12. Является ли стандартом создание нескольких приложений одновременно?
- 13. Является ли обновление со стандартным стандартом присоединения
- 14. Является ли WADL стандартом для приложений REST?
- 15. Является ли * p ++ + = 2 четко определенным?
- 16. Является ли следующий код хорошо определенным в соответствии со стандартом C99?
- 17. Являются ли переоценки запрещенными стандартом C?
- 18. Является ли термин «дескриптор» зарезервированным в PHP?
- 19. Является ли стандартом доступ к статическому методу из других классов?
- 20. Является ли переполнение intN_t определенным?
- 21. Является ли этот взлом действительным в соответствии со стандартом?
- 22. Новый метод новой строки. Является ли это спецификой компилятора или новым языковым стандартом?
- 23. Python: проверка, является ли значение определенным объектом
- 24. Является ли явный вызов конструкторов и деструкторов безопасным, в соответствии со стандартом C++?
- 25. Является ли такой стиль назначения хорошо определенным?
- 26. C# Является ли этот метод потоком безопасным?
- 27. Является ли метод цепочки медленным C++?
- 28. Получение отрицательного NaN на g ++ 4.4.3, является ли это стандартом?
- 29. Является ли безопасность объекта как диктатора действительно действительно гарантированным стандартом?
- 30. Является ли SP инициированным запросом без AuthnRequest отраслевым стандартом?
Спецификация использует термины типа 'function',' member function', 'virtual function', not method. – Nawaz