Аргументы по умолчанию.

Можно организовать функцию, имеющую аргументы, таким образом, что ее можно будет вызывать, вообще не указывая при этом никаких аргументов. Одна­ко для этого при объявлении функции необходимо задать значения аргументов по умолчанию.

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

Рассмотрим пример:

Пример 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;

}