A.I.M. Jagged Alliance2

Добро пожаловать, Гость. Пожалуйста, выберите:
Вход || Регистрация.
25.04.2024 в 14:19:37

Главная Главная Помощь Помощь Поиск Поиск Участники Участники Вход Вход Регистрация Регистрация
A.I.M. « С++ Вопросы и ответы. »
   A.I.M.
   Генерал
   Ъ и Ь
(Модераторы: Zed, cha, Снайпер)
   С++ Вопросы и ответы.
« Предыдущая Тема | Следующая Тема »
  Тема:  С++ Вопросы и ответы.             Страниц: 1 2 3 4 5 6 7 Прочитано 49385 раз
Luficer
[Аццкий Сотона]
Прирожденный Джаец

Да, это негр :)


Ё-мэйл

Пол:
Репутация: +318
С++ Вопросы и ответы.
« от 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
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +526
Re: С++    /надо срочно изучить/
« Ответ #2 от 26.01.2006 в 09:01:52 »

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

bayan4.gif
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
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +526
Re: С++    /надо срочно изучить/
« Ответ #4 от 26.01.2006 в 09:48:36 »

2Luficer:  
В дополнение, все-таки руководство Страуструпа и небольшой туториал по С++ Builder, для начала на нем, наверное, тебе будет проще.
Не умаляя важности STL, не думаю, что для задачи, что ты привел в начале нужно им загружаться.
Вот прицепился!       Book.zip
Зарегистрирован

bayan4.gif
Force_Majeure
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

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

Страуструп
Вот прицепился!       Straustrup1.zip
Зарегистрирован

bayan4.gif
Force_Majeure
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

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

Страуструп
Вот прицепился!       Straustrup2.zip
Зарегистрирован

bayan4.gif
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
[Аццкий Сотона]
Прирожденный Джаец

Да, это негр :)


Ё-мэйл

Пол:
Репутация: +318
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
 
8) 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
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +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 » Зарегистрирован

bayan4.gif
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
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +526
Re: С++    /надо срочно изучить/
« Ответ #21 от 20.02.2007 в 07:57:54 »

2Clayman:  
При передаче переменных в функцию в ее области видимости создаются копии этих переменных с которыми и идет работа внутри функции. Соответственно если ты передаешь целую строку текста, в памяти будет выделен нужный объем и в него  скопирована строка. Если же ты передаешь только указатель, будут выделены всего 4 байта и в них скопирован указатель на то же место в памяти, где уже хранится твоя текстовая строка. В результате, из области видимости функции ты доступ к строке имеешь, а лишнюю память не занимаешь.
 
Почему jarni предлагает делать константные методы для возврата всего одного значения - мне не понятно. Константные функции обычно используются там, где нужно запретить меня данные внутри функции, да и то редко, обычно для этого используют передачу константных параметров в функции. Хотя мож я чего не знаю здесь :).
Зарегистрирован

bayan4.gif
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
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +526
Re: С++    /надо срочно изучить/
« Ответ #24 от 20.02.2007 в 14:06:04 »

2jarni:  
Это уже вопрос стилей программирования :) Я лично придерживаюсь мнения, что любые спецификаторы нужно ставить только тогда, кога четко знаешь, для чего они нужны именно здесь. Писать что-то только потому, что "так принято" мне не кажется правильным. Хотя это личное дело каждого программиста :)
Зарегистрирован

bayan4.gif
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:

 
Если в материнском (первом) классе объявить virtual void SetState, то код функции ищется в PositionedSprite(второй класс), а не в PositionedButton. Если заявить SetState как виртуальную еще и в PositioneSprite, то получается вообще черти что. Есть какие-нибудь мысли?
 
ЗЫ Если кратко: как получить доступ к функции из дочернего класса?
 
Всем спасибо:)
 
}
« Изменён в : 16.03.2007 в 21:26:19 пользователем: Clayman » Зарегистрирован

Не верь в худо!

Force_Majeure
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +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);
}
Зарегистрирован

bayan4.gif
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 »

*уже три года пишуший исключительно в ссылках, и с ужасом вспоминающий, что можно еще и по значению параметры передавать  :o
 
 : rolleyes :
Зарегистрирован

как-нить в другой раз
Force_Majeure
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +526
Re: С++    /надо срочно изучить/
« Ответ #33 от 18.03.2007 в 06:57:29 »

2Clayman:  
Если ты пользуешься билдером, там есть встроенный класс строк AnsiString. По функциям тоже самое, что СТЛ-вский std::string который ты используешь, но для билдера - удобнее.
Сконвертировать один тип в другой нельзя, можно только скопировать строку из типа "с 0 на конце" в массив символов. Однако обычно ничего конвертировать и не нужно т.к. у обоих этих классов есть оператор возврата указателя на первый символ строки, что обычно и используется при вызовах процедур: .c_str()
Зарегистрирован

bayan4.gif
Clayman
[Наш человек!]
Прирожденный Джаец

back into the game


Ё-мэйл

Пол:
Репутация: +440
Re: С++    /надо срочно изучить/
« Ответ #34 от 18.03.2007 в 11:59:41 »

Quote:
т.к. у обоих этих классов есть оператор возврата указателя на первый символ строки, что обычно и используется при вызовах процедур: .c_str()

А что потом с этим первым символом делать?
Зарегистрирован

Не верь в худо!

Force_Majeure
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +526
Re: С++    /надо срочно изучить/
« Ответ #35 от 18.03.2007 в 15:11:20 »

Передавать в процедуру :)
Например если есть вызов такой процедуры
viod Proc(char* aaa);
а у тебя есть тип std::string
std::string bbb = "xxx";
то в процедуру его передаешь как:
Proc(bbb.c_str());
Зарегистрирован

bayan4.gif
Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++    /надо срочно изучить/
« Ответ #36 от 28.09.2008 в 13:21:08 »

Чайницкий вопрос по С++ (конкретно по Visual Studio 6.0, но, полагаю, это не имеет значения).
 
Оно вычисляет логическое выражение до конца или пока не станет ясно его значение? К примеру, в выражении типа
if((i==i+1)&&(i++)) блаблабла;
будет ли i приращиваться на единицу?
Зарегистрирован

Мои текущие переводы:
Червь эпилог, версия 23.04.24

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


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++    /надо срочно изучить/
« Ответ #38 от 28.09.2008 в 13:39:15 »

2jarni: мерси :)
 
ЗЫ. Предложение к модераторам: не переименовать ли тему? Сдается мне, если то, что в скобочках, из названия убрать, то оно будет гораздо лучше отражать суть ;).
« Изменён в : 28.09.2008 в 14:27:48 пользователем: Ushwood » Зарегистрирован

Мои текущие переводы:
Червь эпилог, версия 23.04.24

Strax5
[Пятижды пуганый]
Прирожденный Джаец

Дорогу осилит бегущий


Ё-мэйл

Пол:
Репутация: +647
Re: С++    /надо срочно изучить/
« Ответ #39 от 10.11.2008 в 18:48:33 »

2Ushwood: Много таких тем на форуме, которые бестолково начатые вместо того, чтобы уйти во флуд, мутировали в нечто полезное.
Зарегистрирован

Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++    /надо срочно изучить/
« Ответ #40 от 07.01.2009 в 13:24:26 »

Если приходится в одном и том же участке программы постоянно работать с переменной типа struct, конкретно с ее полями - есть ли способ избавиться от необходимости писать полное имя переменной, а ограничиваться только именем поля? Аналогично оператору with в Паскале?
Зарегистрирован

Мои текущие переводы:
Червь эпилог, версия 23.04.24

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


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++    /надо срочно изучить/
« Ответ #43 от 07.01.2009 в 23:36:46 »

2jarni: Угу, я так и подозревал. Жалко :(.
Зарегистрирован

Мои текущие переводы:
Червь эпилог, версия 23.04.24

jarni
[Гарный хлопец]
Прирожденный Джаец

Мне нечего сказать.


Ё-мэйл

Пол:
Репутация: +306
Re: С++    /надо срочно изучить/
« Ответ #44 от 08.01.2009 в 09:09:27 »

2Ushwood: Чесно говоря никогда за свою практику не имел откровенной необходимости в такой фиче. Если какое-то поле используется слишком часто, то всегда хватает приведенного мной метода, причём имя референса можно сделать покороче чем например было имя поля, так даже удобней.
Зарегистрирован

Don't worry, be happy.
Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++    /надо срочно изучить/
« Ответ #45 от 08.01.2009 в 16:02:42 »

2jarni: Я в ситуации, когда не одно, а сразу несколько полей одной переменной в одном месте используются часто... и приведенный тобой метод будет еще более громоздким, чем прямое использование переменной :(.
Зарегистрирован

Мои текущие переводы:
Червь эпилог, версия 23.04.24

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


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++
« Ответ #47 от 08.01.2009 в 19:56:03 »

2jarni: угу, спасибо :).
Только у меня имена все же покороче, чем в твоем примере, а вот полей много... причем есть поля типа массив... короче, твой метод вряд ли сократит размер кода :)
Ну да все равно - буду иметь в виду на будущее, глядишь, и пригодится...
« Изменён в : 08.01.2009 в 19:59:05 пользователем: Ushwood » Зарегистрирован

Мои текущие переводы:
Червь эпилог, версия 23.04.24

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
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +526
Re: С++
« Ответ #49 от 29.07.2009 в 23:56:03 »

Кто пользуется VC2005 или 2008, подскажите какой-нибудь приличный инструмент для отлова утечек памяти. Попробовал Deleaker, но или я не разобрался как его использовать, или он не ловит даже очевидные утечки (пробовал new без delete - не находит такое).
Зарегистрирован

bayan4.gif
Страниц: 1 2 3 4 5 6 7  Послать Тему Послать Тему Печатать Печатать

« Предыдущая Тема | Следующая Тема »

Статистика. Размер данных: 162774 GZip: off
A.I.M. » Powered by YaBB Modification 4 (v.4.0.0-pre)!
YaBB © 2000-2003. All Rights Reserved.