Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Закрытие файла




 

В классах файловых потоков имеется метод close, который опорожняет поток и закрывает закрепленный за потоком файл. Примеры:

fin.close ();

fout.close ();

Предполагается, что деструктор файлового объекта (или его базового класса) автоматически закрывает файл.

Примеры программ работы с файлами.

Пример 1 Табулирование функции. Исходные данные размещаются в файле ish.dan, а результаты будут заноситься в файл rez.dan.

# include < iostream. h >

# include < fstream. h >

# include < math. h >

# include < stdlib. h >

void main ()

{

ifstream fin (“ist. dan”);

if (fin)

{

cout << “не открылся файл ish. dan” <<’\ n ‘;

exit (1);

}

ofstream fout (“rez. dan”);

double x, y, xn, dx, xk;

fin >>xn>>dx>>xk;

fout << “xn=” <<xn<<” dx=” <<dx<<“ xk = “<<xk<<’ \ n ‘;

for (x = xn; x <= xk; x += dx)

{

y = exp (-x);

fout << “ x = “ <<x<< ” y = “<< y << ‘ \ n’;

}

fin. close ();

fout. close ();

}

Пример 2 Постановка задачи.

Описать класс «матрица». Предусмотреть функцию-член для ввода элементов матрицы из выходного файла, дружественную функцию для их сложения и член-функцию для занесения результирующей матрицы в файл результатов. Количество строк и столбцов считать заведомо известными.

# include < iostream. h >

# include < fstream. h >

# include < stdlib. h >

# define N 2

# define M 3

class matr

{

float x [ N ] [ M ];

public:

void vvod (char * S);

void vivod (char * S);

friend matr operator + (matr & a, matr & b);

};

void matr:: vvod (char * S)

{

ifstream ifs (S);

if (ifs)

{

cout << “Не открылся файл” << S << ‘ \ n ‘;

exit (1);

}

for (int i = Ø; i < N; i + +)

for (int j = Ø; j < M; j + +)

ifs >> x [ i ][ j ];

}

void matr:: vivod (char * S)

{

ofstream ofs (S);

for (int i = Ø; i < N; i ++)

for (int j = Ø; j < M; j ++)

ofs <<x [ i ][ j ];

}

matr operator + (matr & a, matr & b)

{

matr z;

for (int i = Ø; i < N; i ++)

for (int j = Ø; j < M; j ++)

z. x [ i ] [ j ] = a. x [ i ] [ j ] = b. x [ i ] [ j ];

return z;

}

void main ()

{

matr v, w, q

v. vvod (“v. dan”);

w. vvod (w. dan”);

q = v + w;

q. vivod (“q. dan”);

}

Матрицы v и w записаны соответственно в файлах v.dan и w.dan. Результирующая матрица q заносится в файл q.dan.

 

24.5 Перегрузка операций сдвига для файлового ввода/вывода

Осуществляется подобно рассмотренному ранее расширению потоков для типов, определяемых пользователем с использованием дружественных функций. Их заглавия имеют вид:

friend ifstream & operator >> (ifstream & ifs, имя класса & имя объекта);

friend ofstream & operator << (ofstream & ofs, имя класса & имя объекта);

 

Пример. Условия задачи такие же, как и в предыдущем примере, но складываемые матрицы находятся в одном файле v hod. dan.

Пусть конкретно находится серия матриц v [ 2 ] [ 3 ] и w [ 2 ] [ 3 ]. Их элементы последовательно записаны в файле v hod. dan. Например, в файле v hod. dan имеются следующие числа:

1 2 3

4 5 6

-1 -2 -3

-4 -5 -6

Первые две строки – элементы матрицы v, а вторые – матрицы w.

# include < iostream. h >

# include < fstream. h >

# include < stdlib.h >

# define N 2

# define M 3

class matr

{

float x [ N ] [ M ];

friend ifstream & operator >> (ifstream & ifs, matr & x);

friend ofstream & operator << (ofstream & ofs, matr & a);

friend matr operator + (matr & a, matr & b);

};

ifstream & operator >> (instream & ifs, matr & x)

{

for (int I = Ø; I < N; I ++)

for (int j = Ø; j < M; j ++)

ifs >>x. x [ I ] [ j ]; / * Допускается совпадение символических имен элементов данных и параметров * /.

return ifs; //Не забывать!

}

ofstream & operator << (ofstream & ofs, matr & a)

{

for (int I = Ø; I < N; I ++)

for (int j = Ø; j < M; j ++)

ofs << a. x [ I ] [ j ];

return ofs;

}

matr operator + (matr & a, matr & b)

{

matr v;

for (int I = Ø; I < N; I ++)

for (int j = Ø; j < M; j ++)

v. x [ I ] [ j ] = a. x [ I ] [ j ] + b. x [ I ] [ j ];

return v;

}

void main ()

{

matr w, v;

ifstream fvh (“v hod. dan”);

fvh >> v >> w; // * Дважды вызывается оператор >>. Первой вводится матрица v, а за ней w */

matr q;

q = v + w; //вызывается оператор + ().

ofstream viv (“q. dan”);

viv << q; //Вывод q в файл q.dan.

//Вызывается оператор << ().

}




Поделиться с друзьями:


Дата добавления: 2015-06-27; Просмотров: 286; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.021 сек.