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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
bumbaram
47 / 47 / 1
Регистрация: 13.02.2012
Сообщений: 176
#1

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

28.02.2012, 09:13. Просмотров 822. Ответов 8
Метки нет (Все метки)

Добрый день.
Я хочу создать объект для работы с файлом. На сколько корректно открывать его в конструкторе?
Если файл не откроется, объект все равно создастся?
Например
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++
class A { template <class Type> A(Type Object) { } friend class B; };

О конструкторе копирования - C++
Доброго времени суток всем присутствующим. Интересует маленький вопрос. В 15-й строке происходит прямое обращение к полю входного объекта...

Двоеточие в конструкторе - C++
class A { public: A(): }; Что означает двоеточие и что туда надо писать?

Исключения в конструкторе - C++
Допустим, при конструировании объекта необходимо выделить память для двух указателей-членов и правильно обработать все ошибки исключений....

Исключения в конструкторе - C++
Приведите пожалуйста пример, где было бы видно как писать конструктор в классе (инициализация полями класса) используя исключения и нужны...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
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
Эксперт С++
5771 / 3420 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
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;
}
Байт
Эксперт C
15992 / 10260 / 1537
Регистрация: 24.12.2010
Сообщений: 19,347
28.02.2012, 10:48 #4
Вот похожий топик
Может ли конструктор формы возвращать NULL
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
28.02.2012, 11:27 #5
Nameless One, субъективно
мне кажется так делать не стоит, ибо поведение оператора приведения типов имеет свои подводные камни и использовать в тривиальных случаях его не стоит
Nameless One
Эксперт С++
5771 / 3420 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
28.02.2012, 11:35 #6
Цитата Сообщение от alex_x_x Посмотреть сообщение
Nameless One, субъективно
мне кажется так делать не стоит, ибо поведение оператора приведения типов имеет свои подводные камни и использовать в тривиальных случаях его не стоит
зато тогда можно будет писать "if(f) ..."
хотя да, приводить к bool не надо, лучше приводить к void*, как сделано тут
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
Эксперт С++
5771 / 3420 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
28.02.2012, 15:48 #8
можно
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()
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.02.2012, 20:17
Привет! Вот еще темы с ответами:

Explicit в конструкторе - C++
Ключевое слово explicit перед конструктором служит лишь для того чтобы не запутаться и передавать аргумент в конструктор явно? Например: ...

Ошибка в конструкторе - C++
Почему пишет что отсутствуют нужные параметры конструктора? class Aircraft { public: Aircraft(int _maxSpeed, int _maxHeight) { ...

Ошибка в конструкторе - C++
Написал задачу, но она не работает. Условие: Разработать класс Элементарная частица с элементами Название, Группа, Заряд, Масса покоя....

Исключение в конструкторе - C++
#include &lt;iostream&gt; class Vect { public: Vect(char); ~Vect() { try { delete p; } catch (...) { std::cerr &lt;&lt; &quot;Cannot...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru