Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5fan_ru_Obektno-orientirovannoe_programmirovan...doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
351.74 Кб
Скачать

If(!fout) {

cout << "Выходной файл открыть невозможно\n";

return 1;

}

char ch;

unsigned count = 0;

// сброс флага skipws

fin.unsetf(ios::skipws); // не пропускать пробелы

// выполнять, пока не будет достигнут конец файла

while(!fin.eof()) {

fin >> ch;

fout << ch;

count++;

}

cout << "Число скопированных байтов: " << count << '\n';

return 0;

}

Примечание. Когда установлен флаг skipws, при выполнении ввода в поток, начальные невидимые символы (пробелы, табуляции и символы новой строки) отбрасываются. Когда флаг skipws сброшен, невидимые символы не отбрасываются. Результат, выводимый этой программой, может отличаться от того, который выводится операционной системой, поскольку некоторые символы могут интерпретироваться иначе. Когда считывается последовательность возврат каретки/перевод строки, она преобразуется в символ новой строки. При выводе новая строка считается одним символом, но снова преобразуется в последовательность возврат каретки/перевод строки.

Контрольные вопросы

1.Какие классы поддерживают ввод – вывод в С++?

2.Назовите потоки, открываемые для исполняемой программы.

3.Какова схема иерархии классов ввода – вывода?

4. Назовите способы организации форматированного ввода – вывода.

5.Какой флаг следует использовать для выравнивания поля вывода по левому краю?

6. С помощью каких функций можно определить ширину поля вывода, точность и символ заполнения?

7. Какие классы поддерживают файловый ввод-вывод?

8. Какие типы файловых потоков существую и С++?

9 Как выполняется открытие файла? Перечислите режимы открытия файла.

7. Виртуальные функции

К механизму виртуальных функций (virtual function) обращаются в тех случаях, когда в базовый класс необходимо поместить функцию, которая должна по-разному выполняться в производных классах. Виртуальные функции важны потому, что они используются для поддержки динамического полиморфизма. В С++ такое свойство ООП, как полиморфизм, поддерживается двумя способами:

  • на этапе компиляции - посредством перегрузки операций и функций;

  • во время выполнения программы – посредством виртуальных функций.

Виртуальные функции позволяют производным классам определить разные версии функций базового класса.

Класс, содержащий одну или несколько производных функций, называется полиморфным классом.

7.1 Задача, приводящая к виртуальным функциям

Рассмотрим следующую задачу.

Пусть имеется базовый класс Graphics Object, описывающий произвольную фигуру на экране без конкретизации ее вида:

class Graphics Object {

// элементы – данные класса

……………

public:

// методы класса, необходимые для работы с любым графическим объектом

void Build(); // построить

void Display(); // показать на экране

// другие методы

…………..

};

Пусть производный класс, созданный для работы с конкретным объектом – окружностью имеет функции с такими же именами, такого же типа и с таким же списком параметров:

class Circle: public Graphics Object {

// элементы – данные класса

……………

public:

// методы класса, необходимые для работы с окружностью

void Build(); // построить окружность

void Display(); // показать на экране

// другие методы

…………..

};

Создадим объект производного класса с именем A;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]