![](/user_photo/2706_HbeT2.jpg)
Лекция № 3 (слайды)
.pdf![](/html/2706/141/html_twrYuL0mZi.K4Qn/htmlconvd-gjwur611x1.jpg)
Перечисления
enum Scale |
enum class Scale |
struct Temperature |
{ |
{ |
{ |
Kelvin, |
Kelvin, |
double value; |
Celsius, |
Celsius, |
Scale scale; |
Fahrenheit |
Fahrenheit |
}; |
}; |
}; |
|
Temperature data; |
Temperature data; |
|
data . value = 100; |
data . value = 100; |
|
data . scale = Kelvin; |
data . scale = Scale :: Kelvin; |
data . scale = 'Q'; |
char symbol = data . scale; |
cout << data . scale; |
Так и нужно. |
×Возможность утрачена. |
× Перечисление — |
|
|
отдельный новый тип. |
11.09.2014 |
© Кафедра УиИ НИУ «МЭИ» |
11 |
![](/html/2706/141/html_twrYuL0mZi.K4Qn/htmlconvd-gjwur612x1.jpg)
Приведение типов (cast)
|
Значения для Kelvin, Celsius и т. д. разные, |
|
|
× но неизвестные. |
|
|
enum Scale : char |
• Переменные хранятся в памяти. |
• Память хранит только числа (значения): |
||
|
char symbol = static_cast< char >(data . scale); |
{ |
|
|
• уникальные значения для Scale; |
|
Kelvin = 'K', |
|
|
|
|
• коды символов для char. |
|
|
Celsius = 'C', |
|
|
|
|
• static_cast: то же значение иного типа. |
|
|
Fahrenheit = 'F' |
||
|
|
||
}; |
|
|
|
|
|
Нижележащий тип (диапазон значений Scale — как у char). |
ostream& operator<<(ostream& output, const Scale& scale)
{
return output << static_cast< char >(scale); |
Так просто! |
}
11.09.2014 |
© Кафедра УиИ НИУ «МЭИ» |
12 |
![](/html/2706/141/html_twrYuL0mZi.K4Qn/htmlconvd-gjwur613x1.jpg)
Файловый ввод и вывод
|
|
Ничего или ios::out. |
|
|
ios :: ate — дописывать в конец, |
|
|
• Append (Output) в Pascal; |
• Ввод: |
|
ios :: trunc — очистить файл перед записью, |
|
• Truncate (Output) в Pascal. |
|
|
|
ifstream input ( "file.txt" ); input >> temperature;
• Вывод:
ofstream output ( "file.txt", режим ); output << "Result: " << result << '\n';
•Закрытие файла — автоматически.
•Работа с файлами подобна работе с cin и cout.
11.09.2014 |
© Кафедра УиИ НИУ «МЭИ» |
13 |
![](/html/2706/141/html_twrYuL0mZi.K4Qn/htmlconvd-gjwur614x1.jpg)
Двоичные файлы
•Хранят данные так, как они представлены в памяти, — в виде набора байт.
• Компактная запись рисунков и т. п. |
|
|
|
|
sizeof (value) |
|
|
|
|
|
|
|
|
|
|
|
|||||||
• Удобны для чтения машиной. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
… |
|
|
|
|
|
|
|
… |
|||
|
|
|
|
|
|
|
|
||||
• Режим: режим | ios :: binary |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
&value |
|||||||
(для ввода: ios :: binary). |
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
• Вывод:
double value = 42;
output . write ( as_bytes(value), sizeof (value) );
• Ввод:
input . read ( as_bytes(value), sizeof (value) );
• Векторы и строки можно (пока) вводить и выводить поэлементно.
11.09.2014 |
© Кафедра УиИ НИУ «МЭИ» |
14 |
![](/html/2706/141/html_twrYuL0mZi.K4Qn/htmlconvd-gjwur615x1.jpg)
Форматный вывод
double value = 12.34567;
cout << setprecision ( 2 );
cout << value
<< fixed |
<< value |
<< scientific |
<< value |
|
|
Действует на cout все время |
|
|
после установки. |
// |
12 |
…значащих цифр |
// |
12.35 |
…цифр после запятой |
//1.23e+01 …цифр после запятой
вмантиссе
<< defaultfloat << value; // 12
Действуют только на следующее выводимое
значение.
Функция printf ( "%03.3f \n", value ); // 012.346
•Форматная строка подобна таковой в MATLAB.
•Не работает с vector<T>.
•Не рекомендуется в C++.
11.09.2014 |
© Кафедра УиИ НИУ «МЭИ» |
15 |
Форматный вывод
(продолжение)
• cout << setw (15) << setfill ( '.' ) << left << "Code:"
<<setw (4) << setfill ( '0' ) << right << 12;
•Code:..........0012
•cout << endl;
•cout << '\n'; cout . flush();
11.09.2014 |
© Кафедра УиИ НИУ «МЭИ» |
16 |
![](/html/2706/141/html_twrYuL0mZi.K4Qn/htmlconvd-gjwur617x1.jpg)
Потоковый ввод
|
Состояние |
good(), … |
good ○ |
|
|
if (поток) |
eof ○ |
if (поток . good()) |
fail ● |
|
bad ○ |
4 |
5 |
1 |
поток |
|
|
|
|
• Символ-ограничитель, |
|
clear() |
• включительно. |
|
• Не обязателен. |
||
|
setstate(ios_base :: failbit)
peek()
ignore(сколько, до)
get()
F
Гарантировано только для одного последнего символа.
unget()
putback(что)
•Пропустить не более.
•«Сколько потребуется» =
=quantum_satis,
(см. sdt.h).
11.09.2014 |
© Кафедра УиИ НИУ «МЭИ» |
17 |
![](/html/2706/141/html_twrYuL0mZi.K4Qn/htmlconvd-gjwur618x1.jpg)
Перемещение в потоке
Для вывода: tellp(), seekp(). |
seekg ( ios_base :: end, 0 ) |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
|
5 |
|
|
|
поток >> ws; |
|
|
|
1 |
|
|||
|
|
|
|
|
|
||
|
|
|
|||||
|
|
|
|
|
|
|
|
поток |
|
|
поток |
|
4 5
1
F
˽
0
C EOF
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
seekg ( ios_base :: beg, 0 ) |
tellg() |
seekg ( ios_base :: cur, 2 ) |
seekg (0) |
|
seekg ( tellg() + 2 ) |
11.09.2014 |
© Кафедра УиИ НИУ «МЭИ» |
18 |