Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы / ЭТМО / 10_лаб_классы_ушла_в_печать.doc
Скачиваний:
35
Добавлен:
16.04.2013
Размер:
97.79 Кб
Скачать

Форматируемый ввод/вывод. Манипуляторы.

При вводе/выводе данных можно воспользоваться манипуляторами, то есть специальными функциями форматирования, которые могут находиться в теле оператора ввода/вывода. Если в манипуляторе используются параметры, то необходимо подключение заголовочного файла <iomanip.h>.

Для сохранения и восстановления состояния потока используется функция-метод класса потока flags(). Например:

long a;

a=cout.flags(); //для сохранения состояния потока в а

cout.flags(a); //для восстановления состояния потока из а

Таблица 10.1

Манипуляторы ввода/вывода.

Манипулятор

Назначение

Ввод/вывод

dec

Вывод числовых данных в десятичной системе счисления.

Вывод

hex

Вывод числовых данных в шестнадцатеричной системе счисления.

Вывод

oct

Вывод числовых данных в восьмеричной системе счисления.

Вывод

endl

Вывод символа новой строки и флэширование.

Вывод

ends

Вывод нуля (NULL).

Вывод

flush

Флэширование.

Вывод

ws

Пропуск начальных пробелов.

Ввод

resetiosflags(long f)

Сброс флагов, задаваемых в f.

Ввод/вывод

setbase(int основание)

Устанавливает основание системы счисления для вывода данных.

Вывод

setfill(char ch)

Устанавливает символ заполнения ch.

Вывод

setiosflags(long f)

Установка флагов, задаваемых в f.

Вывод

setprecision(int p)

Задает число символов после десятичной точки, равным p.

Вывод

setw(int w)

Задает ширину поля, равной w позиций.

Вывод

Примеры программирования

Пример 10.6. Вывод данных с использованием манипуляторов.

#include <iostream.h>

#include <iomanip.h>

#include <math.h>

int main()

{ double x, y;

cout << "Input x ";

cin >> x;

y = sin(x);

cout << setprecision(3);

cout << setw(7) << x;

cout << setw(7) << y;

return 0;

}

Пример 10.7. Описать и определить класс-список.

Файл list.h содержит описание класса.

#ifndef __LIST_H__

#define __LIST_H__

struct list

{

int inf; // информационное поле

list *next; // указатель на следующий элемент списка

};

class CSpisok

{

list* head; // указатель на начало списка

public:

CSpisok (int);

CSpisok (CSpisok&);

void print ();

~CSpisok();

};

#endif

Файл list.cpp содержит определение функций-элементов.

#include <stdlib.h>

#include <iostream.h>

#include <iomanip.h>

#include "list.h"

CSpisok:: CSpisok(int n) //конструктор инициализирует список из n элементов по принципу "очередь"

{

head = NULL;

list *p,*pn;

for (int i = 0; i<n; i++)

{

p = new list;

p>inf = random(100)-50;

p>next = NULL;

if (head == NULL) head = p;

else pn>next = p;

pn = p;

}

}

CSpisok:: CSpisok (CSpisok& s)

//конструктор копии класса CSpisok

{

head = NULL;

list *sp = s.head, *p, *pn;

while (sp)

` {

p = new list;

p>inf = sp>inf;

p>next = NULL;

if (head == NULL) head = p;

else pn>next = p;

pn = p;

sp = sp>next;

}

}

CSpisok::~ CSpisok()

//деструктор - уничтожает класс список из памяти

{

list *p;

while (head)

{

p = head;

head = head>next;

delete p;

}

}

void CSpisok::print()

//функция-элемент печати содержимого списка

{

list *p = head;

while (p)

{

cout<<setw(5)<<p>inf;

p = p>next;

}

cout<<endl;

}

Файл main.cpp содержит основную функцию.

#include <iostream.h>

#include <iomanip.h>

#include “list.h”

void main (void)

{

spisok s1(10), // создание списка из 10 элементов

s2(s1), // s2- копия списка s1

s3(15); // создание списка из 15 элементов

s1.print(); // печать s1

s2.print(); // печать s2

s3.print(); // печать s3

}

В проект включены файлы: main.cpp и list.cpp.

Результаты выполнения программы:

-49 -50 -17 -47 -15 -29 3 -31 20 44

-49 -50 -17 -47 -15 -29 3 -31 20 44

-23 -6 -40 19 6 -46 -34 31 18 26 32 45 -29 -8 45

Соседние файлы в папке ЭТМО