Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекция № 3 (слайды)

.pdf
Скачиваний:
9
Добавлен:
31.03.2015
Размер:
407.93 Кб
Скачать

Перечисления

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

Приведение типов (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

Файловый ввод и вывод

 

Ничего или 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

Двоичные файлы

Хранят данные так, как они представлены в памяти, — в виде набора байт.

• Компактная запись рисунков и т. п.

 

 

 

 

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

Форматный вывод

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

Потоковый ввод

 

Состояние

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

Перемещение в потоке

Для вывода: 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