Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322

Открыть новую тему     Написать ответ в эту тему

Crazy_Shrike



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вопросы по программированию на C/С++

 
  • Справочники, книги
  • Выбор IDE (среды программирования)
     
    Постарайтесь дать как можно больше информации о возникшей проблеме - это в конце концов в ваших же интересах чтобы вам помогли.

    Решения конкретных задач собираются и обсуждаются в теме Задачи по C/С++ .

    Прежде чем просить помощи в задании...
    Если позарез надо и вы даже готовы заплатить

    Как правильно задавать вопросы, если вы хотите получить ответ.

    Полезные ссылки:
    C++(eng)

  • Всего записей: 241 | Зарегистр. 25-03-2004 | Отправлено: 13:37 06-05-2004 | Исправлено: AZJIO, 19:45 12-05-2014
    FMeat

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени суток.
     
    Есть вредная задача, с кучей непонятных строк, да и к тому же упорно не собирающаяся. Немогли бы вы происнить значения некоторых операторов и сообственно заставит её работать.
     
    Задача посвещена перегрузке операторов << и >> (Что и делает её запутанной для понимания, хотя это и не основная проблема).
    Среда: Visual C++ 2005 от МИКРософт. Програма написана как пустой проект консольного приложения. Вопросы задам по ходу программы в коментариях и полсе неё. Учебник "Как програмировать на С++"  Харви и Пола Дейтлов.
     
    Вот исходник:
     
    #include "iostream"
     
    using namespace std;
     
    class PhoneNumber
    {
        friend ostream &operator << (ostream &, const PhoneNumber &);
        friend istream &operator >> (istream &, PhoneNumber &);
            //...Заметим что функции operator<< и operator>> объявленны в class PhoneNumber не как функции элементы а как друзья класса. Эти операции не могут ыбть элементами, так как объект класса PhoneNumber появляеться в каждом случае как правый операнд операции; а для перегруженной операции, записанной как функция - элемент, операнд класса должен проявляться с права... ©Учебник.
            //Сам едва мудрень эту понял, так что объснить более понятным языком не берусь.
            //Вот и первый вопрос! что это за классы такие ostream и istream и где про них прочитать на русском можно?
    private:
        char areaCode[4];
        char exchange[4];
        char line;
    };
     
    ostream &operator << (ostream &output, const PhoneNumber &num)
    {
        output << "(" << num.areaCode << ")" << num.exchange << "-" << num.line;
     
        return output;
    }
     
    istream &operator>> (istream &input, PhoneNumber &num)
    {
        input.ignore();
        input.getline(num.areaCode, 4);
        input.ignore(2);
        input.getline(num.exchange, 4);
        input.ignore();
        input.getline(num.line, 5);
            //Вопрос номер два. "get" это какой - то оператор?
            //Вопрос номер три. ignore - классная вещ! А что ещё может с++? Откуда это взять можно? (Встроено это в С++ или в iostream.h реализованно?)
     
        return input;
    }
     
    void main ()
    {
        PhoneNumber phone;
     
        cout << "Vvedite nomer telefona v vide (123) 456-7890. Telefon:" << endl;
     
        cin << phone;
     
        cout << "Bill vveden nomer telefona: " << phone << endl;
    }
     
    Вот ошибки возникающие при попытке собрать проект (2):
    1::: error C2664: 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::getline(_Elem *,std::streamsize)' : cannot convert parameter 1 from 'char' to 'char *'
    2::: error C2678: binary '<<' : no operator found which takes a left-hand operand of type 'std::istream' (or there is no acceptable conversion)
     
    PS
    Надеюсь такая громозкось поста вас не огорчает! Я стремился описать проблему как можно более ёмко. Ведь телепатов среди вас нет?
     
    PPS
    Пусть победы твои будут быстрыми и многочисленными.
     
    Добавлено:
    Жутко извеняюсь за ошики! Я бы был не внимателен при переносе программы из учебнка на компьютер! Не надо на наих отвечать!

    Всего записей: 30 | Зарегистр. 25-12-2006 | Отправлено: 00:28 16-01-2007
    veronica b



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    FMeat
    Замените строку

    Цитата:
    char line;  

    на строку

    Цитата:
    char line[5];  

    Также строку  

    Цитата:
    cin << phone;

    замените на строку

    Цитата:
    cin >> phone;

     

    Цитата:
    //Вот и первый вопрос! что это за классы такие ostream и istream и где про них прочитать на русском можно?  

    Эти потоковые классы ввода-вывода. И только учебник вамобъяснит остальное.
    Цитата:
    //Вопрос номер два. "get" это какой - то оператор?  
        //Вопрос номер три. ignore - классная вещ! А что ещё может с++? Откуда это взять можно? (Встроено это в С++ или в iostream.h реализованно?)  

    getline(char* buffer, int sz) является функцией istream, которая в буфер buffer вводит sz символов.
    Ничего вам не заменит учебник!
     

    Всего записей: 504 | Зарегистр. 04-12-2006 | Отправлено: 08:09 16-01-2007 | Исправлено: veronica b, 08:22 16-01-2007
    Jokerjar



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Какие директивы препроцессора нужно добавить в начало следую-
    щей программы, чтобы данная программа распечатывала слово "abc".

    Код:
       #include <stdio.h>
       int main()
       {
          #ifndef A
            printf("a");
          #elif B
            printf("bc");
          #elif C
            printf("a");
            #if defined (D);
              printf("b");
            #else
              printf("bc");
            #endif
          #else
            printf("abc");
          #endif
          printf("c");
          return 0;
       }

    Всего записей: 591 | Зарегистр. 22-03-2006 | Отправлено: 10:58 16-01-2007
    RedLord

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Jokerjar
     
    #define  D  
    #define  A
    #define  C 1

    Всего записей: 730 | Зарегистр. 05-03-2004 | Отправлено: 11:42 16-01-2007
    WiseAlex



    Софтовых дел М...
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вопрос к изучающим с++: что для вас оказалось в языке самым трудным?

    Всего записей: 1001 | Зарегистр. 02-03-2003 | Отправлено: 11:56 16-01-2007 | Исправлено: WiseAlex, 12:12 16-01-2007
    FMeat

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    veronica b Спасибо!
     
    Мой учебник, хотя я лучше пока не видел, не слишком подробно отвчает на эти вопросы, так что за подробностями мне всё равно придёться лезть в интернет. Ошибки я исправил, ваш ответ очень помог.
     
    Есть ещё несколько вопросов по С++.
     
    1. Если задаться целью написать максимально компактную программу, то возмоно ли отказаться от заглавочного файла iostream заменив его своим, где будет реализованно только то что абсолютно необходимо для работы программы или заставить компилятор не включать в бинарник те строки кода, которые напрямую не использовались в программе? Как ещё можно это реализовать если есть более рациональный способ уменьшения размера программы?
    2. Перегрзка операторов реализованна в самом языке или в среде котороую я использую?
    3. Унарной/бинарной операцией называют операцию состоящую из одног/двух символов соответственно?
    4. Что значит вырожение "Драйвер для класса xxx" ? Как понимать слово драйвер применительно к С++?
    5. Иногда приходиться сталкиватья с проблемой что программе необходима какя либо dll, которой нет у пользователя. Как можно решить этот вопрос не прибегая к распространению данной dll вмести с продуктом или его вклбчения в бинарник, посредством статичной линковки?

    Всего записей: 30 | Зарегистр. 25-12-2006 | Отправлено: 12:11 16-01-2007
    RedLord

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    1. большинство компиляторов для release делают это по умолчанию
    2. в языке
    3. с двумя аргументами.  
    istream &operator>> (istream &input, PhoneNumber &num) - бинарный оператор. либо друг, либо не мембер
    унарный оператор - с одним аргументом, мембер класса
    4. понятия не имею
    5. отказаться от использования этой dll

    Всего записей: 730 | Зарегистр. 05-03-2004 | Отправлено: 13:21 16-01-2007
    Qraizer



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    1. Можно. Только не нужно. Компилятор и так не включит строки кода, которые не используются.
    2. Перегрузка операторов - это часть языка.
    3. Унарные и бинарные операции делятся на эти классы по количеству операндов. Есть ещё операция ?: Как ты думаешь к какому классу она относится?
    4. Наверное, что-то оно всё-таки означает. В том конкретном случае, где ты его встретил, автор сего термина что-то хотел этим сказать. Впрочем, возможно это такиой переводчик был... Драйверы как понятие в C++ отсутствует.
    5. В общем случае преобразовать динамическую библиотеку в статическую невозможно. В некоторых конкретных случаях, возможно и можно, но весьма трудоёмко. Или взяв в зубы мануал по системному программированию, можно очень старательно сэмулировать отсутствие этой DLL.
     
    Добавлено:
    RedLord
    Вообще-то у нас была вполне здоровая (пока?) дискуссия.
    veronica b
    От оно как. Любопытно: я не придерживаюсь точки зрения, что WinAPI предпочтительно для всех случаев, но сам тоже только его и юзаю . Наверное, потому что в последнее время кроме консольных приложений ничего не пишу...

    Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 13:26 16-01-2007
    veronica b



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    FMeat
    1. Лично я могу написаит класс типа iostream, но наврядли исполнительный файл будет меньше.  
    2. Перегрузка операторов, это св.- во языка С++.
    3. Полностью согласен с вами.
    4. Не знаю
    5. Или динамическая библиотека, т.е. dll или статическая линковка, т.е. библиотека связывается с исполнительным файлом.
    Qraizer
    Из моего опыта, я сделал вывод, что Win32 API весьма помогает повысить профессиональное мастерство!
    Кстати, я не знаю, на Линуксе есть что либо похожее на Win32 API?

    Всего записей: 504 | Зарегистр. 04-12-2006 | Отправлено: 15:02 16-01-2007 | Исправлено: veronica b, 15:03 16-01-2007
    FMeat

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    WiseAlex
    Самое трудное - это то над чем бъёшся сейчас. Если не понять того что делаеш, ни когда не научишся делать это хорошо, не сделаеш хорошо, считай усилия напрасны. Главное уловить и осмыслить образы того чего ты хочеш достичь, перенять их на С++ и представать полную картину во всех деталях, проделанной тобой работы.
    Если вы хотите писать FAQ, попытаюсь вас отговорить: каждый случай будет уникален. Версии компиляторов, операционные системы (Тут можно обидеть меньшинство, которое, допустим, сидит под Unix'ом, из - за такаких специфичных вещей как EOF.)
    Автор учебника зачастую не столько преподает сам предмет, сколько рассказывает о своём взгляде на язык програмирования. Иногда он может излогать лиш то что считает нужным, совершенно или потчи не затрагивая какой либо неообходимой темы. Собственно такое бывало не раз на сайтах "програмистов", где вместо чистого С++ давали порцию перебродившего бреда о том как хорошо юзать MFC и Bilder'ы и что мол главное в софте скорость его производства, а качество уже обеспесчила IDE и оптимизирующий компилятор.
    Ну а еже ли вам просто интересны вопросы и мнения новичков, то считайте одно у вас уже точно есть.
     
    RedLord
    Думаю вопрос о том как возможно отказаться от dll, будет для меня слишком сложен, так что эту тему можно на пока закрыть, но месяцев через 6, если не раньше, я к ней вернусь.
     
    Добавлено:
    veronica b
    Да, API под линуксом реализованны. Только название у них уж точно не Win. Если моя книжка (Да и я тоже) была компетентна в этом вопросе, то API это не что иное как посредник между операциооной системой и оборудованием, существенно упрощающим жизнь. Так что из написанного выше следует что - "А не упростить мне жизнь програмистам? - подумал Линус и ушёл с головой в работу. "
    Надеюсь я буду прощён за ответ на чужой вопрос!

    Цитата:
    5. Или динамическая библиотека, т.е. dll или статическая линковка, т.е. библиотека связывается с исполнительным файлом.  

    Тут не совсем точно. Я имел ввиду можно ли реализовать в программе то из - за чего она (программа) обращаеться к dll.
     
    Qraizer
    Было бы очень приятно услышать ваше мнение на вопрос veronica b.

    Всего записей: 30 | Зарегистр. 25-12-2006 | Отправлено: 17:07 16-01-2007
    veronica b



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    WiseAlex

    Цитата:
    Вопрос к изучающим с++: что для вас оказалось в языке самым трудным?

    Если это и к изучившим, то понять перегрузку оператора new.

    Всего записей: 504 | Зарегистр. 04-12-2006 | Отправлено: 18:17 16-01-2007 | Исправлено: veronica b, 18:18 16-01-2007
    TeXpert



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    FMeat
    5. Этот dll можно включить в бинарник, а затем извлечь и динамически загрузить. Но написал бы подробности, можно бы было придумать ещё какой-нибудь способ.

    ----------
    Майкудук, Пришахтинск не предлагать!:)
    А на Пирогова приходит снова весенний гомон...

    Всего записей: 3604 | Зарегистр. 08-02-2003 | Отправлено: 18:37 16-01-2007
    Qraizer



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    veronica b
    Цитата:
    Из моего опыта, я сделал вывод, что Win32 API весьма помогает повысить профессиональное мастерство!
    Само собой. Используя только "надстройки", операционную систему по конца никогда не поймёшь. Обязательно нужно щупать самому.
    Цитата:
    Кстати, я не знаю, на Линуксе есть что либо похожее на Win32 API?  
    Конечно, есть. Любая ОС имеет какой-нибудь API. Термин DOS API не встречался? Вкрадце я представляю себе такую иерархию (реально она слегка посложнее):
    железо <-> дравер <-> DDK API <-> ОС kernel mode <-> ОС user mode <-> SDK API <-> библиотеки <-> программа.
    SDK API - это и есть ОС API. Собственно ради возможности писать переносимые приложения библиотеки в языке и имеются. Подключаешь iostream и юзаешь консоль. А как iostream транслирует твой консольный ввод/вывод в вызовы API операционной системы - это уже тебе неважно.
    TeXpert
    Вот это я и назвал "взяв в зубы мануал по системному программированию, можно очень старательно сэмулировать отсутствие этой DLL". Впрочем, есть ещё варианты.

    Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 21:49 16-01-2007 | Исправлено: Qraizer, 21:53 16-01-2007
    RedLord

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    veronica b

    Цитата:
    Если это и к изучившим

     
    Достаточно самоуверенно.
    на www.open-std.org хорошо видно, что не только разруливаются тонкие неоднозначности,  но и продолжается развитие  языка.
    например, экспорт  шаблонов - вы  тоже  считаете для себя изученной областью языка?

    Всего записей: 730 | Зарегистр. 05-03-2004 | Отправлено: 00:05 17-01-2007 | Исправлено: RedLord, 00:07 17-01-2007
    veronica b



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Qraizer

    Цитата:
    Конечно, есть

    То, что есть понятно, но я бы ходел узнать, такая развитая, как и WIN32 API? Или все таки попроще? Какие есть компиляторы типв Майкрософта?  
     
    RedLord

    Цитата:
    Достаточно самоуверенно

    Абсолютно нет. Так как я по состоянию здоровья попал на пенсию то, изучение новых возможностей С++ для меня не актуально и поэтому я, с полным правом, считаю себя изучившим С++.

    Всего записей: 504 | Зарегистр. 04-12-2006 | Отправлено: 00:07 17-01-2007 | Исправлено: veronica b, 00:12 17-01-2007
    RedLord

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    veronica b

    Цитата:
    Так как я по состоянию здоровья попал на пенсию то, изучение новых возможностей С++ для меня не актуально и поэтому я, с полным правом, считаю себя изучившим С++.

    сорри. действительно можно считать изучившим

    Всего записей: 730 | Зарегистр. 05-03-2004 | Отправлено: 00:21 17-01-2007
    Qraizer



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

    Цитата:
    То, что есть понятно, но я бы ходел узнать, такая развитая, как и WIN32 API? Или все таки попроще? Какие есть компиляторы типв Майкрософта?
    Несколько раз сталкивался с кодом под linux, решавшим какие-то там свои задачи, и сравнивал с тем, как бы это я написал на WinAPI. Скажу так, что WinAPI я нашёл приятнее. Однако не хочу быть предвзятым, поэтому это моё ИМХО.
    Компиляторов полно: достаточно взять STLPort или Boost и посмотреть, под какое количество компиляторов он(и) портирован(ы). А вот что значит "типв Майкрософта" - это ещё надо уточнить, что под этим подразумевается. К я это понял, то это gcc + intеl compiler опционально. Впрочем, intеl compiler и vc не помешает.

    Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 14:25 17-01-2007
    veronica b



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Qraizer
    Есть такие как VC5 до VC8? Лично я самого высого мнения о  Win32 API. Хотя большую половину своей программисткой жизни пришлось писать не под Windows.  
     
    RedLord
    Когда моей дочери пришло время выбирать профессию, то она сказала: "я не знаю кем я хочу быть, но я знаю точно, что программистом, как папа, я не буду. Я хочу жить спокойно."

    Всего записей: 504 | Зарегистр. 04-12-2006 | Отправлено: 15:34 17-01-2007 | Исправлено: veronica b, 15:49 17-01-2007
    RedLord

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    veronica b

    Цитата:
    программистом, как папа, я не буду

     
    Qraizer
    veronica b
    я  бы  с  удовольствием  пощупал Comeau C++
    http://www.comeaucomputing.com/
     

    Всего записей: 730 | Зарегистр. 05-03-2004 | Отправлено: 17:50 17-01-2007 | Исправлено: RedLord, 17:51 17-01-2007
    SaDFromSpb



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А я один раз писал приложение, которое загружает в свое окно бмп-картинку и позволяет таскать ее мышкой и скролить. (Задание такое было)
    И еще как-то раз написал для себя прогу, которая копирует все файлы из заданной дирректории (рекурсивно) в папки с именами со датой их модификации. (то есть все файлы со временем модификации 12.04.08 копируются в папку с именем 12.04.08)
     
    Все это на чистом WinAPI. Этого мне хватило, чтобы уяснить, что программирование под Винду однозначно не для меня.

    Всего записей: 209 | Зарегистр. 22-06-2004 | Отправлено: 18:05 17-01-2007
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на C/С++


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru