2015-04-18 4 views
17

Термин «метод» часто используется для обсуждения кода на C++. Имеет ли автономный термин четко определенный смысл в C++ или он неоднозначен? Допустимо ли использовать этот термин сам по себе или он должен быть квалифицирован (например, «метод класса» или «виртуальный метод»), или его вообще следует избегать?Является ли термин «метод» определенным стандартом C++?

+5

Спецификация использует термины типа 'function',' member function', 'virtual function', not method. – Nawaz

ответ

5

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

Однако нормативные появлений слова "метод" в стандарте 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.

Термин не ясно никогда не ссылаясь на «функции члена».

+0

. Это, по сути, копирует часть моего ответа: * «простой поиск в Google показывает больше случаев этого термина». *. – cybermonkey

+4

@cybermonkey: Это не «ответ», бл. И это не имеет никакого сходства с этой фразой. Вы уверены, что прокомментировали правильный ответ? –

14

Термин метод не определен в стандарте C++. Терминология использует функция-член вместо.

Бьярне Страуструп однако определяет метод термин в своей собственной glossary как виртуальной функции члена. Таким образом, это свидетельствует о том, что этот термин является приемлемым.

+0

Хороший ответ. Но функция * virtual * member не совпадает с функцией-членом, и, что более важно, она не является значением по умолчанию для функции-члена (которая по умолчанию не является виртуальной). –

+0

Это делает его более двусмысленным. Хотя, честно говоря, когда я вижу «метод», используемый в нестандартной терминологии, я всегда думаю о «функции-члене». – vsoftco

+1

@GiulioFranco Согласен. Обычным дефинированием для OOp является вызов атрибутов данных и методов поведения. Я не уверен, почему Бьярне Страуструп считает это виртуальным. Возможно, он ссылается на определение метода, которое подразумевает полиморфизм (т. Е. Поведение, связанное с объектом, а не с его классом). – Christophe

1

C++ standard не упоминает термин method. Следует отметить, что official C++ FAQделает, используя этот термин, но для описания функции virtual; a simple Google search показывает больше случаев этого термина.

Я никогда не видел термин method в среде IDE (Visual Studio), но я видел термин member function. По-моему, method - термин «один размер подходит всем».

1

Термин метод исторически использовался как синоним процедуры объекта. Учитывая, что объект имеет как данные, так и поведение, именно такое поведение называется методом. Трассировка назад, я мог бы найти ссылку на использование метода термина когда они относятся к версии MIT Алголе, AED-0

Quoting wikipedia

MIT алгол версия, AED-0, связанные структуры данных («plexes», в этом диалекте ) непосредственно с процедурами, предваряющими то, что позднее было названо «сообщения», «методы» и «функции-члены».

Метод лет был неотъемлемой частью объектно-ориентированного анализа и проектирования и объектно-ориентированного программирования. Теперь C++ развился как процедурный язык, где он расширил C процедурным языком, чтобы иметь объектно-ориентированные возможности. C имел концепцию структуры, а элементы данных назывались членами. См. Methods in C++. Чтобы не нарушить родословную, C++ продолжал называть элементы структурированного и нового класса жанра в качестве членов.

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

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

  • элемента данных
  • функции члена
  • виртуальных функциями
+1

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

+0

@ LightningRacisinObrit: Пожалуйста, уточните, какая часть нечеткая? Я должен был надлежащим образом процитироваться по мере необходимости. Downvoter: Не могли бы вы помочь мне понять, какая часть не является полезной или неправильной? – Abhijit

+1

Что заставляет вас предположить, что downvotes являются «причудливыми» или «без какой-либо соответствующей причины»? –

1

Вот мой анализ относительно слова метода.

Я проверил официальную документацию (стандарты, спецификации и т. Д.) На нескольких языках программирования.

http://componentsprogramming.com/using-the-right-terms-method/

Адекватная таксономия (не зависит от каких-либо языков программирования) будет опубликована в следующей статье.

Что касается C++, то правильная терминология: член/не членская функция. Некоторые люди используют функции члена/бесплатно.

Смежные вопросы