Операция уточнения области действия в C++.
В следующем примере для того, чтобы избежать конфликтов между переменными как с файловой, так и с локальной областями действия, используется операция уточнения области действия (scope resolution operator ::). Предыдущая программа выдавала неправильное значение произведения, так как в вычислениях использовалось локальное значение. Обратите внимание на то, как в приведенном листинге в функции iproduct() используется операция уточнения области действия.
// 08GSCOPE.CPP
// Программа на C++ иллюстрирует проблемы, связанные с правилами
// области действия, и использование операции уточнения области
// действия. При вычислении произведения с помощью этой операции,
// в функции используется переменная с файловой областью действия
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <process.h>
#include <ctype.h>
#include <stdlib.h>
#include <math.h>
#include <stdarg.h>
#include <string.h>
using namespace std;
int iproduct(int iw,int ix);
int in=10;
main()
{
int il=3;
int im=7;
int io;
io=iproduct(il,im);
cout << "The product of " << il <<" * " << im
<< " * " << in << " is: " << io;
printf ("\n\nPress any key to finish\n");
_getch();
return(0);
}
int iproduct(int iw,int ix)
{
int iy;
int in=2;
iy=iw*ix*(::in);
return(iy);
}
88. Использование функций. Математические функции. Функции округления. Компиляция программ, состоящих из двух или более функций.
Функция — это самостоятельная единица программы, которая спроектирована для реализации конкретной подзадачи.
Функция является подпрограммой, которая может содержаться в основной программе, а может быть создана отдельно (в библиотеке). Каждая функция выполняет в программе определенные действия.
Сигнатура функции определяет правила использования функции. Обычно сигнатура представляет собой описание функции, включающее имя функции, перечень формальных параметров с их типами и тип возвращаемого значения.
Семантика функции определяет способ реализации функции. Обычно представляет собой тело функции.
Определение функции
Каждая функция в языке Си должна быть определена, то есть должны быть указаны:
· тип возвращаемого значения;
· имя функции;
· информация о формальных аргументах;
· тело функции.
Определение функции имеет следующий синтаксис:
ТипВозвращаемогоЗначения ИмяФункции(СписокФормальныхАргументов)
{
ТелоФункции;
...
return(ВозвращаемоеЗначение);
}
Пример: Функция сложения двух вещественных чисел
float function(float x, float z)
{
float y;
y=x+z;
return(y);
}
Объявление функций: прототипы функций
1 | returnDataType functionName( dataType argName1, dataType argName2, ..., dataType argNameN); |
где,
returnDataType — возвращаемый тип данных
functionName — имя функции
dataType — тип данных
argName1...N — имена параметров функции (количество параметров неограниченно)
Смотрим пример объявления функции:
|
В языках C и C++, функции должны быть объявлены до момента их вызова. Вы можете объявить функцию, при этом функция может возвращать значение или — нет, имя функции присваивает программист, типы данных параметров указываются в соответствии с передаваемыми в функцию значениями. Имена аргументов, при объявления прототипов являются необязательными:
1 | int sum(int , int ); // тот же прототип функции |
Иногда, объявление функции называют определением функции, хотя это не одно и то же.
|
Определение функций
|
Рассмотрим определение функции на примере функции sum.
Математические функции
Математические функции хранятся в стандартной библиотеке math.h. Аргументы большинства математических функций имеют тип double. Возвращаемое значение также имеет тип double.
Углы в тригонометрических функциях задаются в радианах.
Основные математические функции стандартной библиотеки.
Функция | Описание |
int abs(int x) | Модуль целого числа x |
double acos(double x) | Арккосинус x |
double asin(double x) | Арксинус x |
double atan(double x) | Арктангенс x |
double cos(double x) | Косинус x |
double cosh(double x) | Косинус гиперболический x |
double exp(double x) | Экспонента x |
double fabs(double x) | Модуль вещественного числа |
double fmod(double x, double y) | Остаток от деления x/y |
double log(double x) | Натуральный логарифм x |
double log10(double x) | Десятичный логарифм x |
double pow(double x, double y) | x в степени y |
double sin(double x) | Синус x |
double sinh(double x) | Синус гиперболический x |
double sqrt(double x) | Квадратный корень x |
double tan(double x) | Тангенс x |
double tanh(double x) | Тангенс гиперболический x |