CyberForum.ru - Форум программистов и сисадминов
Вернуться   Форум программистов и сисадминов CyberForum.ru > Форум программистов > Форум C++ > Форум C++ Builder

Ответ Создать новую тему
 
Старый 30.01.2012, 21:23   #1
Байт
Форумчанин
 
Аватар для Байт
 
Регистрация: 24.12.2010
Адрес: Москва
Сообщений: 2,241
Репутация: 2030 (1589)
По умолчанию Может ли конструктор формы возвращать NULL

Это нужно вот зачем.
Создаю форму, которая должна работать с файлом. А файла нет. Существование форму бессмысленно.
Код C++
1
2
3
4
5
6
7
8
9
10
11
12
 
TForm2::Tform2(... char *Name)
{ FILE *f = fopen(Name, "r");
  if (f==NULL) {
     ShowMessage("Нет файла");
     delete this;  //  ???
     this = NULL; // ????
     return NULL;  //   ????
  }
....
}
 
Использование
Код C++
1
2
3
4
5
 
  TForm2 *F2 = new TForm2(..."file.txt");
  if (F2==NULL) return;
  else F2->Show();
 
Смущает то, что конструктор как бы ничего не должен возвращать...
Можно, конечно, использовать extern флаг. Но это некрасиво как-то
Байт вне форума
Другие темы раздела
C++ Builder Проверка наличия CD привода
В "SYSTEM\\CurrentControlSet\\Services\\Cdrom\\Enum" храниться информация только о том, какие CD приводы подключались к компьютеру. Функция mciSendString("capability cdaudio can play wait", NULL, 0, F->Handle) всё время выдаёт один и тот же результат, вне зависимости от того, подключён ли CD-ROM..... Проверка наличия CD привода
Создание приложений для контроллеров Siemens C++ Builder
Подскажите пожалуйста, книги/примеры/ссылки, где хорошо описывается разработка прикладных приложений для контроллеров Siemens. Заранее, благодарен. Создание приложений для контроллеров Siemens
Старый 31.01.2012, 15:11  [ТС]   #21
Байт
Форумчанин
 
Аватар для Байт
 
Регистрация: 24.12.2010
Адрес: Москва
Сообщений: 2,241
Репутация: 2030 (1589)
По умолчанию Re: Может ли конструктор формы возвращать NULL

Цитата Сообщение от rangerx Посмотреть сообщение
тут мне не совсем понятно, какое отношение некий файл имеет непосредственно к GUI
А вы считаете, что котлеты (графический интерфейс) - отдельно, а мухи (собственно манипуляции с данными) - отдельно?
и почему его открытие происходит в конструкторе формы)
Да вот так мне захотелось, показалось логичным и соответствующим, и повторяю, в процедурном программировании это не составило бы ровно никакого труда и проходит без загвоздок. А в ООП то, что конструктор - это отдельный зверь со своим норовом, создало некоторые проблемы и заставило призадуматься.
Байт вне форума
Старый 31.01.2012, 15:44   #22
rangerx
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 2,046
Репутация: 1300 (984)
По умолчанию Re: Может ли конструктор формы возвращать NULL

Цитата Сообщение от Байт Посмотреть сообщение
А вы считаете, что котлеты (графический интерфейс) - отдельно, а мухи (собственно манипуляции с данными) - отдельно?
Но такой подход завязан на знании паттернов, поэтому взять и сразу начать писать таким образом вряд ли получится.
rangerx вне форума
Старый 31.01.2012, 16:05   #23
__bool
Форумчанин
 
Аватар для __bool
 
Регистрация: 13.06.2010
Адрес: Екб
Сообщений: 725
Репутация: 270 (211)
По умолчанию Re: Может ли конструктор формы возвращать NULL

Цитата Сообщение от vxg Посмотреть сообщение
ну или функцию вызываемую перед созданием и проверяющую допустимость создания
По-моему самый простой, верный и удобный вариант..

Вместо конструктора везде вызывайте функцию, которая, проверив существования файла уже вызовет конструктор.
__bool вне форума
Старый 31.01.2012, 16:51   #24
IGPIGP
Форумчанин
 
Регистрация: 04.12.2011
Адрес: Одесса
Сообщений: 790
Репутация: 765 (358)
По умолчанию Re: Может ли конструктор формы возвращать NULL

Цитата Сообщение от __bool Посмотреть сообщение
Вместо конструктора везде вызывайте функцию, которая, проверив существования файла уже вызовет конструктор.
Святое дело. Только внешняя функция, глобально определенная и с доступом к ресурсам класса напрямую...
Байт, только не смейтесь, пока меня отсюда не вышибли - еще раз по-хулиганю:
Что если инициализацию, члена требующего файл, сделать в конструкторе в 2 этапа:
1. Инициализируем указатель на файл дискриптором существующего файла (создаваемого программой на старте), вроде Applicftion::StartupPath+"ti_suda_ne_hodi_ti_tuda_hodi";
Файл существует - указатель создастся.
2. На втором этапе пытаемся присвоить указателю указатель на файл который реально нужен (и это может не получиться) - тут сооружаем try{} catch{} прямо в функции 2-й ступени инициализации?
Всегда имеем экземпляр (плохо от этого хотели уйти).
У него можно спросить Ты хто, на что указывает твое поле? (это хорошо вроде).
Тут можно и файл создать и вызвать функцию-метод для ремонту...
Теперь если где-то нужен экземпляр хуч-какой - для доступа к методу или еще как - можно сгенерить
IGPIGP на форуме
После регистрации реклама в сообщениях будет скрыта
Старый 31.01.2012, 17:06   #25
Day
Форумчанин
 
Аватар для Day
 
Регистрация: 29.10.2009
Адрес: Москва
Сообщений: 1,231
Репутация: 685 (628)
По умолчанию Re: Может ли конструктор формы возвращать NULL

С интересом слежу за дискуссией.
И обнаглел, попробовал в конструкторе
Код C++
1
2
3
4
 
 delete this;
 this = NULL;
 
Как и следовало ожидать, ничего не получилось.
Первую строчку компилятор молча съедает.
А вторую не пропускает никак. Ошибка, говорит.
Ну что ж, отрицательный результат - тоже результат
Day вне форума
Ответ Создать новую тему

Похожие темы
Тема Автор
С++ для начинающих неправильно работает конструктор копирования list, кто-нибудь может объяснить почему?
#include <windows.h> #include <stdio.h> #include <list> #include <iterator> #include <iostream> using namespace std; list <int> f () { list <int> lisc;
kravam
Turbo Pascal Может ли функция возвращать два значения?
Есть некоторая функция F. У неё входные параметры - t, x. Выходные: xp, xp, где xp:=t*x; xp:=t+x; В дальнейшем xp и xp будут используются в головной программе. Как сделать, чтобы функция вернула и значение xp, и значение xp? Не хочу разбивать функцию на две.
Dimon 128500
Visual C++ Почему CreateWindow может возвращать NULL?
Решил разобраться как устроено управление окнами на уровне API. Посмотрел стартовый пример из Visual Studio, разобрался в процессе создания. Потом создал совсем пустой проэкт, и написал аналогичную програмку, которая только создает окно и обрабатывает кое-какие сообщения. Все ключи компилятора...
Alkersan
MySQL Блин, для ЧЕГО НУЖНА Функция CREATE TABLE invoice( inv_id INT AUTO_INCREMENT NOT NULL , usr_id INT NOT NULL , prod_id INT NOT NULL , quantity INT NOT
Погуглив, так и не смог толком понять. Есть тут ГУРУ по mysql Которые могут на пальцах или на примере показать для чего она нужна. Спасибо!!
server2010
С++ для начинающих При каких условиях функция SQLGetInfo может возвращать пустое имя?
При каких условиях функция SQLGetInfo может возвращать пустое имя SQL-сервера, при этом статус завершения SQL_SUCCESS, соединение с сервером установлено успешно и SQL-сервер установлен на удаленной машине.
johnr
Опции темы

Текущее время: 00:34. Часовой пояс GMT +4.

Компьютерный форум программистов и сисадминов
Powered by vBulletin® Version 3.8.7 PL2
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Рейтинг@Mail.ru Яндекс.Метрика