 
        
        - •Лабораторная работа №10
- •Теоретические сведения
- •Определение класса
- •Управление доступом
- •Элементы класса
- •Данные-элементы
- •Элементы функции
- •Доступ к данным-элементам
- •Вызов функций-элементов
- •Указатель this
- •Конструктор
- •Деструктор
- •Форматируемый ввод/вывод. Манипуляторы.
- •Примеры программирования
- •Контрольные вопросы.
- •Лабораторные задания
- •Варианты заданий
Форматируемый ввод/вывод. Манипуляторы.
При вводе/выводе данных можно воспользоваться манипуляторами, то есть специальными функциями форматирования, которые могут находиться в теле оператора ввода/вывода. Если в манипуляторе используются параметры, то необходимо подключение заголовочного файла <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
