В классах ifstream, ofstream, fstream определены конструкторы, позволяющие по-иному выполнять создание и открытие файлов. Типы конструкторов для потоков разных классов очень похожи:
имя_класса(); создает поток, не присоединяя его ни к какому файлу;
имя_класса(int fd); создает поток и присоединяет его к уже открытому файлу, дескриптор которого используется в качестве параметра fd;
имя_класса(int fd, char *buf, int); создает поток, присоединяя его к уже открытому файлу с дескриптором fd, и использует явно заданный буфер (параметр buf);
имя_класса(char *FileName, int mode, int = ...); создает поток, присоединяет его к файлу с заданным именем FileName, а при необходимости предварительно создает файл с таким именем.
Работая со средствами библиотечных классов ввода-вывода, чаще всего употребляют конструктор без параметров и конструктор, в котором явно задано имя файла. Примеры обращений к конструкторам без параметров:
ifstream fi; // Создает входной файловый поток fi.
оstream fo; // Создает выходной файловый поток fo.
fstream ff; // Создает файловый поток ввода-вывода ff.
После выполнения каждого из этих конструкторов файловый поток можно присоединить к конкретному файлу, используя уже упомянутую компонентную функцию open():
void open(char *FileName, int режим, int защита);