Тут размещают свои топики новички в С/С++.

Тема в разделе "LANGS.C", создана пользователем nitrotoluol, 4 мар 2007.

  1. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    Booster
    Допуская нецелостные состояния объекта, вы сильно усложняете его интерфейс, более того, утрачиваете возможность полностью описать этот интерфейс средствами языка. Это ухудшает архитектуру и становится источником ошибок.
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    green
    Насколько сильно? Я бы не сказал, что неинициализированное состояние это не целостное состояние.

    А по-моему даже улучшает, делает её гибче. Ну а что по поводу ошибок, у вас же не будет например всегда описатель файла проинициализирован, это ведь абсурд, он может вполне например по-началу содержать 0.
     
  3. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    Booster
    Я имею в виду, что у вас интерфейс объекта будет работать по разному в зависимости от состояния объекта. Например, в некоторых состояниях часть методов может не работать (возвращать ошибку, выбрасывать исключение). В этом состоит усложнение интерфейса.

    Это не касается случая выделения ресурсов по мере необходимости, скажем открытие файла может быть отложено до первой операции с объектом, требующей доступа к файлу. В этих случаях на уровне интерфейса всё прозрачно.
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    green
    А если имя файла сразу не известно?
    Конечно из этого можно выкрутиться с помощью указателей, но это несколько сомнительный подход.

    А разве метод fstream::open не прозрачен?
     
  5. RedLord

    RedLord Member

    Публикаций:
    0
    Регистрация:
    23 июн 2005
    Сообщения:
    183
    Адрес:
    Ukraine
    Booster
    :)
    как правильно заметил green:
    тогда какая разница - конструктор бросит исключение или мы вывалимся в GPF сами по себе?
    объект не может быть
    либо это неудачное словосочетание в данном контексте, либо весьма опасный взгляд на
    сущность созданного объекта
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    RedLord
    Почему это? Описатель файла разве не объект? Он не может быть не валидным?

    Не путайте мух с котлетами. Исключение в конструкторе не связано с разделением фаз.

    Нормальное это словосочетание. Ошибки подобного рода отлавливаются в дебаге. Вы же не будете использовать указатель без его инициализации, так в чём здесь тогда сложности?
     
  7. jaga

    jaga Дмитрий

    Публикаций:
    0
    Регистрация:
    25 окт 2008
    Сообщения:
    33
    Адрес:
    Пермская обл.
    Всем привет!
    Решил выучить С++, установил MS VS 2008. И не понял как написать простенькую программу выводящую MesssgeBox. И не понял как... как откомпилировать 1 файлик Hello.cpp например. написать я его написал а компилируются там только проекты целиком.
     
  8. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    jaga
    А как же fasm?
     
  9. jaga

    jaga Дмитрий

    Публикаций:
    0
    Регистрация:
    25 окт 2008
    Сообщения:
    33
    Адрес:
    Пермская обл.
    А его я продолжаю учить))
    Просто хочу писать проги с++ + асм!
     
  10. jaga

    jaga Дмитрий

    Публикаций:
    0
    Регистрация:
    25 окт 2008
    Сообщения:
    33
    Адрес:
    Пермская обл.
    В fasm все проще. что написал то и в программе))
     
  11. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Booster
    ты попутал, то был jaja ;)
     
  12. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    jaga
    Офигеть, я уже подумал, что с ботом беседую. ^)

    jaga
    Ну так в студии такая же байда как и в fasm: компилятор - cl, линковщик - link.
     
  13. jaga

    jaga Дмитрий

    Публикаций:
    0
    Регистрация:
    25 окт 2008
    Сообщения:
    33
    Адрес:
    Пермская обл.
    Спасибо))
     
  14. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    Недавно спрашивал про обработку ошибок конструкторов. Спасибо всем за ответы.
    Посмотрел в инете описание исключений, но остался ещё вопрос - как пользоваться исключениями в создаваемых потоках? Какие грабли ждут?
    Все найденые примеры и описания касались только первичного потока.
     
  15. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    В чём проблема? Ограничений на использование в потоках нет.
     
  16. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    пускай имеется:
    Код (Text):
    1. using namespace std;
    2. class Foo: public runtime_error {
    3.     string filename_;
    4. public:
    5.     parse_error(string const &filename)
    6.         : runtime_error("Error"),
    7.         filename_(filename) {
    8.         }
    9.  
    10.         /*
    11.         virtual ~parse_error() throw(){
    12.            
    13.         }*/
    14.  
    15.         string const &get_filename() const {
    16.             return filename_;
    17.         }
    18.     };
    19. }
    поясните, пожалуйста, почему g++ плюется:
    если раскомментить деструктор, то норм.

    занятно то, что comeau online хавает как закоменченный, так и раскомменченный варианты.

    так кто же прав?
     
  17. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    упс. выше опечатка.
    класс Foo заменить на класс parse_error.

    вышеспрошенный вопрос открыт.
     
  18. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Что предпочтительнее использовать
    Код (Text):
    1. #pragma once
    или
    Код (Text):
    1. #ifndef _NAME_
    2. #define _NAME_
    3. ...
    4. #endif
    ?
    Первый вариант не будет работать под некоторыми?
     
  19. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    ...некоторыми компиляторами?
     
  20. ohne

    ohne New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2009
    Сообщения:
    431
    это только в студии работает (cl.exe)