При задании умалчиваемых значений должно соблюдаться правило. Если параметр имеет умалчиваемое значение, то все параметры справа от него также должны иметь умалчиваемые значения. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

При задании умалчиваемых значений должно соблюдаться правило. Если параметр имеет умалчиваемое значение, то все параметры справа от него также должны иметь умалчиваемые значения.



Рассмотрим пример определения функции с умалчиваемыми значениями.

 

void print (char*name =”Номер дома: ”, int n =1)

{ cout << name << n<<endl; }

И соответственно вызовы функции:

 

print(); // Номер дома: 1 – оба значения по умолчанию

 

print(“Номер билета: ”); // Номер билета: 1 – для второго

// параметра используется значение по умолчанию

print(, 2); //Ошибка – можно опускать значения с конца списка

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

 

void print1 (int n =1, char*name =”Номер дома: ”)

{ cout << name << n<<endl; }

И соответственно вызовы:

print1(); // Номер дома: 1 – оба значения по умолчанию

 

print1(2); // Номер дома: 2 – опускается значение второго

// параметра

print1(3); // Номер дома: 3

print1(3, “Размерность пространства: ”);

// Размерность пространства: 3 - умалчиваемые

//значения не используются

Передача фактических параметров

В С++ передача параметров может осуществляться тремя способами:

 

- по значению, когда в функцию передается числовое значение параметра;

- по адресу, когда в функцию передается не значение параметра, а его адрес, что особенно удобно для передачи в качестве параметров массивов;

 

- по ссылке, когда в функцию передается не числовое значение параметра, а сам параметр и тем самым обеспечивается доступ из тела функции к объекту, являющемуся фактическим параметром.

 

 

Передача параметров по значению

Формальным параметром может быть только имя скалярной переменной стандартного типа или имя структуры, определенной пользователем.

При вызове функции формальному параметру выделяется память в стеке, в соответствии с его типом. Фактическим параметром является – выражение, значение которого копируется в стек, в область ОП, выделенную под формальный параметр. Фактическим параметром может быть просто неименованная константа нужного типа, или имя некоторой переменной, значение которой будет использовано как фактический параметр.

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

Рассмотрим пример передачи параметров по значению:

...

void R (int a, int b, int c)

{ a+=100; b+=100; c+=100;

cout << a<<b<<c<<endl; }

Void main ()

{ int a1=1, b1=2, c1=3;

cout << a1<<b1<<c1<<endl;

R (a1, b1, c1);

// аналогично можнобыло вызвать так: R(1, 2, 3);

// т.к. нас интересуют только значения фактических параметров

cout << a1<<b1<<c1<<endl;

}

Результат:

1 2 3 // значение переменных до вызова функции

101 102 103 // значения формальных параметров

1 2 3 // значения переменных после вызова функции

// функция не изменила значения переменных, являющимися

//фактическими параметрами

 

стек

           
 
     
 


1 2 3 1 2 3

A1 b1 c1 a b c адреса

стек

           
 
 
     


1 2 3 101 102 103

a1 b1 c1 a b c адреса

Рисунок 1 – Схема обмена данными при передаче параметров по значению



Поделиться:


Последнее изменение этой страницы: 2017-02-19; просмотров: 306; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 13.59.34.87 (0.006 с.)