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

Консольный ввод и вывод в С++

Все элементы языка С содержатся в С++, поэтому все программы, написанные на С, являются также программами на С++. Поэтому можно писать программы на С++, которые будут выглядеть точно так же, как программы, написанные на С. Однако, большинство программистов стремятся писать программы, в которых используются стиль и черты, уникальные именно для С++. Одной из наиболее своеобразных черт языка С++ является подход к вводу-выводу.

Хотя такие функции, как printf() и scanf() по-прежнему доступны, С++ обеспечивает иной, лучший способ выполнения этих операций. В С++ ввод-вывод выполняется с использованием операций, а не функций ввода-вывода. Операцией ввода является <<, а операцией вывода - >>. В С это операции побитового сдвига влево и вправо. В С++ эти операции сохраняются, выполняя при этом еще и ввод-вывод. Рассмотрим выражение:

cout << “Эта строка выводится на экран.\n”;

Это выражение осуществляет вывод строки в заранее определенный поток cout, который автоматически связывается с терминалом, когда программа С++ начинает выполняться. Это похоже на stdout в С. Как и в С, потоки ввода-вывода в С++ могут быть переопределены.

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

cout << 100.99;

В общем случае, для вывода на экран используется следующая общая форма операции <<:

cout << выражение;

Здесь выражение может быть любым выражением С++.

Для считывания с клавиатуры используется операция ввода >>. Например, для ввода целого значения в переменную num:

int num;

cin >> num;

Следует обратить внимание, что переменной num не предшествует амперсенд &. При вводе с использованием функции scanf() функции должны передаваться адреса переменных. Только тогда они могут получить значения, вводимые пользователем. В случае использования операции ввода С++ все происходит иначе. В общем случае для ввода значения с клавиатуры используется следующая форма >>:

cin >> переменная;

Такое расширенное толкование << и >> является примером перегрузки операций. Для правильного использования операций ввода-вывода в С++ нужно включить в программу заголовочный файл iostream.h. Он является одним из стандартных заголовочных файлов и поставляется вместе с компилятором С++.

Приведем пример программы, которая вводит строку, два целых числа и одно число с плавающей точкой двойной точности:

#include<iostream.h>

main()

{

int i,j;

double d;

i=10;

j=20;

d=99.101;

cout << “Вот несколько чисел: “;

cout << i;

cout << ‘ ‘;

cout << j;

cout << ‘ ‘;

cout << d;

return 0;

}

В одном выражении ввода-вывода можно использовать более одной величины. Например, программа, более эффективно выполняющая те же действия, что и предыдущая:

#include<iostream.h>

main()

{

int i,j;

double d;

i=10;

j=20;

d=99.101;

cout << “Вот несколько чисел: “;

cout << i << ‘ ‘<< j << ‘ ‘<< d;

return 0;

}

Здесь в строке вывода выводится несколько элементов данных в одном выражении. В общем случае можно использовать единственное выражение для вывода любого требуемого количества элементов данных. Операция << аналогична любой операции С++ и может быть частью произвольно длинного выражения. По мере необходимости следует включать в строку вывода пробелы между элементами данных, т.к. в противном случае данные будет неудобно читать.

Программа, которая вводит целое, число с плавающей точкой и строку символов (для ввода используется одно выражение):

#include<iostream.h>

main()

{

int i;

float f;

char s[80];

cout << “Введите целое, вещественное и строку: “;

cin >> i >> f >> s;

cout << “Вот ваши данные: “;

cout << i << ‘ ‘<< f << ‘ ‘<< s;

return 0;

}

Можно ввести в одном выражении ввода столько элементов данных, сколько нужно. Как и в С, различные элементы данных при вводе должны быть отделены при вводе друг от друга (пробелами, табуляциями или символами новой строки).

При считывании ввод будет остановлен после считывания первого разделительного символа. Например, если ввести:

10 100.12 Это проверка

то на экран будет выведено:

10 100.12 Это

Считывание прекратилось при вводе пробела после слова Это. Остаток строки остается в буфере ввода, в ожидании следующей функции ввода.

По умолчанию при использовании >> буферизуется весь ввод строки. Это означает, что до тех пор, пока не нажата клавиша <Enter>, вся информация не будет передана в программу.

Комментарии в С++

Комментарии можно включать в программу двумя способами. Первый способ – использование стандартного механизма, принятого в С, т.е. комментарий начинается парой символов /*, а заканчивается парой */. Как и в стандарте С, в С++ этот тип комментария не может быть вложенным.

Вторым способом, которым можно задавать комментарий в С++, является однострочный комментарий. Он начинается символами // и оканчивается концом строки. Обычно для коротких однострочных комментариев используется этот стиль, а для длинных многострочных – стиль стандарта С.

Отличия С и С++. Нововведения.

  1. Отличия С и С++.

  2. Перегрузка функций.

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

  1. Встраиваемые функции.

  2. Спецификатор типа ссылки.

  3. Оператор расширения области видимости.

  4. Управление памятью.

Язык С++ имеет некоторые отличия от С, кроме того, в нем есть ряд нововведений, которые широко используются программистами.

  1. С++ отличается от С способом задания пустого списка параметров. В С, если функция не имеет параметров, ее прототип должен содержать слово void в списке параметров. Например, прототип функции, которая не имеет параметров и возвращает символ, должен выглядеть так:

char f1 (void);

В С++ слово void не является обязательным. Поэтому прототип той же функции в С++ будет выглядеть так:

char f1 ();

  1. В С++, в отличие от С обязательно наличие прототипов функций. В С прототипы рекомендуются , но не являются обязательными (разумеется, если для программирования на С используется система С++, например, Borland C++, то необходимо соблюдать правила программирования на С++).

  2. Если в С++ функция имеет тип возвращаемого значения отличный от void, то оператор return внутри этой функции должен содержать значение этого типа. В языке С функции с отличным от void типом возвращаемого значения фактически не требуется ничего возвращать. Если значения нет, то функция возвращает неопределенное значение.

  3. В программах на С++ можно выбирать место для объявления локальных переменных. В С локальные переменные могут объявляться только в начале блока, перед любым исполняемым оператором. В С++ локальные переменные могут объявляться в любом месте программы. Они видимы от точки объявления до конца функции, которая содержит их.

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

Например, программа, вычисляющая факториал, демонстрирует такое объявление переменных:

#include<iostream.h>

main()

{

int i;

cout << “Введите число”;

cin >> i;

//расчет факториала

int j, fact=1; //перем., объявленные после исполн. оператора

for (j=i; j>=1; j--)

fact*=j;

cout << “факториал равен ”; << fact;

return 0;

}

Еще одним нововведением в С++ являются встраиваемые функции. В С++ можно задать функцию, которая, фактически, не вызывается, а ее тело встраивается в программу в месте ее вызова. Она действует почти так же, как макроопределение с параметрами в С. Преимуществом встраиваемых (in-line) функций является то, что они не связаны с вызовом функций и механизмом возврата. Такие функции выполняются гораздо быстрее обычных. Выполнение машинных команд, которые генерируются при вызове функции и возврате функцией значения, занимают определенное время. Если функция имеет параметры, то ее вызов занимает еще большее время за счет занесения параметров в стек и освобождения стека.

Недостатком встраиваемых функций является то, что если они слишком большие и вызываются слишком часто, объем программ сильно возрастает. Из-за этого применение встраиваемых функций ограничивается только очень небольшими функциями.

Для объявления встраиваемой функции достаточно использовать спецификатор inline перед определением функции. Например:

//Пример встраиваемой функции

#include<stdio.h>