ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 12) онлайн

Классы iostream и _withassign

Класс iostream является порожденным по отношению к istream и ostream. Его

единственное предназначение — выступать в качестве базового класса для дру-

гих специфических классов вида iostream_withassign. У него нет собственных ме-

тодов, кроме конструктора и деструктора. Его порожденные классы могут осу-

ществлять как ввод, так и вывод данных.

Существуют три класса вида _withassign:

♦             istream_withassign — наследник istream;

♦             ostream_withassign — наследник ostream;

♦             iostream_withassign — наследник iostream.

Эти классы очень похожи на своих предков. Разница лишь в том, что в них,

в отличие от породивших их классов, имеются перегружаемые операции при-

сваивания, благодаря чему их объекты могут быть скопированы.

Для чего нужны потоковые классы с возможностью копирования и без тако-

вой? Вообще-то, это не самая лучшая идея — копировать объекты потоковых

классов. Причина заключается в том, что каждый такой объект ассоциирован

с конкретным объектом streambuf, включающим в себя область памяти для хра-

нения данных объекта. Если вместе с потоковым объектом копировать объект

streambuf, возникнет некая неразбериха. Тем не менее бывают случаи, когда важ-

но иметь возможность копировать потоки.

Соответственно, классы istream, ostream и iostream созданы так, что их объек-

ты нельзя копировать — операторы присваивания и конструкторы копирования

сделаны скрытыми. А их наследники с хвостиком _withassign имеют возмож-

ность копирования своих объектов.

 

9