Аргументы по умолчанию.
Можно организовать функцию, имеющую аргументы, таким образом, что ее можно будет вызывать, вообще не указывая при этом никаких аргументов. Однако для этого при объявлении функции необходимо задать значения аргументов по умолчанию.
Задание значений аргументов по умолчанию полезно в тех случаях, когда аргументы функции часто принимают какое-то одно значение. Кроме того, значения по умолчанию могут использоваться, если программист хочет модифицировать уже написанную функцию путем добавления в нее нового аргумента. В этом случае не нужно будет изменять вызовы функции, поскольку значение нового аргумента будет задано по умолчанию.
Рассмотрим пример:
Пример 7:
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
using namespace std;
class MArray
{
protected:
int size;
int A[50];
public:
int takeA(int n)// Функция возврата A[n] элемента массива
{
return A[n];
};
int takeA(int n,int m)//Функция возврата A[n+m] элемента массива
{
return A[n+m];
};
};
class nasl:public MArray
{
public:
void Keyboard(int Size=5)
{
int i;
size=Size;
for(i=0;i<size;i++)
{
cin>>A[i];
}
};
void DisplayA()// функция вывода массива на экран
{
int i;
for(i=0;i<size;i++)
{
cout<<" "<<A[i];
}
};
};
int main()
{
int i,k,m;
nasl a;
a.Keyboard();
a.DisplayA();
a.Keyboard(4);
a.DisplayA();
cout<<"Vvedite nomer elementa\n";
cin>>k;
i=a.takeA(k);
cout<<"A["<<k<<"]="<<" "<<i;
cout<<"Vvedite m & k\n";
cin>>k>>m;
i=a.takeA(k,m);
cout<<"A["<<k+m<<"]="<<" "<<i;
return 0;
}
5.5 Области видимости и класс памяти.
Изучив основы работы с функциями, мы рассмотрим два аспекта, касающихся взаимодействия переменных и функций: область видимости и класс памяти. Область видимости определяет, из каких частей программы возможен доступ к переменной, а класс памяти — время, в течение которого переменная существует в памяти компьютера.
Рассмотрим два типа области видимости: локальная область видимости и область видимости файла(глобальная область видимости).
Переменные, имеющие локальную область видимости, доступны внутри того блока, в котором они определены.
Переменные, имеющие глобальную область видимости, доступны из любого места файла, в котором они определены.
Блоком обычно считается код, заключенный в фигурные скобки. Например, тело функции представляет собой блок.
Существует два класса памяти: automatic (автоматический) и static (статический).
У переменных, имеющих класс памяти automatic, время жизни равно времени жизни функции, внутрикоторой они определены.
У переменных, имеющих класс памяти static, время жизни равно времени жизни всей программы.
Рассмотрим пример с использованием глобольными и локальными переменными(объектами).
Пример 8:
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
using namespace std;
class MArray
{
protected:
int size;
int A[50];
public:
inline int takeA(int n)// Функция возврата A[n] элемента массива
{
return A[n];
};
inline int takeA(int n,int m)//Функция возврата A[n+m] элемента массива
{
return A[n+m];
};
};
class nasl:public MArray
{
public:
void Keyboard()
{
int i;
cout<<"Vvedite razmer massiva";
cin>>size;
for(i=0;i<size;i++)
{
cin>>A[i];
}
};
void DisplayA()// функция вывода массива на экран
{
int i;
for(i=0;i<size;i++)
{
cout<<" "<<A[i];
}
};
};
nasl a;//глобальный объект
int main()
{
int i,k,m;
a.Keyboard();
a.DisplayA();
cout<<"Vvedite nomer elementa\n";
cin>>k;
i=a.takeA(k);
cout<<"A["<<k<<"]="<<" "<<i;
cout<<"Vvedite m & k\n";
cin>>k>>m;
i=a.takeA(k,m);
cout<<"A["<<k+m<<"]="<<" "<<i;
return 0;
}