Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекций по Программированию на С++.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
795.65 Кб
Скачать

Возвращение значения по ссылке

С++ имеет механизм, с помощью которого можно возвращать значение функции по ссылке. Одной из причин применения этого механизма является необходимость избежать копирования объектов большого размера. Другой причиной является открывающаяся возможность использовать вызов функции в качестве левого операнда операции присваивания. Хотя без этого механизма можно спокойно обойтись и применяется он крайне редко (в случаях, когда необходимо внести путаницу в текст программы), приведём пример его использования просто для получения представления о нём.

#include <iostream>

#include <conio>

using namespace std;

int X; // глобальная переменная видна и в main(), и в setx() (по умолчанию Х=0)

int& setx(); // прототип функции

int main() { // присваивание значения x при

setx() = 92; // помощи вызова функции слева

cout << "x=" << X << endl; // вывод нового значения x (увидим х=92)

getch(); return 0;

}

int& setx() {

return X; // возвращает значение, которое будет изменено

}

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

Перегруженные функции

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

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

#include …

void simline(); // прототипы

void simline(char);

void simline(char, int);

int main() {

simline();

simline('=');

simline('+', 30);

getch(); return 0;

}

//---------функция выводит на экран 45 символов '*'

void simline() {

for(int j=0; j<45; j++) // цикл, выполняющийся 45 раз

cout << '*'; // вывод символа '*'

cout << endl;

}

//---------функция выводит 45 заданных символов

void simline(char ch) {

for(int j=0; j<45; j++) // цикл, выполняющийся 45 раз

cout << ch; // вывод заданного символа

cout << endl;

}

//---------функция выводит заданный символ заданное число раз

void simline(char ch, int n) {

for(int j=0; j<n; j++) // цикл, выполняющийся n раз

cout << ch; // вывод заданного символа

cout << endl;

}

В программе содержатся три функции с одинаковым именем. Компилятор различает эти три функции по количеству аргументов и их типам.

Переменные и функции

Локальная пер.

Статическая

локальная пер.

Глобальная пер.

Область видимости

функция

функция

программа

Время жизни

функция

программа

программа

Начальное значение (если не иниц.)

случайное

0

0

Область памяти

стек

динамическая

динамическая

Назначение

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

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

Переменные, используемые несколькими функциями.