Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по программированию на C/С++

Автор: veronica b
Дата сообщения: 16.01.2007 07:09
FMeat
Замените строку

Цитата:
char line;

на строку

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

Также строку

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

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

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



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

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

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

Автор: Jokerjar
Дата сообщения: 16.01.2007 09:58
Какие директивы препроцессора нужно добавить в начало следую-
щей программы, чтобы данная программа распечатывала слово "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;
}
Автор: RedLord
Дата сообщения: 16.01.2007 10:42
Jokerjar

#define D
#define A
#define C 1
Автор: WiseAlex
Дата сообщения: 16.01.2007 10:56
Вопрос к изучающим с++: что для вас оказалось в языке самым трудным?
Автор: FMeat
Дата сообщения: 16.01.2007 11:11
veronica b Спасибо!

Мой учебник, хотя я лучше пока не видел, не слишком подробно отвчает на эти вопросы, так что за подробностями мне всё равно придёться лезть в интернет. Ошибки я исправил, ваш ответ очень помог.

Есть ещё несколько вопросов по С++.

1. Если задаться целью написать максимально компактную программу, то возмоно ли отказаться от заглавочного файла iostream заменив его своим, где будет реализованно только то что абсолютно необходимо для работы программы или заставить компилятор не включать в бинарник те строки кода, которые напрямую не использовались в программе? Как ещё можно это реализовать если есть более рациональный способ уменьшения размера программы?
2. Перегрзка операторов реализованна в самом языке или в среде котороую я использую?
3. Унарной/бинарной операцией называют операцию состоящую из одног/двух символов соответственно?
4. Что значит вырожение "Драйвер для класса xxx" ? Как понимать слово драйвер применительно к С++?
5. Иногда приходиться сталкиватья с проблемой что программе необходима какя либо dll, которой нет у пользователя. Как можно решить этот вопрос не прибегая к распространению данной dll вмести с продуктом или его вклбчения в бинарник, посредством статичной линковки?
Автор: RedLord
Дата сообщения: 16.01.2007 12:21
1. большинство компиляторов для release делают это по умолчанию
2. в языке
3. с двумя аргументами.
istream &operator>> (istream &input, PhoneNumber &num) - бинарный оператор. либо друг, либо не мембер
унарный оператор - с одним аргументом, мембер класса
4. понятия не имею
5. отказаться от использования этой dll
Автор: Qraizer
Дата сообщения: 16.01.2007 12:26
1. Можно. Только не нужно. Компилятор и так не включит строки кода, которые не используются.
2. Перегрузка операторов - это часть языка.
3. Унарные и бинарные операции делятся на эти классы по количеству операндов. Есть ещё операция ?: Как ты думаешь к какому классу она относится?
4. Наверное, что-то оно всё-таки означает. В том конкретном случае, где ты его встретил, автор сего термина что-то хотел этим сказать. Впрочем, возможно это такиой переводчик был... Драйверы как понятие в C++ отсутствует.
5. В общем случае преобразовать динамическую библиотеку в статическую невозможно. В некоторых конкретных случаях, возможно и можно, но весьма трудоёмко. Или взяв в зубы мануал по системному программированию, можно очень старательно сэмулировать отсутствие этой DLL.

Добавлено:
RedLord
Вообще-то у нас была вполне здоровая (пока?) дискуссия.
veronica b
От оно как. Любопытно: я не придерживаюсь точки зрения, что WinAPI предпочтительно для всех случаев, но сам тоже только его и юзаю . Наверное, потому что в последнее время кроме консольных приложений ничего не пишу...
Автор: veronica b
Дата сообщения: 16.01.2007 14:02
FMeat
1. Лично я могу написаит класс типа iostream, но наврядли исполнительный файл будет меньше.
2. Перегрузка операторов, это св.- во языка С++.
3. Полностью согласен с вами.
4. Не знаю
5. Или динамическая библиотека, т.е. dll или статическая линковка, т.е. библиотека связывается с исполнительным файлом.
Qraizer
Из моего опыта, я сделал вывод, что Win32 API весьма помогает повысить профессиональное мастерство!
Кстати, я не знаю, на Линуксе есть что либо похожее на Win32 API?
Автор: FMeat
Дата сообщения: 16.01.2007 16:07
WiseAlex
Самое трудное - это то над чем бъёшся сейчас. Если не понять того что делаеш, ни когда не научишся делать это хорошо, не сделаеш хорошо, считай усилия напрасны. Главное уловить и осмыслить образы того чего ты хочеш достичь, перенять их на С++ и представать полную картину во всех деталях, проделанной тобой работы.
Если вы хотите писать FAQ, попытаюсь вас отговорить: каждый случай будет уникален. Версии компиляторов, операционные системы (Тут можно обидеть меньшинство, которое, допустим, сидит под Unix'ом, из - за такаких специфичных вещей как EOF.)
Автор учебника зачастую не столько преподает сам предмет, сколько рассказывает о своём взгляде на язык програмирования. Иногда он может излогать лиш то что считает нужным, совершенно или потчи не затрагивая какой либо неообходимой темы. Собственно такое бывало не раз на сайтах "програмистов", где вместо чистого С++ давали порцию перебродившего бреда о том как хорошо юзать MFC и Bilder'ы и что мол главное в софте скорость его производства, а качество уже обеспесчила IDE и оптимизирующий компилятор.
Ну а еже ли вам просто интересны вопросы и мнения новичков, то считайте одно у вас уже точно есть.

RedLord
Думаю вопрос о том как возможно отказаться от dll, будет для меня слишком сложен, так что эту тему можно на пока закрыть, но месяцев через 6, если не раньше, я к ней вернусь.

Добавлено:
veronica b
Да, API под линуксом реализованны. Только название у них уж точно не Win. Если моя книжка (Да и я тоже) была компетентна в этом вопросе, то API это не что иное как посредник между операциооной системой и оборудованием, существенно упрощающим жизнь. Так что из написанного выше следует что - "А не упростить мне жизнь програмистам? - подумал Линус и ушёл с головой в работу. "
Надеюсь я буду прощён за ответ на чужой вопрос!

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

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

Qraizer
Было бы очень приятно услышать ваше мнение на вопрос veronica b.
Автор: veronica b
Дата сообщения: 16.01.2007 17:17
WiseAlex

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

Если это и к изучившим, то понять перегрузку оператора new.
Автор: TeXpert
Дата сообщения: 16.01.2007 17:37
FMeat
5. Этот dll можно включить в бинарник, а затем извлечь и динамически загрузить. Но написал бы подробности, можно бы было придумать ещё какой-нибудь способ.
Автор: Qraizer
Дата сообщения: 16.01.2007 20:49
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". Впрочем, есть ещё варианты.
Автор: RedLord
Дата сообщения: 16.01.2007 23:05
veronica b

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


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

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

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

RedLord

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

Абсолютно нет. Так как я по состоянию здоровья попал на пенсию то, изучение новых возможностей С++ для меня не актуально и поэтому я, с полным правом, считаю себя изучившим С++.
Автор: RedLord
Дата сообщения: 16.01.2007 23:21
veronica b

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

сорри. действительно можно считать изучившим
Автор: Qraizer
Дата сообщения: 17.01.2007 13:25

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

RedLord
Когда моей дочери пришло время выбирать профессию, то она сказала: "я не знаю кем я хочу быть, но я знаю точно, что программистом, как папа, я не буду. Я хочу жить спокойно."
Автор: RedLord
Дата сообщения: 17.01.2007 16:50
veronica b

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


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

Автор: SaDFromSpb
Дата сообщения: 17.01.2007 17:05
А я один раз писал приложение, которое загружает в свое окно бмп-картинку и позволяет таскать ее мышкой и скролить. (Задание такое было)
И еще как-то раз написал для себя прогу, которая копирует все файлы из заданной дирректории (рекурсивно) в папки с именами со датой их модификации. (то есть все файлы со временем модификации 12.04.08 копируются в папку с именем 12.04.08)

Все это на чистом WinAPI. Этого мне хватило, чтобы уяснить, что программирование под Винду однозначно не для меня.
Автор: veronica b
Дата сообщения: 17.01.2007 18:06
SaDFromSpb
А мне кажется, что вы сделали достаточно сложные вещи и зря бросили. Так что вам не понравилось. А на чем вы сейчас пишите программы?
Автор: Qraizer
Дата сообщения: 17.01.2007 19:46
SaDFromSpb
GUI однозначно не трогаем, ибо на API его рисовать - это не только в Win32, но и где угодно будет напрягать. Однако всё равно не могу сказать, что GUI в Win32 API плохо спроектирован.
А вообще, я пришёл ровно к противоположным выводам, как уже отмечал ранее. Насчёт удобства - уже говорил, что не хочу быть предвзятым, - однако что потенциал у архитектуры Win32 API громадный - это буду утверждать. Это практически единственный API, который заставляет спускаться на уровень двайверов только при решении задач, связанных с непереносимостью между аппаратными платформами. Даже если это уровень системного программирования, то всё, не связанное с железом, реализуется на SDK.

Добавлено:
RedLord
Цитата:
я бы с удовольствием пощупал Comeau C++
Я бы тоже. В частности очень хочется приобрести опыт работы с экспортом шаблонов, а Intel меня обидел - реализовал в Linux-е, а в Wind-е нет. Притом, что они пользуются front-end-ом от EDG, который везде одинаков, и в котором экспорт шаблонов реалиован ещё в 2003-м.
Автор: FMeat
Дата сообщения: 17.01.2007 21:04
Ешё одна партия вопросов.

1. Если функция возратила значение, то она возращает управление вызвавшей её функции?
2. Едва ли компьютер способен давать каждой переменной имена, как можно представить переменную в памяти?
3. Как в памяти реализуеться инкапсуляции, когда есть две функции в которых имееться две переменных, невидимых друг другу с одинаковоми именами? Я не напутал, назвав сокрытие реализации функций друг от друга инкапсуляцией или вообше далеко отошёл от истинного положения?

veronica b
Могу посоветовать учебник, где есть глава о перегрузке операторов new и delete, написанный для уже бывалых, но всё ещё учащихся програмистов. К сожеленюи он в *.pdf, так что не получиться закачать его частично, но материал оставшихся глав тоже имеет большую ценность, так что грузить обязательно. Описание книги и где её можно скачать здесь: http://openlib.org.ua/ru/books/id/17/ .

TeXpert Сейчас это не являеться первоочередной задачей и скорее всего мне останетья непонятен смысл реализации данного приёма из - за моего ещё низкого уровня програмирования, хотя я с удовольствием бы это изучил, если это вас не затруднит.
Автор: veronica b
Дата сообщения: 17.01.2007 21:31
FMeat

Цитата:
1. Если функция возратила значение, то она возращает управление вызвавшей её функции?

Естественно.

Цитата:
2. Едва ли компьютер способен давать каждой переменной имена, как можно представить переменную в памяти?

В памяти компьютера хранится не имя переменной, а её значение. А имя переменной заменяется адресом.

Цитата:
3. Как в памяти реализуеться инкапсуляции, когда есть две функции в которых имееться две переменных, невидимых друг другу с одинаковоми именами? Я не напутал, назвав сокрытие реализации функций друг от друга инкапсуляцией или вообше далеко отошёл от истинного положения?

В памяти не как. Только компилятор следит за инкапсуляции и областью видимости.


Цитата:
Могу посоветовать учебник, где есть глава о перегрузке операторов new и delete, написанный

Боьшое спасибо.


Автор: TeXpert
Дата сообщения: 18.01.2007 01:28
Тема плавно перешла в обсуждение WinAPI).
Qraizer
Согласен с тем, что это хороший интерфейс, несмотря на некоторый разнобой. Всё же прозрачности больше, когда программируешь на этом уровне. А вот Mocrosoft уже акцент ставит на .NET, а ведь этот слой опирается на WinAPI, интересно, насколько упадёт производительность при этом?

FMeat
Без проблем готов обсуждать, даст Бог).
Автор: Mickey_from_nsk
Дата сообщения: 18.01.2007 08:21
TeXpert

Цитата:
Согласен с тем, что это хороший интерфейс, несмотря на некоторый разнобой

Чем он так хорош, если не секрет? Особенно в сравнении с ...?

Цитата:
А вот Mocrosoft уже акцент ставит на .NET, а ведь этот слой опирается на WinAPI

Если не ошибаюсь, с появлением Висты и иже с ними, все становится с точностью наоборот. По крайней мере, микрософт обещал встроить .NET в ядро со всеми вытекающими.
Цитата:
интересно, насколько упадёт производительность при этом?
Такой вопрос часто обсасывается на разных форумах - что происходит с производительностью при переходе с С на С++. По моим ощущениям - ничего смертельного не происходит, наоборот, производительность в ряде случаев растет, а количество глюков существенно сокращается.
Автор: TeXpert
Дата сообщения: 18.01.2007 08:40
Mickey_from_nsk
Сам по себе неплох, разве нельзя такое допустить?


Цитата:
Если не ошибаюсь, с появлением Висты и иже с ними, все становится с точностью наоборот. По крайней мере, микрософт обещал встроить .NET в ядро со всеми вытекающими.

Ссылку, пожалуйста! Я не верю в такое. Может, вы неправильно поняли?

P. S. Однако, офтопим).
Автор: WiseAlex
Дата сообщения: 18.01.2007 10:04
FMeat
ты сам читал эту книгу?
во-первых это не учебник, во-вторых там масса ошибок и неточностей и в-третьих по конкретному вопросу лучше посмотреть что-то другое. эта книга просто сборник некоторых идей в около-плюсовой среде
veronica b
new и delete с их навороченной перегрузкой действительно не для слабонервных.
Это приблизительно как с шаблонами: базовые вещи понимают и используют все, а сложные в обычной программистской практике - редко, и как следствие, сложные вещи я еще читать (иногда с большим трудом) могу, а вот написать - уже получается с большими усилиями
Автор: Mickey_from_nsk
Дата сообщения: 18.01.2007 10:52
TeXpert

Цитата:
Сам по себе неплох, разве нельзя такое допустить?

В смысле функциональной полноты? Или изящества работы с неименованными каналами? Или работа с графикой?
Есть мнение, что в UNIX это сделано слегка изящнее. Я еще не видел вещей (кроме, может быть, потоков), которые в WinAPI сделаны лучше чем в UNIX.

Цитата:
Ссылку, пожалуйста! Я не верю в такое. Может, вы неправильно поняли?

Ссылку не нашел. Возможно вру. Но читал об этом, кажись в Рихтере.
Вполне допускаю, что мысли в Microsoft о переходе были ранее, но сейчас уже их не осталось.

Цитата:
P. S. Однако, офтопим

Таки да. Это - мой последний пост на эту тему здесь.
Автор: Qraizer
Дата сообщения: 18.01.2007 13:20
TeXpert
Цитата:
Согласен с тем, что это хороший интерфейс, несмотря на некоторый разнобой. Всё же прозрачности больше, когда программируешь на этом уровне. А вот Mocrosoft уже акцент ставит на .NET, а ведь этот слой опирается на WinAPI, интересно, насколько упадёт производительность при этом?
Разнобой - в чём? Я что-то не понял...
.NET не опирается на Win32, а наследует архитектуру. Основное отличие - объектный API, а не функциональный, как было ранее. Просто Vista уже его держит на уровне экспорта своего ядра, а в предыдущих версиях .NET является слоем переходников, наподобие как сделано в библиотеках классов.
Mickey_from_nsk
Цитата:
Чем он так хорош, если не секрет? Особенно в сравнении с ...?
Если не чувствуешь, что чего-то не хватает, и удобен в использовании, то просто "хорош" подходящий термин. "В сравнении с..." потоками, объектами синхронизации, API безопасности, названия функций и структур (folk() мне лично ничего не говорит, а CreateProcess() в документировании ИМХО вообще не нуждается)
WiseAlex
Цитата:
Это приблизительно как с шаблонами: базовые вещи понимают и используют все, а сложные в обычной программистской практике - редко, и как следствие, сложные вещи я еще читать (иногда с большим трудом) могу, а вот написать - уже получается с большими усилиями
Ну, не знаю. Я в обычной практике частенько юзаю эти самые "сложные" вещи. Тут видимо дело не в "сложности", а в привычке.
Mickey_from_nsk
Цитата:
Таки да. Это - мой последний пост на эту тему здесь
Тады давайте перейдём в соответствующий топик
Автор: veronica b
Дата сообщения: 18.01.2007 13:28
WiseAlex

Цитата:
new и delete с их навороченной перегрузкой действительно не для слабонервных.
Это приблизительно как с шаблонами: базовые вещи понимают и используют все, а сложные в обычной программистской практике - редко, и как следствие, сложные вещи я еще читать (иногда с большим трудом) могу, а вот написать - уже получается с большими усилиями

Ну с new и delete и их перегрузкой я разобрался ещо в 1995 году. Согласен, что сложные вещи в С++ используются весьма редко и не потому, что программист их не понимает!
Mickey_from_nsk

Цитата:
Такой вопрос часто обсасывается на разных форумах - что происходит с производительностью при переходе с С на С++. По моим ощущениям - ничего смертельного не происходит, наоборот, производительность в ряде случаев растет, а количество глюков существенно сокращается.

Мне раз пришлось программу, написанную на С++ перевести на Си. Были только классы, которые я заменил на структуры. Программа на Си работала примерно на 5% быстрее чем Си с плюсами. Иногда, редко, но эти прценты бывают критичны!
TeXpert
Mickey_from_nsk

Цитата:
P. S. Однако, офтопим).

В программировании на С++ нет оффтопа, нет мелочей, там все важно. У меня было не раз, что беседа, как казалось, не в тему, дает шикарный резуьтат именно в программировании на С++!

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

Предыдущая тема: не знаю как назвать тему :-)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.