ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В 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 имеют возмож-
ность копирования своих объектов.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48