Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978

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

30.01.2012, 22:23. Показов 3943. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru