Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лафоре Р. - Объектно-ориентированное программир...doc
Скачиваний:
150
Добавлен:
01.04.2025
Размер:
41 Мб
Скачать
☆

Глава 12 Ответы на вопросы

  1. б, в.

  2. ios.

  3. Правильный ответ: ifstream, ofstream и fstream

  4. Правильный ответ: ofstream salefile("SALES.JUN ");

  5. Истинно.

  6. Правильный ответ: if(foobar)

  7. г.

  8. Правильный ответ:

fileOut.put(ch);(где ch - символ)

  1. в.

  2. Правильный ответ:

  3. ifile.read((char*)buff.sizeof(buff)); а, б, r.

  4. Расположение байта, который будет читаться или записываться следующим.

///////////////////////////////////////////////////////////

int main()

{

const int ASIZE = 10; // размер массива

Array arr1(ASIZE); // создать массив

for(int j = 0; j < ASIZE; j++) // заполнить его

arr1[j] = j*j; // квадратами чисел

Array arr2(arr1); // использовать конструктор

// копирования

cout << "\narr2:";

for(j = 0; j < ASIZE; j++)// проверка работы с arr2

cout << arr2[j] << " ";

Array arr3, arr4; // создать два пустых массива

arr4 = arr3 = arr1; // использовать операцию

// присваивания

cout << "\narr3:";

for(j = 0; j < ASIZE; j++)// проверка нормальной работы с

// arr3

cout << arr3[j] << " ";

cout << "\narr4:";

for(j = 0; j < ASIZE; j++)// проверка работы с arr4

cout << arr4[j] << " ";

cout << endl;

return 0;

}

      1. Ложно; файловый указатель может быть синонимом текущей позиции.

      2. Правильный ответ: f1.seekg(-13, ios::cur);

      3. б.

      4. б, в.

      5. skipws приводит к тому, что символы-разделители игнорируются при вво- де, поэтому cin не воспринимает окончание ввода.

      6. Правильный ответ:

int main(int argc, char *argv[])

      1. PRN, LPT1.

      2. Правильный ответ: istream&operator>>(istream&.Sample&)

Решения упражнений

1. Верное решение:

// ex12_1.cpp

// записывает массив

#include <iostream>

#include <fstream> // для файловых потоков

using namespace std;

///////////////////////////////////////////////////////////

class Distance // класс английских расстояний

{

private:

int feet;

float inches;

public:

Distance(): feet(0), inches(0.0)// конструктор без аргументов

{ }

// конструктор с двумя аргументами

Distance(int ft, float in):feet(ft), inches(in)

{ }

void getdist() // получить расстояние от пользователя

{

cout << "\nВведите футы:";cin >> feet;

cout << "Введите дюймы:";cin >> inches;

}

void showdist() // вывести расстояние

{ cout << feet << "\'-" << inches << '\"'; }

};

///////////////////////////////////////////////////////////

int main()

{

char ch;

Distance dist; // создать объект Distance

fstream file; // создать входной/выходной файл

// открыть его для добавления

file.open("DIST.DAT ", ios::binary | ios::app | ios::out | ios::in);

do // данные от пользователя в файл

{

cout << "\nРасстояние ";

dist.getdist();// получить расстояние

// записать в файл

file.write((char*)&dist, sizeof(dist));

cout << "Продолжать (y/n)?";

cin >> ch;

}

while(ch == 'y'); // выйти по 'n'

file.seekg(0); // установить указатель на начало

// файла

// прочитать первое значение

file.read((char*)&dist, sizeof(dist));

int count = 0;

while(!file.eof())// выход по EOF

{

cout << "\nРасстояние " << ++count << ":";// вывести

// расстояние

dist.showdist();

file.read((char*)&dist, sizeof(dist)); // считать еще

// расстояние

}

cout << endl;

return 0;

}

        1. Верное решение:

// ex12_2.cpp

// имитация команды COPY

#include <fstream> // для файловых функций

#include <iostream>

using namespace std;

#include <process.h> // для exit()

int main(int argc, char*argv[])

{

if(argc != 3)

{ cerr << "\nФормат:ocopy srcfile destfile ";exit(-1); }

char ch; // символ для считывания

ifstream infile; // создать входной файл

infile.open(argv[1]); // открыть файл

if(!infile) // проверка на ошибки

{ cerr << "\nНевозможно открытие " << argv[1];exit(-1); }

ofstream outfile; // создать выходной файл

outfile.open(argv[2]); // открыть его

if(!outfile) // проверка на ошибки

{ cerr << "\nНевозможно открытие " << argv[2];exit(-1); }

while(infile) // до EOF

{

infile.get(ch); // считать символ

outfile.put(ch); // записать символ

}

return 0;

}

        1. Верное решение:

// ex12_3.cpp

// выводит размер файла

#include <fstream> // для файловых функций