Автор Тема: Програмирование на C++  (Прочитано 76698 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн MetalliC

  • Технический консультант
  • Сообщений: 9386
  • Пол: Мужской
  • Demul team / MAME developer
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #450 : 11 Февраль 2013, 00:36:16 »
Цитата: gepar
Я лично начинал с книги Дейтелов, но это реально книга для начинающих которые никогда не программировали на языках высокого уровня, если есть время то можешь начать с этой книги - она хорошая, но большая.

+1 Дейтел&Дейтел для начинающих имхо самое оно, да и не только для начинающих

Цитата: Ti_
Вот собственно что это за справочник. Некий programmers reference manual ?

каноничъной книжкой по C является "Керниган и Ричи. Язык C", по C++ - "Бьерн Страуструп. Язык программирования С++", но в плане освоения языка они имхо не очень, как на мой взгляд они более рассчитаны на людей, которые уже знают один или несколько языков программирования высокого уровня.

Цитата: Ti_
Думаю начать с консольных приложений в VS2008EE.

правильно тебе говорят - ставь 2010 или 2012, для консольных приложений достаточно и бесплатных Express-версий, но если планируешь учиться делать программки с GUI под винду - лучше ставь (пиратские)  Pro или Ultimate - там есть редактор форм, можно конечно ресурсы и ручками делать в express, но это из серии в гамаке стоя.

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #451 : 11 Февраль 2013, 00:44:49 »
Спасибо за ответы. Попробую тогда 2010 pro,  но  в builder тоже надо будет заглянуть.

Цитата
+1 Дейтел&Дейтел для начинающих имхо самое оно, да и не только для начинающих
Да, наверное будет лучше основы смотреть, лучше уж мало изучить но нормально.
« Последнее редактирование: 11 Февраль 2013, 00:52:40 от Ti_ »

Оффлайн MetalliC

  • Технический консультант
  • Сообщений: 9386
  • Пол: Мужской
  • Demul team / MAME developer
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #452 : 11 Февраль 2013, 00:54:39 »
в смысле C++ Builder ? не уверен что в этом есть смысл, пользовался им довольно давно, но на тот момент он был не совсем полноценным - почти все "компоненты" (DCU-шки) были написаны на Дельфи и билдер их использовал при линковке как уже скомпилированные, т.к. честных С++ сорцов этих библиотек не было.
может с тех времен что-то уже изменилось, но осадок остался

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #453 : 11 Февраль 2013, 00:57:05 »
в смысле C++ Builder ? не уверен что в этом есть смысл, пользовался им довольно давно, но на тот момент он был не совсем
Ну вроде как прочитал, что с gui там попроще, чем всякие winapi.   Или VS pro edition уже и предоставляют тоже самое?

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #454 : 11 Февраль 2013, 01:08:13 »
Цитата: MetalliC
каноничъной книжкой по C является "Керниган и Ричи. Язык C", по C++ - "Бьерн Страуструп. Язык программирования С++", но в плане освоения языка они имхо не очень, как на мой взгляд они более рассчитаны на людей, которые уже знают один или несколько языков программирования высокого уровня.

Мне было интересно читать книгу Страуструпа уже после изучения с++ по книге Дейтелов. Там Страуструп вроде должен был уже выпустить новое издание включающее информацию по с++x11 ещё.

MetalliC, ничего не изменилось, разве что борланд слился и его ембрако купили. Ембрако канешн трепыхается как может (уже в прошлом году можно было на билдере писать winRT приложения под win8), но это его не спасает ... Особенно бесит что в этом билдере половины функционала нету и его всё равно надо дописывать руками в итоге получилось что-то типа
билдеровская_фигня
билдеровская_фигня
ВЫЗОВ ВИНАПИ ВОТ ТАКОЙ ДЛИНЫ С КУЧЕЙ ПОПЫТОК ОТОБРАТЬ У БИЛДЕРА ХЕНДЛЕР ОКНА
билдеровская_фигня
билдеровская_фигня
Например когда рисуешь что-то то нельзя даже систему кооридант поменять или перенести точку 0.0 с левого верхнего угла, те даже базового функционала для размещения информации нету. Единственное что меня поразило так это 100500 компонентов, но это только первый 5 минут меня поражало. Через 5 минут я попытался состыковать два компонента и узнал что нифига они не совместимы, например если на TabControl посадить какой-то компонент то с вероятностью 80% он туда не попадёт потому что тот компонент не совместим с ним. В итоге половину логики работы компонентов делаешь сам руками, например мне пришлось самому отслеживать когда на табконтроле переключают страницу и прятать компонент руками, а когда переключались назад на нужную страницу то показывать его ... таким образом создавалось впечатление что элемент и правда принадллежит  TabControl да только это же всё время занимает и выглядит со стороны тупо.

Цитата: Ti_
Спасибо за ответы. Попробую тогда 2010 pro,  но  в builder тоже надо будет заглянуть.

В билдер лучше не заглядывать, не нужен он тебе, он умер и никому программисты на билдере не нужны сейчас. Его только в универах преподы-ископаемые читают на пару с турбо с++ билдером за 91 год.
Добавлено позже:
Цитата: Ti_
Ну вроде как прочитал, что с gui там попроще, чем всякие winapi.   Или VS pro edition уже и предоставляют тоже самое?

Не, оно то проще, но если сравнивать с чистым WINAPI который за 95 год. Тот же MFC удобнее чем билдер и работает по человечески. А вообще если ты гоняешься за GUI то это шарпик надо  ... да только не хочу тебя разочаровывать но чтобы писать GUI и понимать что ты пишешь и как оно работает тебе год понадобиться на то чтобы писать  не GUI :)

Оффлайн ColaKid

  • Пользователь
  • Сообщений: 365
  • Пол: Мужской
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #455 : 20 Март 2013, 14:50:01 »
Поясните по хардкору, можно ли вынести определение такого метода в .cpp - файл, и если да, то как?

class my_class {

    <....>

public:

    my_class& operator << ( const std::wstring& wstr) {

        <...>

        return *this;
    }
};


Сейчас метод определен в .h - файле.


Update: как всегда, сам нашел ответ на свой вопрос  :)

У меня объявление класса находится в неймспейсе, а в cpp файле я его указать забыл :hang:
« Последнее редактирование: 20 Март 2013, 23:01:38 от ColaKid »

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #456 : 20 Март 2013, 22:57:58 »
ColaKid, разбивка на объявление и реализацию классов делается для удобства, а не чтобы сделать.

Оффлайн ColaKid

  • Пользователь
  • Сообщений: 365
  • Пол: Мужской
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #457 : 20 Март 2013, 22:58:59 »
ColaKid, разбивка на объявление и реализацию классов делается для удобства, а не чтобы сделать.
Понятно, но я же только учусь)

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #458 : 20 Март 2013, 23:00:43 »
Цитата: ColaKid
Понятно, но я же только учусь)

Ок, тогда сделаю вид что я это
Цитата: ColaKid
У меня объявление класса находится в неймспейсе, а в cpp файле я его указать забыл

не видел :)

Оффлайн ColaKid

  • Пользователь
  • Сообщений: 365
  • Пол: Мужской
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #459 : 20 Март 2013, 23:02:14 »
gepar, эмм... почему?  o_0

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #460 : 21 Март 2013, 00:21:47 »
Цитата: ColaKid
gepar, эмм... почему? 

Потому что надпись вверху
using namespace XXX
не делает то что ты дальше написал "в неймспейсе". Это только что-то типа указания "используй короткое имя для всего что лежит в XXX", иначе ты должен писать сам каждый раз какое пространство имён использовать, например XXX.method() , порой в неймспейсе есть другой неймспейс и получается без указаний using в коде что-то типа XXX::YYY::ZZZ.and_we_neeed_to_go_deeper(argument1,OOO::WWW::HH::EE::LL::obj);
Ну а
Цитата: ColaKid
У меня объявление класса находится в неймспейсе

это значит что у тебя там что-то объявлено, а тебе захотелось внести ещё что-то в этот же namespace и ты начинаешь его опять описывать в другом файле (главное не продублировать ничего)... но это я так написал, ты пока этим голову сильно не забивай, а читай книгу свою по с++. Если ещё не выбрал книгу кстати то советую Дяейтелов.

Оффлайн ColaKid

  • Пользователь
  • Сообщений: 365
  • Пол: Мужской
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #461 : 21 Март 2013, 00:37:48 »

Потому что надпись вверху
using namespace XXX
не делает то что ты дальше написал "в неймспейсе"
Ну, такое-то я знаю  :) Я имел в виду примерно вот это:

hpp:

namespace Bicycle {

class log {

log ();

log( const log&) {};

log& operator = ( const log&) {};

public:

static log& Instance () {

static log logInstance;

return logInstance;
}


void Enable ();

<...>

log& operator << ( const std::wstring& wstr) throw ( log_error_t);

log& operator << ( const int& i) throw ( log_error_t);

}; // class

} // namespace Bicycle

cpp:


#include "log.hpp"

using namespace Bicycle;

<...>

Bicycle::log& log::operator << ( const int& i) throw ( log_error_t) {

if ( enabled) {

std::FILE *fp = 0;

if ( _wfopen_s( &fp, wstrFileName.c_str(), L"a, ccs=UTF-16LE")) {

throw log_open_file_error;
}

else {

std::wostringstream String;

String << i;

std::wstring wstrBuf = String.str();

std::fputws( wstrBuf.c_str(), fp);

std::fflush( fp);

if ( std::fclose( fp)) {

throw log_close_file_error;
}

} // else wfopen_s

} // if enabled

return *this;

} // int operator <


У меня, кстати, черновой вариант моей утилитки уже готов, его можно скачать по адресу http://disk.yandex.ru/public/?hash=gfWiMN4WprWzPwsYm3G/EGjBOnIZB370aEplafc0D8U%3D. В ближайшее время планирую причесать немножко код и выложить куда-нибудь.


Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #462 : 21 Март 2013, 00:41:49 »
Цитата: ColaKid
В ближайшее время планирую причесать немножко код и выложить куда-нибудь.

От консольных утилит кончают только гики, так её считай никто и запускать не захочет только услышит слово "консольная".

Оффлайн ColaKid

  • Пользователь
  • Сообщений: 365
  • Пол: Мужской
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #463 : 21 Март 2013, 00:42:50 »

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

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #464 : 21 Март 2013, 01:05:03 »
ColaKid, а, ну я не смотрел, просто ты выложил куски кода где нет никаких упоминаний о подключении чего-либо для графики вот я и решил так )

Оффлайн ColaKid

  • Пользователь
  • Сообщений: 365
  • Пол: Мужской
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #465 : 21 Март 2013, 01:06:02 »
ColaKid, а, ну я не смотрел, просто ты выложил куски кода где нет никаких упоминаний о подключении чего-либо для графики вот я и решил так )
Всё разбито на модули же)

Оффлайн ColaKid

  • Пользователь
  • Сообщений: 365
  • Пол: Мужской
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #466 : 26 Май 2013, 20:33:19 »
Уже стыдно за свой говнокод  :D
log_error_t — надо было до такого додуматься. Такие имена типов зарезервированы для разработчиков компиляторов. Не повторяйте чужих ошибок  :)

Оффлайн Heidr

  • Пользователь
  • Сообщений: 6472
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #467 : 17 Июль 2014, 08:06:25 »
В виндовсе русский текст из файлов выводится нормально, только если файл в кодировке CP1251, а в линуксе - только если в UTF-8. Можно ли что-нибудь сделать, чтобы и там, и там русские буквы читались? Желательно, чтобы текстовый файл остался в UTF-8.

А ещё в виндовсе есть функция Sleep(), которой нет в линуксе, а в линуксе - nanosleep(), которой нет в виндовсе. Есть ли какая-нибудь общая для них функция задержки?

Библиотеки со временем меняются, что ли? Порылся сейчас в своих старых программах 6-8-летней давности, которые писал в Borland C++ 3.1, там обнаружил, что пользовался многими функциями, которые сейчас куда-то пропали. Например, random() и randomize().

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #468 : 17 Июль 2014, 09:57:57 »
Цитата: Heidr
А ещё в виндовсе есть функция Sleep(), которой нет в линуксе, а в линуксе - nanosleep(), которой нет в виндовсе. Есть ли какая-нибудь общая для них функция задержки?

std::this_thread::sleep_for(chrono::milliseconds(1000));
Цитата: Heidr
Библиотеки со временем меняются, что ли?

Дополняются.
Цитата: Heidr
там обнаружил, что пользовался многими функциями, которые сейчас куда-то пропали.

С разными компиляторами в комплекте идут свои определения и процедуры помимо тех что нужны по стандарту, приведённые тобой примеры в стандарт не входят.
Цитата: Heidr
В виндовсе русский текст из файлов выводится нормально, только если файл в кодировке CP1251

Можешь поиграться с кодировкой в настройках консоли в windows.

Оффлайн Infinity

  • Пользователь
  • Сообщений: 906
  • Пол: Мужской
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #469 : 17 Июль 2014, 10:31:09 »
В виндовсе русский текст из файлов выводится нормально, только если файл в кодировке CP1251, а в линуксе - только если в UTF-8.

Не фантазируй. В Линуксе нормально и 1251 и утф-8 показывается. Начиная с вин7,  дефолтная кодировка в винде - утф-8. Так что можешь просто сразу делать все в нормальной кодировке (утф-8).
Для консольных утилит в винде в терминале можешь выбирать эти параметры все - правой кнопкой мыши тык на значок окна слева.

Оффлайн Heidr

  • Пользователь
  • Сообщений: 6472
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #470 : 17 Июль 2014, 11:05:49 »

std::this_thread::sleep_for(chrono::milliseconds(1000));
Компилятор заставил дописать в опции -std=c++11, так и должно быть? Пользуюсь tdm-gcc-4.8.1-3. Но работает, спасибо!

Можешь поиграться с кодировкой в настройках консоли в windows.
Тогда придётся менять настройки консоли на каждом компьютере, где захочется запустить программу. А это не годится.

Ещё я запутался в постфиксных операторах x++ и x--. С префиксными вроде понятно - прежде чем выполнить действие с переменными, сначала меняется значение той, к которой слева приписаны ++ или --, а потом всё как обычно. Вот два примера:
x = 10;
answer = x + (x + x--) + (x + x++);

x = 5;
answer = (--x + 2) + (x-- + 2) * (x + 2) - (x + 2);

Недавно у меня стоял GCC версии 4.7.1-2. Ответы были 50 и 36 соответственно. Выходило так, что выражение вычислялось, будто вместо x++ и x-- стоял просто x, а значение x менялось в самом конце. Обновил компилятор, и стало 47 и 31 :wacko:. Как так?
Не фантазируй. В Линуксе нормально и 1251 и утф-8 показывается. Начиная с вин7,  дефолтная кодировка в винде - утф-8. Так что можешь просто сразу делать все в нормальной кодировке (утф-8).

Добавлено позже:
А ещё я сейчас обнаружил, что в виндовсе я работал с исходниками в windows-1251, так как открывал их из примеров, а IDE создаёт новые в UTF-8. И если в первых в консоли выводились русские буквы после использования функции setlocale (LC_ALL, "Russian") (не из файла, а просто через cout и printf ()), то во вторых - уже нет. 2014 год на дворе, а такие проблемы с кодировками.
« Последнее редактирование: 17 Июль 2014, 12:30:58 от Heidr »

Оффлайн GManiac

  • Пользователь
  • Сообщений: 1284
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #471 : 17 Июль 2014, 12:35:49 »
Вот два примера:
x = 10;
answer = x + (x + x--) + (x + x++);

x = 5;
answer = (--x + 2) + (x-- + 2) * (x + 2) - (x + 2);
Так верстают пишут только мудаки. Не пиши такой код, и будет тебе счастье. Максимум как инкремент указателя массива. Например, в сеговском процессоре стек реализован вот так (и вообще все инкремент/декрементные операции над массивами):
mas[ p++ ] = value;
value = mas[--p];

А в интеловском так (ЕМНИП):
mas[ ++p ] = value;
value = mas[p--]

Добавлено позже:
Я догадываюсь, что это примеры из книги, но ИМХО, вопрос, как оно там будет на самом деле по стандарту и в разных компиляторах (результат разный бывает), не стого того, чтобы им заморачиваться.

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #472 : 17 Июль 2014, 12:57:58 »
Цитата: Heidr
Тогда придётся менять настройки консоли на каждом компьютере, где захочется запустить программу. А это не годится.

Годиться потому что консоль это так для тебя для отладки, а если ты надумаешь распространять что-то всё равно придётся лезть на QT и т.д, ну а для особо желающих поработать с консолью есть SetConsoleOutputCP() засунутый в ifdef и с компиляцией под виндовс онли.
Цитата: Heidr
2014 год на дворе, а такие проблемы с кодировками.

Потому что это никому ненужно, для зануд сделали UTF wchar и wcout, можешь их попробовать, но я опять же таки повторюсь: это никому не нужно и даже тебе. Программки в консоли это так для гиков либо какая-то мелочь с параметрами которую сделать не на английском грех просто таки.

Оффлайн Heidr

  • Пользователь
  • Сообщений: 6472
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #473 : 17 Июль 2014, 13:13:59 »
Я же только учусь программированию, пока мне и консоли хватает. А с оконным интерфейсом проблем с кодировками не будет?
Я догадываюсь, что это примеры из книги, но ИМХО, вопрос, как оно там будет на самом деле по стандарту и в разных компиляторах (результат разный бывает), не стого того, чтобы им заморачиваться.
Это примеры с сайта GameTutorials.com. Там программирование объясняется исходниками с подробными комментариями. Раньше доступ к ним был платным, но на днях стал бесплатным, вот я и решил поизучать Си++. Буду делать на нём World of Warcraft.

Но то, что разные компиляторы по-разному определяют последовательность вычислений, тем более разные версии одного компилятора - это полный ппц, на мой взгляд. За 40 лет так с этим и не определились? А если в ядре линукса много ++ и --, то при компиляции в новом GCC разработчикам придётся лопатить миллионы строк кода, чтобы всё менять?

Я и сам не пользуюсь ++ и -- в арифметических выражениях, но иногда с ними код короче и интересней смотрится. Вот, например, возведение a в степень n:
int result;
while (n--)
 result *= a;
return result;

Обнаружил ещё кое-что. Если в виндовсе считать строку с кириллицей в консоли, то, если setlocale () не использовалась, строка выведется потом нормально, а если использовалась, то нет. Получается, можно или вводить русские буквы, или выводить, но не одновременно? :-\

Оффлайн ColaKid

  • Пользователь
  • Сообщений: 365
  • Пол: Мужской
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #474 : 17 Июль 2014, 16:59:29 »
Компилятор заставил дописать в опции -std=c++11, так и должно быть?
Да, потому что поддержка потоков появилась только в новом стандарте.

Ещё я запутался в постфиксных операторах x++ и x--. С префиксными вроде понятно - прежде чем выполнить действие с переменными, сначала меняется значение той, к которой слева приписаны ++ или --, а потом всё как обычно. Вот два примера:
x = 10;
answer = x + (x + x--) + (x + x++);
Это undefined behavior.

Начиная с вин7,  дефолтная кодировка в винде - утф-8.
Откуда инфа? В NT, вроде, UTF-16 LE всегда был.
« Последнее редактирование: 17 Июль 2014, 17:08:35 от ColaKid »

Оффлайн GManiac

  • Пользователь
  • Сообщений: 1284
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #475 : 17 Июль 2014, 17:44:47 »
Но то, что разные компиляторы по-разному определяют последовательность вычислений, тем более разные версии одного компилятора - это полный ппц, на мой взгляд. За 40 лет так с этим и не определились? А если в ядре линукса много ++ и --, то при компиляции в новом GCC разработчикам придётся лопатить миллионы строк кода, чтобы всё менять?
Всякие best practices и правила хорошего тона в программировании не просто так придумали. Машина создана для человека, а не человек для машины, поэтому код должен быть в первую очередь как можно более понятным и легкочитаемым, потом ещё переносимым и совместимым. Можно надеяться, что ядро писали не студенты, и он к этим стандартам не чувствителен.
Достаточно того, что собрать почти любой чужой проект на сях, не имея конкретно той среды/компиляторов/либ той версии с теми же настройками/опциями/ключами, какие были у автором в момент билда, обычно дерьмовенькое занятие с кучей геморроя.

Цитата
Я и сам не пользуюсь ++ и -- в арифметических выражениях, но иногда с ними код короче и интересней смотрится. Вот, например, возведение a в степень n:
int result;
while (n--)
 result *= a;
return result;
Во-во, а теперь представь, что ты видишь этот код впервые, потому что лопатишь чей-то чужой говнопроект. И тут надо сидеть вкуривать, как оно работает и почему. Или почему не работает. Или почему то работает, то нет, что чаще всего бывает. Например, этот код чувствителен к положению --. Надо ещё помнить, что выражение в скобках действительно, пока n не равно (не "больше", а "не равно"). Если бы это был код вычисления факториала, т.е. умножение шло на n, там бы ещё могло на 0 умножиться. Уже три возможности запутаться в трёх строчках.
Вот этот код намного проще и понятней. Достаточно запомнить один раз на всю жизнь, что для прогона цикла for в N раз от 0 надо ставить знак < N. От единицы <=. Чаще пишут от 0, потому что индексация массивов начинается с 0.
for (int i = 0; i < n; i++ ) result *= a;

Оффлайн MetalliC

  • Технический консультант
  • Сообщений: 9386
  • Пол: Мужской
  • Demul team / MAME developer
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #476 : 17 Июль 2014, 18:05:16 »
Heidr, на счет ++ и -- читай http://www.viva64.com/ru/d/0162/ или вику

просто C/C++ позволяют делать много всякого, чего в других языках нельзя, и предполагается что программер чётко знает что он делает.
если же не знает - да, получается быдлокод, там работающий а сям не работающий.
и x + (x + x--) + (x + x++) как раз годный пример такого индусизма :)

Оффлайн Heidr

  • Пользователь
  • Сообщений: 6472
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #477 : 17 Июль 2014, 18:55:50 »
Значит, нормальные люди всё-таки не пользуются ++ и -- в составе выражений? А то я боялся, что все постоянно только их и используют, один я не в теме.

Так как быть с кириллицей в Windows? Получается, не видать человечеству консольного World of Warcraft на русском?

И вот ещё непонятное. В примере на том сайте есть второй способ чтения из файла, там такое:
ifstream fileIn("GT.txt");
if(!fileIn)
return 1;
string strBuff;
while(!fileIn.eof())
{
fileIn >> strBuff; // Here we read in a word
cout << strBuff; // Now we're simply regurgitating the word we read in to the screen

cout << " ";
}
fileIn.close();
В файле GT.txt одна строчка: This tutorial was brought to by GameTutorials. Последнее слово почему-то выводится дважды. Почему?

Странные там исходники, написано, что всё проверено на работоспособность последней вижуалстудией, но в GCC часто то библиотека нужная оказывается неподключённой, то значение не задефайнено. Я думал, что хоть компиляторы разные, но библиотеки-то уж одинаковые.

Оффлайн cviten

  • Пользователь
  • Сообщений: 106
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #478 : 17 Июль 2014, 20:15:26 »
Heidr, , легче использовать
getline(fileIn,strBuff);
Он читает всё строку целиком, а не по словам.

Мне больше нравится этот туториал http://www.cplusplus.com/doc/tutorial/ , но это дело вкуса.
Зато тут есть полный Reference по всем стандартным библиотекам.

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Програмирование на C++
« Ответ #479 : 18 Июль 2014, 00:12:39 »
Цитата: Heidr
Получается, можно или вводить русские буквы, или выводить, но не одновременно?

Получается кому-то надо разобраться с кодировками один раз и больше не строить предположений
http://habrahabr.ru/post/158895/
Цитата: Heidr
Последнее слово почему-то выводится дважды.

Потому что в конце не было чего считывать и оператор >> ничего не сделал с старым содержимым (никто же не говорил что если не будет чего считывать то строка станет пустой, верно?).