Fonctions en C ++

Noter cet article




функции в с++, функции c++

Пройдя не такой уж долгий путь от нашего первого урока к этому, выподошлик изучению функций в C++. fonctions – это именованный фрагмент кода, который повторяется в программе 2 или больше раз . Когда мы пишем функцию, необходимо дать ей имя и в дальнейшем, чтобы её вызвать в программе (из Principal() или из другой функции), надо обратиться к ней по этому имени.

Мы уже встречали функции в предыдущих уроках. Это функции для строк (символьных массивов) strlen(), strcmp(), функция для генерации случайных чисел rand(). Мы их применяли в программах и, par exemple, передавали в функцию strlen() строку, а она нам возвращала количество символов в этой строке (entier). Это конечно происходило не волшебным образом, а функция принимала нашу строку, обрабатывала её и возвращала нам значение, которое подсчитала. То есть кто-то до нас написал этот самый код функции, которая считает длину строки и мы успешно ею пользуемся в своих программах. И эта функция здорово экономит наше время, сокращает количество строк кода и облегчает его читаемость.

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

До определённого времени можно обходиться и без функций. Вместо этого плодить одинаковый участок кода во всей программе. Но если придется изменить этот код (усовершенствовать или что-то убрать из него), придется вносить изменения по всей программе. Лучше сразу освоить тему функций и активно применять.

Определить функцию можно двумя способами:

  • à Principal-fonctions;
  • после Principal-fonctions. В этом случае необходимо до Principal-функции объявить прототип собственной функции.

В этой статье и следующих мы будем пользоваться вторым способом, так как он является более распространённым. Первый способ можно использовать, если функция одна и её код совсем небольшой. Пока мы пишем простые программы, такое встречается часто. Но для программ посложней, будем писать несколько функций которые будут состоять не из 2-3 temps, а побольше. Покажу вам как выглядит определение функции до Principal():

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

Прототип функции размещен в строке 4, а её определение находится в самом низу программы в строках 20 – 25. Что касается выполнения программы: сначала компилятор прочтет прототип. Это даст ему знать о том, что где-то после Principal() располагается определение этой функции. Далее начнется выполнение главной функции Principal(). Выполняться она будет, пока компилятор не встретит имя функции ourFunctionForPrint(). Тогда он найдет определение этой функции, которое расположено после Principal(), по имени, указанному в прототипе, выполнит её код, после чего снова вернется к выполнению команд Principal-fonctions.

В итоге на экране увидим:

функции в с++, функции c++

Поговорим об определении функций.

Функции в C++ могут не возвращать никаких значений (comme dans l'exemple) и могут возвращать какое-либо значение. Если функция не возвращает ничего, то это функция типа vide.

Синтаксис функции, которая не возвращает значений:

функции c++, функции в с++

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

paramètres (или аргументы функции) – это данные, которые функция принимает и обрабатывает в теле. Если функции не нужно ничего принимать для обработки, круглые скобки оставляют пустыми. Согласно правилам High Integrity C++ Coding Standard желательно не определять функции с большetм количеством параметров (plus grande 6).

Рассмотрим пару примеров с функциями, которые принимают параметры и не возвращают значений.

Принимает один параметр:

В 10-й строке кода функция получает параметр – entier 7. С ним (с этим числом) произойдет то, что описано в определении функции – lignes 16 – 22. à savoir – это число подставится в заголовок цикла pour. Выражение je < questionCount станет равнозначным je < 7 . В итоге мы увидим на экране 7 знаков вопроса.

функции в с++, функции c++

Принимает три параметра:

функции c++, функции в с++

Синтаксис функции, которая возвращает значение:

функции в с++, функции c++

Такие функции отличаются тем, что необходимо указать тип значения, которое вернет функция в результате своей работы. Сам возврат значения в программу оформляется оператором retour и это значение программа получит в том месте, где функция была вызвана . retour может возвращать переменную, константу или результат выражения (par exemple: retour variable1 - variable2; ). В теле функции могут находиться несколько операторов retour. puis, работа функции завершится, если сработает какой-то один из этих операторов. par exemple:

Определение функции располагается в строках 28 – 34. Si l'utilisateur saisit +, сработает блок si en ligne 30, а в нём соответственно сработает retour d1 + d2; . После этого код функции уже не будет обрабатываться дальше. Компилятор вернется к выполнению Principal-fonctions.

функции c++, функции в с++

Вы наверное заметили, что в предыдущем коде названия параметров в прототипе и в самом определении функции отличаются от имен переменных, которые передаются в функцию из Principal. Дело в следующемпараметры в определении и прототипе функции формальные. Когда мы передаем переменные в виде параметров, функция будет работать не с оригиналами переменных, а с их точными копиями. Эти копии создаются в оперативной памяти в момент вызова функции. Она работает с этими копиями, а по завершении работы, копии уничтожаются. Так что в прототипах вы можете использовать точные имена переменных, но функция в любом случае будет работать не напрямую с ними, а с их копиями. То есть сами переменные она не может изменить. Когда в следующих уроках вы познакомитесь с указателями et ссылкамиузнаете, как можно изменить значения передаваемых переменных в теле функции.

Еще немного о прототипе: прочитав его до Principal, компилятор получает сведения о том, какой тип возвращаемого значения будет у функции (или она вообще не возвращает значенияимеет тип vide) и о том, какие параметры будут в неё переданы, в каком количестве и в какой последовательности.

Прототип int calculateSomeDigits(int d1, int d2, carboniser ch); говорит компилятору, что функция вернет на место её вызова целое число и о том, что при вызове в нее должно быть передано два целых числа и один символ. При вызове функции, мы должны передать ей столько параметров сколько указано в её заголовке при определении. Передавать параметры необходимо в том же порядке, как они определены в круглых скобках за именем функции. Иначе возникнут ошибки при компиляции либо программа будет работать некорректно.

Синтаксис прототипа функции:

прототип функции в C++

Если параметров несколькоони должны отделяться запятой. Легче всего объявить прототипэто скопировать из определения функции первую строку (заголовок) и после закрывающей круглой скобки добавить точку с запятой.

функции в с++, функции c++, prototype de fonction

Имена переменных-параметров в прототипе можно не указывать. Следующий прототип равнозначен тому, что выше.

функции в с++, функции c++, prototype de fonction

На мой взгляд, все же лучше объявлять прототипы функций с указанием имён параметров. Особенно если параметров несколько и они имеют одинаковый тип. Для читаемости и понимания программы так будет лучше.

Чтобы закрепить то, о чём говорили в этой статье, надо попрактиковаться. Смотрите статью с задачами на функции в C++ . В ней вы так же найдете информацию о том, как передавать в функции массивы в виде параметров. Советне просто читайте, а пишите код! Желательно своими силами.

Видео по теме:

Следите за обновлениями на нашем сайте и делитесь ссылками на статьи с друзьями!

Bulletin de nouvelles leçons sur la programmation:

25 réflexions sur "Fonctions en C ++

  1. Еще в самых первых уроках вы написали, что в конце каждой программы надо писать return = 0 и добавили, что в последующих уроках будет объяснено зачем это делать и для чего вообще куда-то там возвращать ноль. Je pense que, что уже пора бы выполнить обещание. Объясните пожалуйста зачем нужен возврат и почему там может быть не только ноль.Спасибо заранее.

    1. ))) Согласно последним стандартам С++, уже можно не писать return 0; Программа и сама его вернет вне зависимости от того пропишем мы это или нет. cela signifie que, что она (программа) отработала и закрылась. А вот всевозможные другие значения можно возвращать для того, чтобы отлавливать ошибки в ходе работы программы. Например запрограммировать в функции какое-то условие и если оно не выполнитсявернуть из функции значение -1 (или любое другое), а если выполнится вернуть 1. Далее прописать условие, что если функция вернула -1 – значит произошла ошибка. Вернула 1 – можно продолжать работу (функция отработала нормально).
      Можешь почитать наш урок по Исключениям в С++: http://purecodecpp.com/archives/2044

    2. А return в конце главной функции программы main(), дополню, возвращает итог выполнения всей программы в операционную систему: 0 – успех, не нулевое значениечто-то в программе произошло не так.

      1. Скрипт должен реагировать на изменение цвета на экране, но в строке 11 где первая фигурная скобка autoit пишет что не удается разобрать строку. Помогите пожайлуста

        var x0=0,y0=0,x1=100,y1=100; // фрагмент экрана от 0:0 à 100:100

        var crc0=ait.pixelChecksum(x0,y0,x1,y1);

        tandis que(vrai)
        {
        WSH.sleep(500); // проверка каждые 0.5 sec
        var crc=ait.pixelChecksum(x0,y0,x1,y1);
        si(crc!=crc0)
        {
        crc0=crc;
        sapi.speak(“Alarm! Picture changed.”) // орет человеческим голосом )
        }
        }

  2. en fait, всё относящееся к специфике отображения на экран, к C++ вообще не имеет никакого касательства, et de 100% определяется а).в какой это вы операционной системепытаетесь, и б).в каком графическом инструмента, библиотеке, tool-се.

    И в зависимости от этих вариантов а) и б) разных ответов и подсказок может быть миллион.

  3. et) семерка, b) я не могу понять. Через программу autoit должен запускаться этот скрипт. Помогите. Может есть другая программа, которая выполняет такие же функции, дайте ссылку. Может есть программа, которая реагирует на определенный звук?Тоже дайте ссылку если знаете. Aide s'il vous plaît.

    1. 1. я не знаю что там в Windows 7 (да и не очень хочу знать)
      2. вопрос ваш не относится никоим боком к программированию на C++да и к программированию вообщеэто вопрос по конкретным программам и их использованию.
      4. если у вас есть конкретно сформулированные тех. вопросы (чего вы хотите?), да ещё безотносительно к конкретно ОС Windows 7 (как вообще решают такие проблемы?) то можете спрашивать:
      https://toster.ru/my/feed – ici
      http://rus-linux.net/forum/index.phpили здесь

  4. Спасибо за информацию! А как сделать библиотеку с функциами? merci d'avance( Извиняюсь за ошибки, если есть!) )

    1. Хорошо ли вы понимаете что вы хотите, когда говоритебиблиотека”?
      1. Вы можете создать отдельно компилируемый объектный файл, содержащий несколько ваших функций, и этот файл будет собираться вместе с вашим приложением.
      2. Вы можете создать статическую библиотеку, которая должна собираться вместе с вашим приложением.
      3. Вы можете создать динамическую библиотеку, разделяемую, DLL, которая должна подгружаться (системой) во время выполнения вашего приложения.

  5. Спасибо за информацию! А как сделать библиотеку с функциами? merci d'avance( Извиняюсь за ошибки, если есть!) ) Так как сообщение не получается отправить(типа сообщение уже отправлено) ТО немного дичи флдаолдфарфждшаролдарфра
    désolé!!!!!!!!!!!!!!

  6. Как можно присвоить результат функции переменной в основной функции?
    Для примера: одна функция при двукратном вызове вернула два результата.
    Как их возможно сравнить?
    Как эти результаты присвоить переменным в основной функции.?

    1. comme ça:

      Или даже просто вот так:

Laisser un commentaire

Placez le code dans les balises: <pre class="lang:c ++ décodage:true ">VOTRE CODE</pré>