- •Часть 1.
- •2. Перечисляемые типы.
- •Int Matrix[5][6];
- •4. Стандартный ввод/вывод в языке с.
- •Void main()
- •Void *pv;
- •7. Оператор безусловного цикла for.
- •Void main()
- •8. Циклы while и do/while
- •9. Условные операторы if и if/else
- •10. Условный оператор switch/case
- •Void main(void)
- •Int sign[10];
- •11. Функции, определяемые пользователем.
- •12. Три способа передачи параметров в функцию
- •Void min(double*, double&);
- •Void min(double mas[10],double &num)
- •13. Массивы и указатели. Указатель на функцию.
- •Void main()
- •Void main()
- •Часть 2.
- •2. Определение класса. Состав класса, создание экземпляров класса.
- •3. Конструктор класса, его назначение.
- •4. Конструктор класса с аргументами, задаваемыми по умолчанию.
- •Int GetX1(){return X;}
- •Int GetX2(){return y;}
- •Int GetX1(){return x1;}
- •Int GetX2(){return x2;}
- •Void main()
- •Void f2();
- •6. Множественное наследование. Виртуальные базовые классы.
- •7. Передача аргументов в базовый класс.
- •9. Виртуальные функции
- •Void main()
- •Virtual void Func(){};
- •Void main()
- •Void SetData(t val);
- •11. Дружественные функции. Указатель this
- •Void main()
- •12. Перегрузка операций
11. Функции, определяемые пользователем.
Использование в программе прикладной функции требует, вообще говоря, выполнения трех действий:
- объявления прототипа функции;
- определения самой функции, т. е. выполняемых ею действий;
- вызова этой функции в одной или нескольких точках программы.
Если в программе используется некоторая прикладная функция, то в начале программы должен быть указан прототип этой функции, чтобы компилятор заранее получил информацию об ее свойствах.
Прототип функции имеет следующий формат:
тип_возвращаемого_значения имя_функции (тип_аргумента_1,
тип_аргумента_2,...);
Примеры прототипов:
int Search(char*,float); // функция требует 2 аргумента
// типов char* и float и возвращает int
void Print(int); // функция требует 1 аргумент типа int
// и ничего не возвращает
char* Letter(void); // функция не требует аргументов
// и возвращает char*
В программе должно содержаться определение функции. Это определение может находиться в любом месте программы – как до главной функции Main(), так и после нее.
Если определение функции находится до главной функции Main(), прототип этой функции указывать необязательно. Если тип функции не указывается, по умолчанию тип функции определяется как int.
Определение начинается с заголовка, фактически повторяющего прототип, но с указанием формальных имен аргументов функции; за заголовком в фигурных скобках перечисляются предложения языка, составляющие тело функции. Если функция возвращает какое-либо значение, ее имени должен быть присвоен тип возвращаемого значения, а ее текст должен заканчиваться оператором return:
float Add(float a1, float a2)
{float b;
b=a1+a2;
return b;
}
Если функция не возвращает никакого значения, ее текст не должен заканчиваться оператором return, а сама функция должна возвращать тип void.
Вызов функции производится в теле главной функции Main() или в теле других функций, при этом место формальных аргументов функции занимают фактические значения переменных. Например:
float x=3.14, y=8.87, z;
z=Sum(x,y);
12. Три способа передачи параметров в функцию
В языке C++ предусмотрены три способа передачи параметров в вызываемую функцию:
по значению, когда в функцию передается числовое значение параметра;
по адресу, когда в функцию передается не значение параметра, а его адрес, что особенно удобно для передачи в качестве параметров массивов и структур;
по ссылке, когда в функцию также передается адрес параметра, однако действуют особые правила использования этого адреса в вызываемой функции.
Пример передачи в функцию скалярного значения и возврата скалярного результата. Пусть у нас определена функция AddF (float, float), осуществляющая сложение двух вещественных чисел, причем переменной AddF присваивается значение суммы (классическое определение функции):
float AddF(float a, float b)
{
return a+b;
}
Программный фрагмент с вызовом этой функции может иметь, например, такой вид:
float x = 3.14; //Определим первое слагаемое
float y = 2.71; //Определим второе слагаемое
float z; //Объявим переменную для результата
z = Sum(x,y); //Собственно вызов функции
Рассмотрим теперь передачу в функцию адреса, при этом в качестве параметра в функцию могут передаваться как скалярные величины, так и массивы. Определим функцию
AddA (float, float, float*), осуществляющую сложение двух вещественных чисел, причем значение суммы будет передаваться по адресу третьего параметра:
/* Определение функции AddA(float, float, float*) */
void AddA(float A, float B, float* Z) // Заголовок функции
{ *z = a+b; // Значение суммы передается по адресу z
}
/* Фрагмент программы с вызовом функции AddA() */
float x = 3.14; //Определим первое слагаемое
float y = 2.71; //Определим второе слагаемое
float z; //Объявим переменную для результата
z = AddA(x,y,&Z); //Собственно вызов функции
Определим функцию Sub(int*,int*,int*)осуществляющую вычисление минимального элемента min массива A и вычисление элементов массива B=A-min:
void Sub(int A[10],int B[10],int* min) // Имя массива А – это
//указатель (адрес) на первый элемент массива
{ int i;
*min=A[0];
for(i=1;i<10;i++)
if(A[i]<*min)
*min=A[i];
for(i=1;i<10;i++)
B[i]=A[i]-*min;
}
/* Фрагмент программы с вызовом функции Sub(int*,int*,int*), */
int H[10],m; //Массив с данными
int G[10]; //Вычисляемый массив
Sub(H,G,&m); //Вызов функции
При передаче параметра по ссылке в функцию также передается адрес параметра, однако в дальнейшем все действия производятся не как с адресом, а как со значением параметра. Это снижает вероятность “описок “ при создании кодов большого объема.
Определим функцию SumS(int, int, int& ), осуществляющую сложение двух целых чисел, причем значение суммы будет передаваться по ссылке на третий параметр:
/* Определение функции SumS(int ,int ,int& ) */
void SumS(int x, int y, int& z) //Заголовок функции
{ z = x+y; // Значение суммы передается по ссылке на z
}
/* Фрагмент программы с вызовом функции SumS() */
int i = 1; // Определим первое слагаемое
int j = 10; // Определим второе слагаемое
int k; // Объявим переменную для результата
Sum(i,j,k); // Вызов функции
Задание 4.
Какая информация появится на экране дисплея после выполнения данной
программы:
#include<stdio.h>
