объектно-ориентированное программирование - PullRequest
0 голосов
/ 02 апреля 2010

Возможно ли вложение функций в объектно-ориентированные языки, такие как C #, Java, C ++ и т. Д. Если да, может ли кто-нибудь привести пример?

Ответы [ 4 ]

3 голосов
/ 02 апреля 2010

Наличие вложенной функции не имеет отношения к объектно-ориентированному.


  • C # не имеет вложенных функций, но вы можете использовать лямбда-выражения (см. Почему C # не имеет лексически-вложенных функций? ). Как и все другие языки программирования, которые поддерживают анонимные функции (включая C ++ 0x).
  • Вы можете создать локальный класс и перегрузить оператор вызова для имитации вложенной функции (см. Возможно ли в C или C ++ создать функцию внутри другой? ).
  • Между тем, многие не объектно-ориентированные языки, такие как (оригинальный) Pascal, изначально поддерживают вложенные функции, а GCC поддерживает их в C как расширение.
0 голосов
/ 23 марта 2015

Java - еще один ОО-язык. Он не поддерживает вложенные методы, но поддерживает вложенный класс (это может помочь в обходе): http://docs.oracle.com/javase/tutorial/java/javaOO/whentouse.html

0 голосов
/ 02 апреля 2010

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

В C ++ до C ++ 1x анонимные функции (известные как лямбды) пока недоступны. Однако вы все равно можете объявить функцию внутри функции, потому что вы можете объявить класс или структуру внутри функции. Если вы сделаете этот класс реализующим operator(), затем создадите экземпляр класса и сохраните его в именованной переменной, вы получите то же самое, что и лямда в C ++ 1x.

Проблема в том, что он (а) будет гораздо более многословным и (б) не будет допустимым в качестве аргумента шаблона.

0 голосов
/ 02 апреля 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...