Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
13_классы_14.doc
Скачиваний:
20
Добавлен:
10.04.2019
Размер:
152.58 Кб
Скачать

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

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

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

long a;

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

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

Таблица 13.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 позиций.

Вывод

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

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

#include "stdafx.h"

#include <iostream>

#include <iomanip>

#include <math.h>

#include <conio.h>

using namespace std;

void showflags();

int _tmain(int argc, _TCHAR* argv[])

{ double x, y;

cout << "Input x ";

cin >> x;

y = sin(x);

cout << setprecision(3);

cout << setw(7) << x;

cout << setw(7) << y;

_getch();

return 0;

}

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

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

#include "stdafx.h"

#ifndef __LIST_H__

#define __LIST_H__

struct list

{

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

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

};

class CSpisok

{

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

public:

CSpisok (int);

CSpisok (const CSpisok&);

void print ();

~CSpisok();

};

#endif

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

#include "stdafx.h"

#include <stdlib.h>

#include <iostream>

#include <iomanip>

#include "list.h"

using namespace std;

CSpisok:: CSpisok(int n)

//конструктор инициализирует список из n элементов по принципу

// "очередь"

{ head = NULL;

list *p,*pn;

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

{

p = new list;

p->inf = rand()%100-50;

p->next = NULL;

if (head == NULL) head = p;

else pn->next = p;

pn = p;

}

}

CSpisok:: CSpisok (const 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 "stdafx.h"

#include <iostream>

#include <iomanip>

#include "list.h"

#include <conio.h>

#include <time.h>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{ srand(unsigned (time(NULL)));

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

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

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

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

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

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

_getch();

return 0;

}

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