Язык С++ для системного программирования. Имена-этикетки. Класс как область действия, страница 20

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, имя класса & имя объекта);

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

Пусть конкретно находится серия матриц [ 2 ][ 3 ] и w [ 2 ][ 3 ]. Их элементы последовательно записаны в файле vhod. dan.Например, в файле vhod. 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)

{