Тема: С++ Вопросы и ответы. Страниц: 1 2 3 4 5 6 7 | Прочитано 45247 раз |
Luficer [Аццкий Сотона]
Прирожденный Джаец
Да, это негр :)

Пол:  Репутация: +323
|
 |
С++ Вопросы и ответы. « от 25.01.2006 в 17:55:35 » |
|
Господа, опять я и опять с просьбой. Дело в том, что здесь, в Питере, на 1-м курсе Политеха учится мой сводный братец. Пока еще учится. Сессию зимнюю почти завалил и, с близжайших выходных начиная, я переезжаю к нему "вытаскивать". Экзаменов всего 3,- физика с математикой и С++ (программист - специальность). И если с первым и вторым предметом я знаком неплохо, то из программирования помню местами ЛОГо, неплохо Бейсик и довольно прилично Паскаль. Похоже, теперь придется еще и СИ поучить. Подскажите, плз, литературу (сайты, справочники на дисках) с обучалкой С++. Уровень примерно такой (привожу задачку к экзамену): "Дан массив А, сторона <= 13 элементов. Вычислить количество нулевых, сформировать из оставшихся новый массив с количеством элементов А/2." Ну или что-то в этом духе. Т.е. как я понимаю, нужны общие понятия о функциях, массивах, поиск. Что-то вроде функций for, goto, array и т.п. Заранее спасибо.
|
« Изменён в : 11.11.2008 в 14:57:51 пользователем: Zed » |
Зарегистрирован |
Ночью в тёмных переулках Астаны слышно цоканье копытцев Сотоны.
|
|
|
gyv
Гость

|
 |
Re: С++ /надо срочно изучить/ « Ответ #1 от 25.01.2006 в 20:30:11 » |
|
2Luficer: справочник не посоветую (C изучал раньше паскаля, но использую реже) - читал оффлайновые и очень давно. Если с программированием знаком, то достаточно справочника по синтаксису (приведённый пример делается за пару минут хоть на пас, хоть на Ц, хоть на пхп, перл и пр.) если не знает основ (что есть массив и нафига оно такое надо), то тут сложнее - требуется изучить основы (можно на любом языке, но если будет Ц - лучше, так сказать приятное с полезным). Вот исходя из базовых знаний и стоит искать книжки (я всё больше последнее время читаю msdn и ebooks о-рейлевские по геймдеву - тут ещё могу что-то высказать)
|
« Изменён в : 25.01.2006 в 20:31:07 пользователем: gyv » |
Зарегистрирован |
|
|
|
Force_Majeure [Непреодолимая сила]
Прирожденный Джаец
Ах, было б только с кем поговорить ...

Пол:  Репутация: +526
|
 |
Re: С++ /надо срочно изучить/ « Ответ #2 от 26.01.2006 в 09:01:52 » |
|
2Luficer: "Изучить" С++ за несколько дней у тебя не получится ну никак. С++ - один из самых навороченных языков современности. Недаром существует фейковое интервью Страуструпа, в котором он рассказывает, что придумалл С++ исключительно для того, чтобы у программеров "была работа". Если же тебе нужно просто ознакомиться с синтаксисом - в книжном покупаешь абслютно любую книгу типа "Самоучитель С++" или "С++ для чайников" и пока едешь в меторо - быстро пролистать. В первую очередь читаешь разделы посвященные области видимости переменных и понятю класса. Все общие конструкции типа циклов, if-ов, массивов и т.п. в С++ мало отличаются от других языков. Из онлайн ресурсов самый мощный на Русском - www.rsdn.ru Там бывают очень серьезно разбирающиеся в С++ люди (себя не считаю ), но с другой стороны и ответы в стиле "пошел ты на RTFM" получаешь чаще. Там же есть и довольно большая база статей, которые можно почитать.
|
|
Зарегистрирован |

|
|
|
Psyho [ПсихоПакос :))]
Прирожденный Джаец
Я сказал в морг, значит в морг

Пол:  Репутация: +184
|
 |
Re: С++ /надо срочно изучить/ « Ответ #3 от 26.01.2006 в 09:26:30 » |
|
2Luficer: Для задач такого класса вполне подойдет любая книжка. Для быстрого изучения Си++ (без знания Си) из встречающихся наиболее хороша книга Александреску. Названия не помню. Книжка красного цвета. Позиционируется как книга для преподователей Си++. Книга именно по Си++ и stl библиотекам. Струструп слишком навороченный. Его на начальном этапе не почитаеш. PS: Че-то я ее в инете найти не могу. Зато нашел много других вещей, что читал. http://books.dore.ru/bs/f6sid19.html "Эффективное использование STL. Библиотека программиста" Очень интересная книга по стандартной библиотеке. "Основы программирования на С++. Том 1" То-же кто-то увел для изучения.
|
« Изменён в : 26.01.2006 в 09:43:13 пользователем: Psyho » |
Зарегистрирован |
Почему не выпускают швейцарских ножей для сисадмина? Чтоб в наборе крестовая отвертка, флешка, паяльник, обжимник, мини-ствол с одним патроном и гравировкой "себе или главбуху"..
|
|
|
Force_Majeure [Непреодолимая сила]
Прирожденный Джаец
Ах, было б только с кем поговорить ...

Пол:  Репутация: +526
|
 |
Re: С++ /надо срочно изучить/ « Ответ #4 от 26.01.2006 в 09:48:36 » |
|
2Luficer: В дополнение, все-таки руководство Страуструпа и небольшой туториал по С++ Builder, для начала на нем, наверное, тебе будет проще. Не умаляя важности STL, не думаю, что для задачи, что ты привел в начале нужно им загружаться.
|
|
Зарегистрирован |

|
|
|
Force_Majeure [Непреодолимая сила]
Прирожденный Джаец
Ах, было б только с кем поговорить ...

Пол:  Репутация: +526
|
 |
Re: С++ /надо срочно изучить/ « Ответ #5 от 26.01.2006 в 09:49:02 » |
|
Страуструп
|
|
Зарегистрирован |

|
|
|
Force_Majeure [Непреодолимая сила]
Прирожденный Джаец
Ах, было б только с кем поговорить ...

Пол:  Репутация: +526
|
 |
Re: С++ /надо срочно изучить/ « Ответ #6 от 26.01.2006 в 09:49:17 » |
|
Страуструп
|
|
Зарегистрирован |

|
|
|
Psyho [ПсихоПакос :))]
Прирожденный Джаец
Я сказал в морг, значит в морг

Пол:  Репутация: +184
|
 |
Re: С++ /надо срочно изучить/ « Ответ #7 от 26.01.2006 в 09:59:01 » |
|
Нашел. Как всегда поперепутал авторов и издательства. Эффективное программирование на C++. Серия C++ In-Depth, т. 2 Эндрю Кёниг, Барбара Э. Му http://www.williamspublishing.com/Books/5-8459-0350-5.html
|
|
Зарегистрирован |
Почему не выпускают швейцарских ножей для сисадмина? Чтоб в наборе крестовая отвертка, флешка, паяльник, обжимник, мини-ствол с одним патроном и гравировкой "себе или главбуху"..
|
|
|
Luficer [Аццкий Сотона]
Прирожденный Джаец
Да, это негр :)

Пол:  Репутация: +323
|
 |
Re: С++ /надо срочно изучить/ « Ответ #8 от 26.01.2006 в 10:27:18 » |
|
2gyv: 2Force_Majeure: 2Psyho: Спасибо, буду читать, много думать. 2Force_Majeure: Quote:Изучить" С++ за несколько дней у тебя не получится ну никак. |
| Про изучение AutoCad за выходные мне тоже так говорили, однако смог. Правда, у меня до того Компас стоял, т.ч. не с пустого места получилось. Здесь примерно то же, надеюсь. Зацепит - полезу дальше в Quote:. Пока же, думаю, можно будет обойтись просто хорошим справочником. О результатах сообщу.
|
|
Зарегистрирован |
Ночью в тёмных переулках Астаны слышно цоканье копытцев Сотоны.
|
|
|
gyv
Гость

|
 |
Re: С++ /надо срочно изучить/ « Ответ #9 от 26.01.2006 в 10:42:19 » |
|
2Psyho: Спасибо за ссылки - кое-что интересненькое нашёл (печатные хорошо - можно не только за компом читать). Но как разнятся цены - это же ужас. На некоторые книжки в 2+ раза в зависимости от инет-магазина.
|
|
Зарегистрирован |
|
|
|
Psyho [ПсихоПакос :))]
Прирожденный Джаец
Я сказал в морг, значит в морг

Пол:  Репутация: +184
|
 |
Re: С++ /надо срочно изучить/ « Ответ #10 от 26.01.2006 в 15:43:19 » |
|
2gyv: В электронке тоже кое-что есть. Если надо могу списочек прислать.
|
|
Зарегистрирован |
Почему не выпускают швейцарских ножей для сисадмина? Чтоб в наборе крестовая отвертка, флешка, паяльник, обжимник, мини-ствол с одним патроном и гравировкой "себе или главбуху"..
|
|
|
gyv
Гость

|
 |
Re: С++ /надо срочно изучить/ « Ответ #11 от 26.01.2006 в 16:54:08 » |
|
2Psyho: В электронке и у самого есть. в основном - на враждебном языке (в оригинале).
|
|
Зарегистрирован |
|
|
|
Zar XaplYch [Переводчик]
Прирожденный Джаец
надА

Пол:  Репутация: +864
|
 |
Re: С++ /надо срочно изучить/ « Ответ #12 от 23.10.2006 в 15:31:37 » |
|
Народ, нужна прога редактор-компилятор на С++, главное чтоб бесплатно и не геморно было, для новичков. У меня самого есть конечно и Visual C++ и C++ Builder, но нужно именно бесплатную. Или хотя бы научите, как в вышеназванных прогах скомпилировать GCC, а то такие сложные проекты я еще не пытал.
|
|
Зарегистрирован |
- Удельный вес ядра твоей планеты думай! - Эээ...
|
|
|
Psyho [ПсихоПакос :))]
Прирожденный Джаец
Я сказал в морг, значит в морг

Пол:  Репутация: +184
|
 |
Re: С++ /надо срочно изучить/ « Ответ #13 от 23.10.2006 в 17:02:30 » |
|
Набираем в google Компилятор C++ и получаем кучу ссылок. Например: http://www.gamedev.ru/faq/?id=17 Quote: Какие бесплатные C++ компиляторы и IDE к ним существуют. Компиляторы: 1) gcc. Под windows лучше всего использовать mingw (www.mingw.org), это порт gcc на Windows платформу. 2) Visual C++ 2005 Express Edition. http://msdn.microsoft.com/express/ Тут http://www.rsdn.ru/Forum/Message.aspx?mid=1477837#1477837 прямые ссылки на скачивание. 3) Digital Mars C/C++ Compilers. Довольно неплохой компилятор, но хуже соответствует стандарту чем последние gcc или VC7.1. Лежит здесь http://www.digitalmars.com/ 4) Borland free compiler. Содержит компилятор и утилиты командной строки, искать здесь: http://www.borland.com/devsupport/bcppbuilder/downloads/ 5) Open Watcom C/C++. http://www.openwatcom.org/ 6) LCC-Win32. http://www.cs.virginia.edu/~lcc-win32/ (Только Си компилятор, C++ не поддерживает) 7) Microsoft Visual C++ Toolkit 2003. полноценный оптимизирующий компилятор VC7.1 без IDE и nmake. В настоящее время заменен на Visual C++ 2005 Express Edition и с сайта Microsoft недоступен, пользуйтесь поиском. Может быть более предпочтителен из-за малого веса(~30 MiB). IDE: 1) Dev-C++. достаточно неплохое IDE для gcc(mingw) http://www.bloodshed.net/devcpp.html. 2) MinGW Developer Studio. http://www.parinyasoft.com/ - IDE предназначено специально для его использования совместно с MinGW. Очень удобно тем, кто разрабатывает программу под indows и Linux одновременно, т.к. формат проектов один и остаётся только жмакнуть на кнопку компиляции и не мучиться с настройкой разных сред. 3) Code::Blocks IDE. http://www.codeblocks.org. Это наверно одно из лучших (хоть и самое молодое) IDE для бесплатных компиляторов, подерживает не только mingw но и Microsoft Visual C++ Toolkit 2003, Digital Mars C/C++ Compilers, Borland free compiler, Open Watcom C/C++ и Small Device C Compiler 4) Eclipse/CDT - написанные на Java, платформа для разработки IDE + плагин превращающий платформу в приспособленную для C++ среду. http://www.eclipse.org/cdt 5) Visual C++ 2005 Express Edition. На данный момент похоже лучшее среди бесплатных IDE для Windows. 6) Emacs/Vim. Не для слабых духом, долгое время обучения. Преимущества - кроссплатформенность и не снившаяся другим инструментам мощь и гибкость. Vim: http://www.vim.org Emacs: http://ftp.gnu.org/pub/gnu/emacs/windows/ - официальный ftp http://ourcomments.org/Emacs/EmacsW32.html - хороший дистрибутив для Windows 7) eVC 3/4 Бесплатные IDE от Microsoft под платформу WinCE. www.microsoft.com Visual-MinGW. Распространяется под GNU лицензией. IDE оболочка очень схожа с Microsoft Visual C++ 6 http://visual-mingw.sourceforge.net/ Использующим несколько компиляторов сразу рекомендуется также посмотреть на Scons(http://www.scons.org/) и Boost.Build(http://boost.sourceforge.net/boost-build2/) - удобные системы для сборки проектов. Внимание: Права на эту статью принадлежат авторам, указанным в Истории. При цитировании ссылка на эту страницу обязательна. |
|
|
|
Зарегистрирован |
Почему не выпускают швейцарских ножей для сисадмина? Чтоб в наборе крестовая отвертка, флешка, паяльник, обжимник, мини-ствол с одним патроном и гравировкой "себе или главбуху"..
|
|
|
Clayman [Наш человек!]
Прирожденный Джаец
back into the game

Пол:  Репутация: +440
|
 |
Re: С++ /надо срочно изучить/ « Ответ #14 от 16.02.2007 в 21:30:34 » |
|
Простой, я думаю, вопрос, но мучаюсь с ним уже год. С интервалом в месяц-два В общем у меня есть класс Player и три переменных iStrength, iWidsom и iCharisma. С помощью функции GetPlayerStat(player pPlayer, string sStat) нужно получить значение одной из переменных с именем sStat. Т.е... class Player //Собственно сам класс { public: //Конструкторы Player(); ~Player(); //Основные статы protected: int iStrength; int iWisdom; int iCharisma; }; /*Функция, которая должна брать значение переменной с именем из sStat у игрока pPlayer.*/ int Player::GetPlayerStat(player pPlayer, string sStat) { Как взять значение из стринга и поставить его вместо имени переменной? } Десяток форумов уже прекопал - без толку.
|
« Изменён в : 16.02.2007 в 21:32:15 пользователем: Clayman » |
Зарегистрирован |
Не верь в худо!
|
|
|
Psyho [ПсихоПакос :))]
Прирожденный Джаец
Я сказал в морг, значит в морг

Пол:  Репутация: +184
|
 |
Re: С++ /надо срочно изучить/ « Ответ #15 от 18.02.2007 в 02:36:31 » |
|
GetPlayerStat(player pPlayer, string sStat) - это полная чуш. Должно быть или GetPlayerStat(player pPlayer, string *sStat) или GetPlayerStat(player pPlayer, string &sStat) То что ты привел не может возвращать значение string. Или у тебя в классе не правильное определение метода или ты ошибся в цитировании. Приведи объявление класса полностью, так как там у тебя иогут быть еще проблемы с защищенными типами. PS: Сходи сюды www.rsdn.ru Там довольно хороший форум по Си. И еще почитай про ссылочный тип Си++ и указатели в Си/Си++.
|
« Изменён в : 18.02.2007 в 03:41:41 пользователем: Psyho » |
Зарегистрирован |
Почему не выпускают швейцарских ножей для сисадмина? Чтоб в наборе крестовая отвертка, флешка, паяльник, обжимник, мини-ствол с одним патроном и гравировкой "себе или главбуху"..
|
|
|
Force_Majeure [Непреодолимая сила]
Прирожденный Джаец
Ах, было б только с кем поговорить ...

Пол:  Репутация: +526
|
 |
Re: С++ /надо срочно изучить/ « Ответ #16 от 18.02.2007 в 07:28:28 » |
|
2Clayman: Функция у тебя как-то странно написана, а мож я чего не понимаю Если она принадлежит классу Player, что за первый параметр pPlayer? Просто не очень понятно, что ты хочешь получать от нее? Если же вопрос заключается в том, как обратиться к переменной по ее имени, который регулярно всплывает у всех То ответ - никак, С++ язык компилируемый. Единственный вариант - через case string == "aaa" return a; case string == "bbb" return b; ....... <upd> Кстати, Psiho правильно пишет, строки как параметры передавать не стоит, зачем память в пустую гонять, в функциях обычно передают указатель не первый символ и кол-во символов в строке.
|
« Изменён в : 18.02.2007 в 07:30:20 пользователем: Force_Majeure » |
Зарегистрирован |

|
|
|
jarni [Гарный хлопец]
Прирожденный Джаец
Мне нечего сказать.

Пол:  Репутация: +306
|
 |
Re: С++ /надо срочно изучить/ « Ответ #17 от 18.02.2007 в 12:52:20 » |
|
Quote:/*Функция, которая должна брать значение переменной с именем из sStat у игрока pPlayer.*/ int Player::GetPlayerStat(player pPlayer, string sStat) { Как взять значение из стринга и поставить его вместо имени переменной? } |
| Если я правильно тебя понял то ты хочеш делать такую вещь GetPlayerStat( /*Как сказал Force_Majeure эта переменная тебе абсолютно не нужна*/, "Wisdom"); А возвращатся как int должно значение iWisdom. Методов решения даной проблемы на скорую руку могу предложыть два: 1) для каждой переменной создавать свой метод: int GetWisdom const { return iWsidom; } int GetStrength const { return iStrength; } 2) или написать перечисление и в метод взятия значения передавать элемент перечисления. Тогда клас будет выглядеть так: class Player //Собственно сам класс { public: enum Stats { enStrength = 0, enWisdom, enCharisma, enMaxStats }; //Конструкторы Player(); ~Player(); int GetPlayerStat( Stat sStat ) const; //Основные статы protected: int iStrength; int iWisdom; int iCharisma; }; /*Функция, которая должна брать значение переменной с именем из sStat у игрока pPlayer.*/ int Player::GetPlayerStat(Stats sStat) const { switch( sStat ) { case enStrength: return iStrength; case enWisdom: return iWisdom; case enCharisma: return iCharisma; } return -1; } Но если у тебя все статы одного типа то сделай из них масив int m_anStats[enMaxStats]; и потом метод будет выглядеть многим проще: int Player::GetPlayerStat(Stats sStat) const { S_ASSERT( sStat < enMaxStats) //или банальное if ( sStat < 0 || sStat > enMaxStats) return -1; return m_anStats[ sStat ]; }
|
|
Зарегистрирован |
Don't worry, be happy.
|
|
|
Clayman [Наш человек!]
Прирожденный Джаец
back into the game

Пол:  Репутация: +440
|
 |
Re: С++ /надо срочно изучить/ « Ответ #18 от 19.02.2007 в 13:17:35 » |
|
Всем спасибо. Обошелся массивом, лишние параметры из функций убрал. и поять испытываю очень гадкое чувство, когда код работает без проблем, но почему- не ясно
|
|
Зарегистрирован |
Не верь в худо!
|
|
|
jarni [Гарный хлопец]
Прирожденный Джаец
Мне нечего сказать.

Пол:  Репутация: +306
|
 |
Re: С++ /надо срочно изучить/ « Ответ #19 от 19.02.2007 в 13:43:14 » |
|
2Clayman: А ты спрашывай - мож кто знает
|
|
Зарегистрирован |
Don't worry, be happy.
|
|
|
Clayman [Наш человек!]
Прирожденный Джаец
back into the game

Пол:  Репутация: +440
|
 |
Re: С++ /надо срочно изучить/ « Ответ #20 от 19.02.2007 в 20:37:29 » |
|
Еще пара вопросов. Quote: Кстати, Psiho правильно пишет, строки как параметры передавать не стоит, зачем память в пустую гонять, в функциях обычно передают указатель не первый символ и кол-во символов в строке. |
| Т.е. если без поинтеров, то берется часть памяти с переменной, передается в функцию и затем возвращается обратно? А с поинтерами все происходит на том же участке? Quote: int GetWisdom const { return iWsidom; } int GetStrength const { return iStrength; } |
| А зачем const?
|
|
Зарегистрирован |
Не верь в худо!
|
|
|
Force_Majeure [Непреодолимая сила]
Прирожденный Джаец
Ах, было б только с кем поговорить ...

Пол:  Репутация: +526
|
 |
Re: С++ /надо срочно изучить/ « Ответ #21 от 20.02.2007 в 07:57:54 » |
|
2Clayman: При передаче переменных в функцию в ее области видимости создаются копии этих переменных с которыми и идет работа внутри функции. Соответственно если ты передаешь целую строку текста, в памяти будет выделен нужный объем и в него скопирована строка. Если же ты передаешь только указатель, будут выделены всего 4 байта и в них скопирован указатель на то же место в памяти, где уже хранится твоя текстовая строка. В результате, из области видимости функции ты доступ к строке имеешь, а лишнюю память не занимаешь. Почему jarni предлагает делать константные методы для возврата всего одного значения - мне не понятно. Константные функции обычно используются там, где нужно запретить меня данные внутри функции, да и то редко, обычно для этого используют передачу константных параметров в функции. Хотя мож я чего не знаю здесь .
|
|
Зарегистрирован |

|
|
|
jarni [Гарный хлопец]
Прирожденный Джаец
Мне нечего сказать.

Пол:  Репутация: +306
|
 |
Re: С++ /надо срочно изучить/ « Ответ #22 от 20.02.2007 в 09:54:23 » |
|
2Clayman: 2Force_Majeure: Это как бы правило хорошего тона в программировании. Все что не меняет объект или его части должно быть константным. В таком простом примере здесь пользы от это и вправду невидно, но приучившысь следить за тем какие методи пишеш и что там делаешь, получаешь большую выгоду в меньшем количестве ошыбок. 2Force_Majeure: Для функцый константных параметров хватает, но для методов класа совсем нет, поскольку сама по себе передача параметров уже означает что в методе будет что-то менятся. Если нет, то метод делать константным . Использование конст "обязательно" в случае указателей и референцый вплоть до таких "зверских" константных методов как const char * GetName() const { return acName; }. Такое написание избавляет програмиста от головной боли при поиске простых ошибок вробе if ( a.GetName() = "Player" ) ... где вместо "=" должно было быть "==". Ну и т.д и т.п.
|
|
Зарегистрирован |
Don't worry, be happy.
|
|
|
jarni [Гарный хлопец]
Прирожденный Джаец
Мне нечего сказать.

Пол:  Репутация: +306
|
 |
Re: С++ /надо срочно изучить/ « Ответ #23 от 20.02.2007 в 09:59:22 » |
|
2Clayman: Quote:то берется часть памяти с переменной, передается в функцию и затем возвращается обратно? |
| Дело в том что обратно не возвращается. Как сказал Force_Majeure ты будеш работать с локальной копией, а значит все изменения которые были в нее внесены так и умрут вместе с этой копией после окончания работы метода. А то что ты передавал туда так и останется в неизмененном виде. Вообще сила С++ как раз в указателях и прямой работе с участками памяти. Для всего что имеет размер больше 4 байтов желательно использовать указатели или референсы.
|
|
Зарегистрирован |
Don't worry, be happy.
|
|
|
Force_Majeure [Непреодолимая сила]
Прирожденный Джаец
Ах, было б только с кем поговорить ...

Пол:  Репутация: +526
|
 |
Re: С++ /надо срочно изучить/ « Ответ #24 от 20.02.2007 в 14:06:04 » |
|
2jarni: Это уже вопрос стилей программирования Я лично придерживаюсь мнения, что любые спецификаторы нужно ставить только тогда, кога четко знаешь, для чего они нужны именно здесь. Писать что-то только потому, что "так принято" мне не кажется правильным. Хотя это личное дело каждого программиста
|
|
Зарегистрирован |

|
|
|
jarni [Гарный хлопец]
Прирожденный Джаец
Мне нечего сказать.

Пол:  Репутация: +306
|
 |
Re: С++ /надо срочно изучить/ « Ответ #25 от 20.02.2007 в 14:09:33 » |
|
2Force_Majeure: С твоим мнением польностью согласен и свою точку зрения (свой стиль) никому не навязываю. Хорошо что спецыфикаторы есть но ими не пользуються, чем если бы их не было а нужда в них была .
|
|
Зарегистрирован |
Don't worry, be happy.
|
|
|
Clayman [Наш человек!]
Прирожденный Джаец
back into the game

Пол:  Репутация: +440
|
 |
Re: С++ /надо срочно изучить/ « Ответ #26 от 16.03.2007 в 21:24:24 » |
|
Еще одни вопрос: есть следующая иерархия классов class PositionedObject { //конструкторы эт цетера } class PositionedSprite:public PositionedObject { //еще пяток функций } class PositionedButton:public PositionedSprite { //конструкторы и самое главное... void SetState(int iState); } void PositionedButton::SetState(iState){} void main()//не совсем main, на самом деле, там специальный цикл.Но это не важно { PositionedObject psObject=new PositionedButton(/*аргументы*/[i]); psObject->SetState(1);[i]}//не пашет ибо Offtop:[C++ Error] Unit1.cpp(66): E2316 'SetState' is not a member of 'PositionedObject' |
|
Если в материнском (первом) классе объявить virtual void SetState, то код функции ищется в PositionedSprite(второй класс), а не в PositionedButton. Если заявить SetState как виртуальную еще и в PositioneSprite, то получается вообще черти что. Есть какие-нибудь мысли? ЗЫ Если кратко: как получить доступ к функции из дочернего класса? Всем спасибо }
|
« Изменён в : 16.03.2007 в 21:26:19 пользователем: Clayman » |
Зарегистрирован |
Не верь в худо!
|
|
|
Force_Majeure [Непреодолимая сила]
Прирожденный Джаец
Ах, было б только с кем поговорить ...

Пол:  Репутация: +526
|
 |
Re: С++ /надо срочно изучить/ « Ответ #27 от 17.03.2007 в 06:25:10 » |
|
Если ты в мейне хочешь вызывать функцию именно дочернего класса без оглядки на предков, зачем ты объект объявляешь как PositionedObject ? Объявляй его как PositionedButton: main ( PositionedButton psObject=new PositionedButton(void); psObject->SetState(1); } Если же тебе нужен вызов SetState именно как виртуальной функции, объявляй ее в родительском класе PositionedObject как виртуальную (реализацию делать не нужно). Виртуальной она останется для всех потомков любого уровня. Тогда у тебя получится примерно так: class PositionedObject { virtual viod SetState(int iState); } class PositionedButton:public ....... { } void PositionedButton::SetState(int iState){} тогда в мейне ты можешь вызывать ее как раз из объекта, определенного как PositionedObject и будет вызываться именно функция с реализацией в классе PositionedButton main ( PositionedObject psObject=new PositionedButton(void); psObject->SetState(1); } Если же при таком наследовании функция SetState переопредлелялась несколько раз, например у нее есть своя реализация в классах PositionedObject, PositionedSprite, PositionedButton и тебе точно нужно указать, функцию какого класса ты хочешь вызывать - указывай этот класс специально при вызове: main ( PositionedObject psObject=new PositionedButton(void); psObject->PositionedSprite::SetState(1); }
|
|
Зарегистрирован |

|
|
|
Clayman [Наш человек!]
Прирожденный Джаец
back into the game

Пол:  Репутация: +440
|
 |
Re: С++ /надо срочно изучить/ « Ответ #28 от 17.03.2007 в 17:31:24 » |
|
2Force_Majeure: Спасибо Правда, я вчера решил переписать этот кусок. Но все равно +1 Бай зе вэй, есть ли способ сконвертировать стандартный C++`шный string в char array? Я для проекта использую сторонний движок, в который очень глубоко вделана работа с массивами, а стринги не поддерживаются вовсе. А мне как раз гораздо удобнее было бы передавать аргументы в виде стрингов. Трогать чужой код страшно
|
|
Зарегистрирован |
Не верь в худо!
|
|
|
jarni [Гарный хлопец]
Прирожденный Джаец
Мне нечего сказать.

Пол:  Репутация: +306
|
 |
Re: С++ /надо срочно изучить/ « Ответ #29 от 17.03.2007 в 21:42:32 » |
|
2Clayman: Э, нету у С++ стандартного типа string. Если ты имеешь ввиду CString класс, то чтобы из него что-то достать нужно будет или воспользоваться встроенными методами для возвращения указателя на сохраненные даные или целой копии данных (целую строку), или же воспользовавшысь функцыей вроде _tcscpy_s. И не забывай что строки нужно передавать через указатель (или через указатель на CString) иначе будеш гонять кучу памяти туда-обратно.
|
|
Зарегистрирован |
Don't worry, be happy.
|
|
|
Clayman [Наш человек!]
Прирожденный Джаец
back into the game

Пол:  Репутация: +440
|
 |
Re: С++ /надо срочно изучить/ « Ответ #30 от 17.03.2007 в 21:56:21 » |
|
2jarni: Quote:Э, нету у С++ стандартного типа string |
| Вот здесь утверждают, что есть. Ну или не у совсем стандартного, а у std::string, в общем у того класса, что Borland Builder подключается через #include<string>
|
|
Зарегистрирован |
Не верь в худо!
|
|
|
jarni [Гарный хлопец]
Прирожденный Джаец
Мне нечего сказать.

Пол:  Репутация: +306
|
 |
Re: С++ /надо срочно изучить/ « Ответ #31 от 17.03.2007 в 22:17:04 » |
|
Ну, это класс, а не стандартный тип. Но, это уже придирки с моей стороны. В любом случае у него есть методы возврата обычных массивов символов, метод data(). Вот только он возвращает константный указатель так что менять данные скорей всего что не получится (если это надо).
|
|
Зарегистрирован |
Don't worry, be happy.
|
|
|
Satan`s Claws [Воскресший демон-хранитель]
Прирожденный Джаец
Я? верю? в Пакоса?
Пол:  Репутация: +191
|
 |
Re: С++ /надо срочно изучить/ « Ответ #32 от 17.03.2007 в 23:11:34 » |
|
*уже три года пишуший исключительно в ссылках, и с ужасом вспоминающий, что можно еще и по значению параметры передавать
|
|
Зарегистрирован |
как-нить в другой раз
|
|
|
Force_Majeure [Непреодолимая сила]
Прирожденный Джаец
Ах, было б только с кем поговорить ...

Пол:  Репутация: +526
|
 |
Re: С++ /надо срочно изучить/ « Ответ #33 от 18.03.2007 в 06:57:29 » |
|
2Clayman: Если ты пользуешься билдером, там есть встроенный класс строк AnsiString. По функциям тоже самое, что СТЛ-вский std::string который ты используешь, но для билдера - удобнее. Сконвертировать один тип в другой нельзя, можно только скопировать строку из типа "с 0 на конце" в массив символов. Однако обычно ничего конвертировать и не нужно т.к. у обоих этих классов есть оператор возврата указателя на первый символ строки, что обычно и используется при вызовах процедур: .c_str()
|
|
Зарегистрирован |

|
|
|
Clayman [Наш человек!]
Прирожденный Джаец
back into the game

Пол:  Репутация: +440
|
 |
Re: С++ /надо срочно изучить/ « Ответ #34 от 18.03.2007 в 11:59:41 » |
|
Quote:т.к. у обоих этих классов есть оператор возврата указателя на первый символ строки, что обычно и используется при вызовах процедур: .c_str() |
| А что потом с этим первым символом делать?
|
|
Зарегистрирован |
Не верь в худо!
|
|
|
Force_Majeure [Непреодолимая сила]
Прирожденный Джаец
Ах, было б только с кем поговорить ...

Пол:  Репутация: +526
|
 |
Re: С++ /надо срочно изучить/ « Ответ #35 от 18.03.2007 в 15:11:20 » |
|
Передавать в процедуру Например если есть вызов такой процедуры viod Proc(char* aaa); а у тебя есть тип std::string std::string bbb = "xxx"; то в процедуру его передаешь как: Proc(bbb.c_str());
|
|
Зарегистрирован |

|
|
|
Ushwood [ДжАдай]
Прирожденный Джаец
May the Force be with you

Пол:  Репутация: +562
|
 |
Re: С++ /надо срочно изучить/ « Ответ #36 от 28.09.2008 в 13:21:08 » |
|
Чайницкий вопрос по С++ (конкретно по Visual Studio 6.0, но, полагаю, это не имеет значения). Оно вычисляет логическое выражение до конца или пока не станет ясно его значение? К примеру, в выражении типа if((i==i+1)&&(i++)) блаблабла; будет ли i приращиваться на единицу?
|
|
Зарегистрирован |
Мои текущие переводы: Червь арка 28, версия 03.09.23 Связь сердец, том 9, версия 10.08.23
|
|
|
jarni [Гарный хлопец]
Прирожденный Джаец
Мне нечего сказать.

Пол:  Репутация: +306
|
 |
Re: С++ /надо срочно изучить/ « Ответ #37 от 28.09.2008 в 13:25:37 » |
|
2Ushwood: Нет, если первое выражение FALSE. Второе уже не вычисляется в таком случае.
|
« Изменён в : 28.09.2008 в 13:26:27 пользователем: jarni » |
Зарегистрирован |
Don't worry, be happy.
|
|
|
Ushwood [ДжАдай]
Прирожденный Джаец
May the Force be with you

Пол:  Репутация: +562
|
 |
Re: С++ /надо срочно изучить/ « Ответ #38 от 28.09.2008 в 13:39:15 » |
|
2jarni: мерси ЗЫ. Предложение к модераторам: не переименовать ли тему? Сдается мне, если то, что в скобочках, из названия убрать, то оно будет гораздо лучше отражать суть .
|
« Изменён в : 28.09.2008 в 14:27:48 пользователем: Ushwood » |
Зарегистрирован |
Мои текущие переводы: Червь арка 28, версия 03.09.23 Связь сердец, том 9, версия 10.08.23
|
|
|
Strax5 [Пятижды пуганый]
Прирожденный Джаец
Дорогу осилит бегущий

Пол:  Репутация: +647
|
 |
Re: С++ /надо срочно изучить/ « Ответ #39 от 10.11.2008 в 18:48:33 » |
|
2Ushwood: Много таких тем на форуме, которые бестолково начатые вместо того, чтобы уйти во флуд, мутировали в нечто полезное.
|
|
Зарегистрирован |
|
|
|
Ushwood [ДжАдай]
Прирожденный Джаец
May the Force be with you

Пол:  Репутация: +562
|
 |
Re: С++ /надо срочно изучить/ « Ответ #40 от 07.01.2009 в 13:24:26 » |
|
Если приходится в одном и том же участке программы постоянно работать с переменной типа struct, конкретно с ее полями - есть ли способ избавиться от необходимости писать полное имя переменной, а ограничиваться только именем поля? Аналогично оператору with в Паскале?
|
|
Зарегистрирован |
Мои текущие переводы: Червь арка 28, версия 03.09.23 Связь сердец, том 9, версия 10.08.23
|
|
|
jarni [Гарный хлопец]
Прирожденный Джаец
Мне нечего сказать.

Пол:  Репутация: +306
|
 |
Re: С++ Вопросы и ответы. « Ответ #41 от 07.01.2009 в 13:30:55 » |
|
2Ushwood: Такого способа нету. Можеш создать референс на поле и уже работать с ним. Code: struct SMyStruct { int m_nA; CSomeClass m_SomeClass; } ... SMyStruct sStruct; int & rA = sStruct.m_nA; CSomeClass & rSomeClass = sStruct.m_SomeClass; |
|
|
|
Зарегистрирован |
Don't worry, be happy.
|
|
|
Legend [Переводчик]
Прирожденный Джаец
надА

Пол:  Репутация: +864
|
 |
Re: С++ /надо срочно изучить/ « Ответ #42 от 07.01.2009 в 13:39:31 » |
|
Ничего, если я не совсем в тему вопрос задам? Подскажите книжку для самостоятельного обучения Явы (и линукса тоже) под vi и Eclipse. Желательно на русском. И ссылочку тоже было бы неплохо.
|
|
Зарегистрирован |
- Удельный вес ядра твоей планеты думай! - Эээ...
|
|
|
Ushwood [ДжАдай]
Прирожденный Джаец
May the Force be with you

Пол:  Репутация: +562
|
 |
Re: С++ /надо срочно изучить/ « Ответ #43 от 07.01.2009 в 23:36:46 » |
|
2jarni: Угу, я так и подозревал. Жалко .
|
|
Зарегистрирован |
Мои текущие переводы: Червь арка 28, версия 03.09.23 Связь сердец, том 9, версия 10.08.23
|
|
|
jarni [Гарный хлопец]
Прирожденный Джаец
Мне нечего сказать.

Пол:  Репутация: +306
|
 |
Re: С++ /надо срочно изучить/ « Ответ #44 от 08.01.2009 в 09:09:27 » |
|
2Ushwood: Чесно говоря никогда за свою практику не имел откровенной необходимости в такой фиче. Если какое-то поле используется слишком часто, то всегда хватает приведенного мной метода, причём имя референса можно сделать покороче чем например было имя поля, так даже удобней.
|
|
Зарегистрирован |
Don't worry, be happy.
|
|
|
Ushwood [ДжАдай]
Прирожденный Джаец
May the Force be with you

Пол:  Репутация: +562
|
 |
Re: С++ /надо срочно изучить/ « Ответ #45 от 08.01.2009 в 16:02:42 » |
|
2jarni: Я в ситуации, когда не одно, а сразу несколько полей одной переменной в одном месте используются часто... и приведенный тобой метод будет еще более громоздким, чем прямое использование переменной .
|
|
Зарегистрирован |
Мои текущие переводы: Червь арка 28, версия 03.09.23 Связь сердец, том 9, версия 10.08.23
|
|
|
jarni [Гарный хлопец]
Прирожденный Джаец
Мне нечего сказать.

Пол:  Репутация: +306
|
 |
Re: С++ /надо срочно изучить/ « Ответ #46 от 08.01.2009 в 16:10:53 » |
|
2Ushwood: Ну всё наверное зависит от имени переменной и её полей. SSomeStruct m_aVeryLongNameAsForStructure; ... aVeryLongNameAsForStructure.m_aMuchLongerVariableNameThanNeeded + (aVeryLongNameAsForStructure.m_aMuchLongerVariableNameThanNeeded2_1 / 2) - ... Запись же: int & r1 = aVeryLongNameAsForStructure.m_aMuchLongerVariableNameThanNeeded; int & r2 = aVeryLongNameAsForStructure.m_aMuchLongerVariableNameThanNeeded2_1; и дальнейшее использование во всех местах только r1 и r2 заметно сократит и упростит выражение. Причём имя можно же сделать любое (главное чтобы понятно было).
|
|
Зарегистрирован |
Don't worry, be happy.
|
|
|
Ushwood [ДжАдай]
Прирожденный Джаец
May the Force be with you

Пол:  Репутация: +562
|
 |
Re: С++ « Ответ #47 от 08.01.2009 в 19:56:03 » |
|
2jarni: угу, спасибо . Только у меня имена все же покороче, чем в твоем примере, а вот полей много... причем есть поля типа массив... короче, твой метод вряд ли сократит размер кода Ну да все равно - буду иметь в виду на будущее, глядишь, и пригодится...
|
« Изменён в : 08.01.2009 в 19:59:05 пользователем: Ushwood » |
Зарегистрирован |
Мои текущие переводы: Червь арка 28, версия 03.09.23 Связь сердец, том 9, версия 10.08.23
|
|
|
jarni [Гарный хлопец]
Прирожденный Джаец
Мне нечего сказать.

Пол:  Репутация: +306
|
 |
Re: С++ « Ответ #48 от 24.07.2009 в 02:56:04 » |
|
Спрошу здесь. Кто нибудь писал на ассемблере под линукс, в GCC inline assembler? У него синтаксис другой чем у Интела, мне нужно маленький кусочек перевести.
|
« Изменён в : 24.07.2009 в 02:56:18 пользователем: jarni » |
Зарегистрирован |
Don't worry, be happy.
|
|
|
Force_Majeure [Непреодолимая сила]
Прирожденный Джаец
Ах, было б только с кем поговорить ...

Пол:  Репутация: +526
|
 |
Re: С++ « Ответ #49 от 29.07.2009 в 23:56:03 » |
|
Кто пользуется VC2005 или 2008, подскажите какой-нибудь приличный инструмент для отлова утечек памяти. Попробовал Deleaker, но или я не разобрался как его использовать, или он не ловит даже очевидные утечки (пробовал new без delete - не находит такое).
|
|
Зарегистрирован |

|
|
|
|