Форум программистов, компьютерный форум CyberForum.ru

окрытие файла в конструкторе - C++

Восстановить пароль Регистрация
 
bumbaram
 Аватар для bumbaram
47 / 47 / 1
Регистрация: 13.02.2012
Сообщений: 176
28.02.2012, 09:13     окрытие файла в конструкторе #1
Добрый день.
Я хочу создать объект для работы с файлом. На сколько корректно открывать его в конструкторе?
Если файл не откроется, объект все равно создастся?
Например
C++
1
2
file_class file("file_name") ;
file.getMethod();
Мне нужно сделать так, что если файл не открывается, программа например завершалась. Или способ как проверить полноценный ли объект перед тем как вызывать getMethod()
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.02.2012, 09:13     окрытие файла в конструкторе
Посмотрите здесь:

C++ ощибка в конструкторе
C++ Инициализация массива в конструкторе
исключения в конструкторе C++
C++ Двоеточие в конструкторе
Шаблон в конструкторе C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
28.02.2012, 09:26     окрытие файла в конструкторе #2
Цитата Сообщение от bumbaram Посмотреть сообщение
Если файл не откроется, объект все равно создастся?
конечно
можно конечно исключение из конструктора кинуть, но это не самый тривиальный случай
лучше добавить метод bool isOpened(), или перегрузить bool operator!()
по примеру std::fstream:
C++
1
2
3
4
5
std::fstream f ("/home/123/1.txt");
if (!f) {
  std::cout << "error open file" << std::endl;
  return false;
}
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
28.02.2012, 09:51     окрытие файла в конструкторе #3
Цитата Сообщение от alex_x_x Посмотреть сообщение
перегрузить bool operator!()
лучше operator bool ():
C++
1
2
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
#include <iostream>
 
class Klass
{
public:
    Klass(bool b = false)
    : _b(b)
    {
    }
    
    operator bool () const
    {
    return _b;
    }
 
private:
    bool _b;
};
 
int main()
{
    Klass k;
 
    if(!k)
    std::cout << "Failure" << std::endl;
    else
    std::cout << "Success" << std::endl;
}
Байт
 Аватар для Байт
14004 / 8835 / 1234
Регистрация: 24.12.2010
Сообщений: 16,014
28.02.2012, 10:48     окрытие файла в конструкторе #4
Вот похожий топик
Может ли конструктор формы возвращать NULL
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
28.02.2012, 11:27     окрытие файла в конструкторе #5
Nameless One, субъективно
мне кажется так делать не стоит, ибо поведение оператора приведения типов имеет свои подводные камни и использовать в тривиальных случаях его не стоит
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
28.02.2012, 11:35     окрытие файла в конструкторе #6
Цитата Сообщение от alex_x_x Посмотреть сообщение
Nameless One, субъективно
мне кажется так делать не стоит, ибо поведение оператора приведения типов имеет свои подводные камни и использовать в тривиальных случаях его не стоит
зато тогда можно будет писать "if(f) ..."
хотя да, приводить к bool не надо, лучше приводить к void*, как сделано тут
bumbaram
 Аватар для bumbaram
47 / 47 / 1
Регистрация: 13.02.2012
Сообщений: 176
28.02.2012, 15:48  [ТС]     окрытие файла в конструкторе #7
Всем спасибо. Решил просто сделать метод isOpen().
По этому еще один вопрос. Если я хочу открыть файл потоком ifstream. Как мне проверить открыт он или нет? Например так можно?
C++
1
2
3
4
ifstream file(file_name)
if (!file)
{ // ошибка открытия фала}
else ...
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
28.02.2012, 15:48     окрытие файла в конструкторе #8
можно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.02.2012, 20:17     окрытие файла в конструкторе
Еще ссылки по теме:

C++ О конструкторе копирования
C++ Указатель this в конструкторе копирования
C++ Инициализация *char в конструкторе

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
bumbaram
 Аватар для bumbaram
47 / 47 / 1
Регистрация: 13.02.2012
Сообщений: 176
28.02.2012, 20:17  [ТС]     окрытие файла в конструкторе #9
Опять проблема. Я открываю файл, мне он нужен только для чтения
C++
1
ifstream inFile(char *file_name);
затем проверяю, открылся он или нет. Если нет у меня должна быть ошибка.
C++
1
2
3
if (!inFile)
        return false;
    return true;
Эту проверку он проходит в любом случае. А мне нужно понять что файла не существует.

Добавлено через 10 минут
вроде разобрался. Использовал is_open()
Yandex
Объявления
28.02.2012, 20:17     окрытие файла в конструкторе
Ответ Создать тему
Опции темы

Текущее время: 00:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru