Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.89/19: Рейтинг темы: голосов - 19, средняя оценка - 4.89
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978

Может ли конструктор формы возвращать NULL

30.01.2012, 22:23. Показов 3939. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Это нужно вот зачем.
Создаю форму, которая должна работать с файлом. А файла нет. Существование форму бессмысленно.
C++
1
2
3
4
5
6
7
8
9
10
TForm2::Tform2(... char *Name)
{ FILE *f = fopen(Name, "r");
  if (f==NULL) {
     ShowMessage("Нет файла");
     delete this;  //  ???
     this = NULL; // ????
     return NULL;  //   ????
  }
....
}
Использование
C++
1
2
3
  TForm2 *F2 = new TForm2(..."file.txt");
  if (F2==NULL) return;
  else F2->Show();
Смущает то, что конструктор как бы ничего не должен возвращать...
Можно, конечно, использовать extern флаг. Но это некрасиво как-то
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.01.2012, 22:23
Ответы с готовыми решениями:

Почему CreateWindow может возвращать NULL?
Решил разобраться как устроено управление окнами на уровне API. Посмотрел стартовый пример из Visual Studio, разобрался в процессе...

По каким причинам file_get_contents может возвращать null при верном url?
Для некоторых страниц file_get_contents не работает, возвращая null, хотя url верный. Тот же самый запрос с тестового сервера на локальном...

Зачем возвращать конструктор копирование?
Добрый день. Первый вопрос в заголовке темы. Второй - где это можно применить. Спасибо. #include <iostream> class MyBase ...

24
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
31.01.2012, 16:11  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от rangerx Посмотреть сообщение
тут мне не совсем понятно, какое отношение некий файл имеет непосредственно к GUI
А вы считаете, что котлеты (графический интерфейс) - отдельно, а мухи (собственно манипуляции с данными) - отдельно?
и почему его открытие происходит в конструкторе формы)
Да вот так мне захотелось, показалось логичным и соответствующим, и повторяю, в процедурном программировании это не составило бы ровно никакого труда и проходит без загвоздок. А в ООП то, что конструктор - это отдельный зверь со своим норовом, создало некоторые проблемы и заставило призадуматься.
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
31.01.2012, 16:44
Цитата Сообщение от Байт Посмотреть сообщение
А вы считаете, что котлеты (графический интерфейс) - отдельно, а мухи (собственно манипуляции с данными) - отдельно?
Но такой подход завязан на знании паттернов, поэтому взять и сразу начать писать таким образом вряд ли получится.
0
 Аватар для __bool
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
31.01.2012, 17:05
Цитата Сообщение от vxg Посмотреть сообщение
ну или функцию вызываемую перед созданием и проверяющую допустимость создания
По-моему самый простой, верный и удобный вариант..

Вместо конструктора везде вызывайте функцию, которая, проверив существования файла уже вызовет конструктор.
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
31.01.2012, 17:51
Цитата Сообщение от __bool Посмотреть сообщение
Вместо конструктора везде вызывайте функцию, которая, проверив существования файла уже вызовет конструктор.
Святое дело. Только внешняя функция, глобально определенная и с доступом к ресурсам класса напрямую...
Байт, только не смейтесь, пока меня отсюда не вышибли - еще раз по-хулиганю:
Что если инициализацию, члена требующего файл, сделать в конструкторе в 2 этапа:
1. Инициализируем указатель на файл дискриптором существующего файла (создаваемого программой на старте), вроде Applicftion::StartupPath+"ti_suda_ne_hod i_ti_tuda_hodi";
Файл существует - указатель создастся.
2. На втором этапе пытаемся присвоить указателю указатель на файл который реально нужен (и это может не получиться) - тут сооружаем try{} catch{} прямо в функции 2-й ступени инициализации?
Всегда имеем экземпляр (плохо от этого хотели уйти).
У него можно спросить Ты хто, на что указывает твое поле? (это хорошо вроде).
Тут можно и файл создать и вызвать функцию-метод для ремонту...
Теперь если где-то нужен экземпляр хуч-какой - для доступа к методу или еще как - можно сгенерить
1
Day
 Аватар для Day
1180 / 990 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
31.01.2012, 18:06
С интересом слежу за дискуссией.
И обнаглел, попробовал в конструкторе
C++
1
2
 delete this;
 this = NULL;
Как и следовало ожидать, ничего не получилось.
Первую строчку компилятор молча съедает.
А вторую не пропускает никак. Ошибка, говорит.
Ну что ж, отрицательный результат - тоже результат
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.01.2012, 18:06

После пары часов работы popen() начинает возвращать NULL
День добрый. Программирую демона, который запускает некоторые процессы. Все бы ничего, но после пары часов работы popen() начинает...

Что может возвращать выражение в С++?
В стандарте написано, что "Выражение может возвращать значение в качестве результата и может вызывать побочные эффекты." ...

Может ли функция возвращать два значения?
Есть некоторая функция F. У неё входные параметры - t, x. Выходные: xp, xp, где xp:=t*x; xp:=t+x; В дальнейшем xp и xp будут...

Функция не может возвращать Userdefinedtype / список?
Не получилось, почему-то... подскажите

Может ли функция возвращать значения двух переменных?
Заполнить матрицу n размерности по схеме, https://www.cyberforum.ru/attachment.php?attachmentid=508685&d=1427895759 ...


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru