- •Ввод и вывод
- •Функции ввода-вывода сгруппированы в соответствии с возможностями в три основных потоковых класса:
- •Стандартные потоки cin, cout и ce
- •Операторы ввода и вывода данны
- •Пример ввода и вывода данных с помощью функций scanf() и printf() языка С:
- •Функция cin.getline()
- •Создание новых типов данных
- •регрузка операторов ввода и выво
- •Файловый ввод-вывод
- •бъявление функций без параметр
- •Макроподстановка функций
- •Параметры-ссылки
- •При передаче в параметрах функции большого значения (структура) целесообразно использовать передачу константной ссылки:
- •Псевдонимы
- •инамическое распределение памя
- •Выделение памяти под массив:
- •Параметры по умолчанию
- •Унарная операция разрешения области действия
- •Унарная операция разрешения области действия
- •Перегрузка функций
- •Перегрузка функций
- •Шаблоны функций
06.09.2016
Лекция 1
Отличия языка С++ от языка С
Система базовых типов С++
char |
– символьный тип |
|
wchar_t |
– расширенный |
|
|
символьный |
|
bool |
– логический тип (true, |
|
|
false) |
|
int |
– целочисленный тип |
|
float |
– вещественный тип |
|
double – вещественный тип |
||
|
Модификаторы типов |
|
1. |
двойной очности |
|
signed(знаковый) и unsigned |
||
2. |
(беззнаковый) |
|
short (короткий) и long (длинный) |
Ввод и вывод
Ввод-вывод данных в языке C++ осуществляется либо с помощью стандартных функций языка C (stdio.h), либо с использованием библиотеки классов C++.
Описание |
объектов для управления вводом- |
|||
выводом содержится |
в файле iostream.h. При |
|||
подключении |
этого |
файла |
с |
помощью |
директивы #include |
<iostream.h> в |
|
программе |
автоматически создаются виртуальные каналы связи cin для ввода с клавиатуры и cout для вывода на экран, а также операции помещения в поток << и чтения из потока >>.
Функции ввода-вывода сгруппированы в соответствии с возможностями в три основных потоковых класса:
istream- содержит средства ввода;
ostream - содержит средства вывода;
iostream - поддерживает двунаправленный ввод-вывод, является производным от первых двух классов.
Библиотека IOSTREAM.H содержит также классы, с помощью которых можно управлять вводом-выводом данных из файлов:
ifstream - порожден от istream и подключает к программе файл, предназначенный для ввода данных;
ofstream - порожден от ostream и подключает к программе файл, предназначенный для вывода данных;
fstream - порожден от iostream и подключает к программе файл, предназначенный как для ввода данных,
так и для вывода данных;
Стандартные потоки cin, cout и ce
Стандартным потокам языка С stdin, stdout и stderr, объявленным в файле STDIO.H, в С++ соответствуют объекты-потоки cin, cout, cerr и clog, подключаемые посредством файла IOSTREAM.H:
cin - объект класса istream, связанный со стандартным потоком ввода;
cout - объект класса ostream, связанный со стандартным потоком вывода;
cerr - объект класса ostream, не поддерживающий буферизацию
исвязанный со стандартным потоком ошибок;
clog - объект класса ostream, поддерживающий буферизацию
исвязанный со стандартным потоком ошибок.
Операторы ввода и вывода данны
Ввод-вывод в С++ значительно усовершенствован и упрощен благодаря универсальным операторам >> (ввод) и << (вывод). Эти операторы корректно обрабатывают все встроенные типы данных, т.к. при поступлении данных они самостоятельно анализируют их тип и выбирают подходящий формат представления.
При вводе данных нет необходимости ставить перед именами переменных оператор взятия адреса &. Эту задачу берет на себя оператор >>.
Пример ввода и вывода данных с помощью функций scanf() и printf() языка С:
scanf(“%d%f%c”, &i_val, &f_val, &sym);
printf(“Целое число: %d, вещественное число: %f, символ: %c \n”, i_val, f_val, sym);
Это же выражение на языке С++:
cin >> i_val >> f_val >> sym;
cout << “Целое число: “ << i_val << “, вещественное число: “ << f_val << “, символ:” << sym << endl;
Для считывания строки с пробелами:
cin >> i_val >> f_val >> sym;
Функция cin.getline()
Для использования cin.getline вам необходимо указать символьную строку, в которую будут помещаться символы, а также размер строки, как показано ниже:
cin.getline(string, 64); сin.getline(string2, sizeof(string2));
Следующая программа GETLINE.CPP использует функцию cin.getline для чтения с клавиатуры строки текста:
#include <iostream.h> void main(void)
{
char string[128];
cout << "Введите строку текста и нажмите Enter" << endl; cin.getline(string, sizeof(string));
cout << "Вы ввели: " << string << endl;
}
Создание новых типов данных
В языке С++ объявление новых типов (enum, struct, union, class) осуществляется без использования оператора typedef:
struct Student{ char fio[3][16]; int kurs;
float rate; };
Student st = {”Иванов”,”Иван”,”Иванович”,1,7.0};
#include <iostream> using namespase std;
int main(int argc, char* argv[])
{
struct Student{ char fio[3][16]; int kurs;
float rate; };
Student st;
cout << "Введите в формате \” Имя Фамилия Отчество курс успеваемость\“\n";
cin >> st.fio[0] >> st.fio[1] >> st.fio[2] >> st.kurs >> st.rate;
cout << “Имя: " << st.fio[0] << ' ' << st.fio[1] << ' ' << st.fio[2] << '\n'; cout << “Курс: " << st.kurs << '\n';
cout << “Успеваемость: " << st.rate << '\n'; return 0;
}
регрузка операторов ввода и выво
Для обработки данных нестандартных (пользова- тельских) типов данных производится перегрузка операторов << и >>. Рассмотрим пример на основе структуры Student, описанной ранее:
ostream& operator << (ostream& osout, Student stud)
{
osout << “Фамилия: “ << stud.fio[0] << endl; osout << “Имя: ” << stud.fio[1] << endl; osout << “Отчество: ” << stud.fio[2] << endl; osout << “Курс: ” << stud.kurs << endl;
osout << “Средний балл: ” << stud.rate<< endl;
} |
|
Для вывода содержимого структуры |
достаточно |
задать такое выражение: |
|
cout << stud;
Файловый ввод-вывод
#include <fstream> #include <iostream>
using namespace std;
int main(int argc, char* argv[]) |
|
{ |
|
setlocale(LC_ALL, "rus"); |
|
ofstream fout("cpp.txt"); |
// создаём объект класса ofstream для записи и |
// связываем его с файлом cpp.txt
fout << "Работа с файлами в С++"; // запись строки в файл
fout.close(); |
|
// закрываем файл |
char buff[50]; |
// буфер промежуточного хранения считываемого из файла текста |
|
ifstream fin("cpp.txt"); |
// открыли файл для чтения |
|
fin >> buff; |
|
// считали первое слово из файла |
cout << buff << endl; |
// напечатали это слово |
|
fin.getline(buff, 50); |
// считали строку из файла |
|
fin.close(); |
|
// закрываем файл |
cout << buff << endl; |
// напечатали эту строку |
return 0;
}