
- •220300 - Системы автоматизированного проектирования
- •Состав языка и принцип работы компилятора языка высокого уровня
- •Идентификаторы
- •Альтернативный ввод-вывод в стиле с
- •Константы
- •Манипуляторы
- •Преобразования типов
- •Арифметические операции
- •Функции стандартной библиотеки
- •Операции отношения и логические операции
- •Базовые конструкции структурного программирования
- •Цикл с параметром (for)
- •Цикл с предусловием (while)
- •Цикл с постусловием (do while)
- •Рекомендации по программированию циклов
- •Ветвления
- •Условный оператор if
- •Вложенные конструкции
- •Проблемы соответствия if и else во вложенных ветвлениях
- •Условная операция
- •Оператор switch
- •Операторы передачи управления
- •Контрольная работа
- •Массивы
- •Сортировка массива методом выбора
- •Сортировка массива методом пузырька
- •Многомерные массивы
- •Операции со строками
- •Функции
- •Void starline(); // объявление функции (прототип)
- •Передача аргументов в функцию по значению
- •Void charline(char sim, int n); // объявление функции (прототип)
- •Возвращение функцией значения
- •Передача аргументов по ссылке
- •Возвращение значения по ссылке
- •Перегруженные функции
- •Переменные и функции
- •Передача массивов в функции
- •Указатели
- •Указатели и массивы
- •Указатели и функции
- •Указатели и строки
- •Динамический массив и динамическое выделение памяти
- •Ввод/вывод
- •Форматированный ввод/вывод
- •Конструкторы и методы
- •Двоичный ввод/вывод. Бинарные файлы
- •Двунаправленный ввод/вывод
- •Функции стандартной библиотеки для работы с файлами или ввод/вывод в стиле с
Возвращение значения по ссылке
С++ имеет механизм, с помощью которого можно возвращать значение функции по ссылке. Одной из причин применения этого механизма является необходимость избежать копирования объектов большого размера. Другой причиной является открывающаяся возможность использовать вызов функции в качестве левого операнда операции присваивания. Хотя без этого механизма можно спокойно обойтись и применяется он крайне редко (в случаях, когда необходимо внести путаницу в текст программы), приведём пример его использования просто для получения представления о нём.
#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 |
Область памяти |
стек |
динамическая |
динамическая |
Назначение |
Переменные, используемые отдельной функцией и уничтожающиеся при выходе из неё. |
Переменные, используемые отдельной функцией, но сохраняющие свои значения между вызовами функции. |
Переменные, используемые несколькими функциями. |