Как стать автором
Поиск
Написать публикацию
Обновить
100.39

C++ *

Типизированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Ещё более современный C++

Время на прочтение6 мин
Количество просмотров49K
“C++11 feels like a new language.” – Bjarne Stroustrup

Не так давно Герб Саттер открыл на своём сайте новую страничку — Elements of Modern C++ Style, где он описывает преимущества нового стандарта и то, как они повлияют на код.
А под катом прячется вольный перевод содержимого этой странички.

Простой сервер на Qt/C++

Время на прочтение3 мин
Количество просмотров131K
В последнее время очень часто приходится слушать определенный порт, получать данные от клиента и отправлять соответствующий ответ. Решил поделиться с новичками, как же создать такой сервер и решить некоторые поставленные вопросы.
В этой статье мы рассмотрим:
— Создание tcp сервера.
— Подключение нескольких клиентов к серверу параллельно.
— Отключение клиентов (отключение сокетов).
— Получение и отправку данных.

Исходники: https://github.com/valualit/QTcpServer01

image

Читать дальше →

Обработка Segmentation Fault в C++

Время на прочтение3 мин
Количество просмотров72K

Вводная


C++ является «небезопасным» («unmanaged») языком, поэтому программы могут «вылетать» — аварийно завершать работу без сохранения данных пользователя, сообщения об ошибке и т.п. — стоит только, например, залезть в не инициализированную память. Например:
void fall()
{
  char * s = "short_text";
  sprintf(s,"This is very long text");
}

или
void fall()
{
  int * pointer = NULL;
  *pointer = 13;
}


Всем было бы лучше, если бы мы могли «отловить» падение программы — точно так же, как в java ловим исключения — и выполнить хоть что-то перед тем, как программа упадет (сохранить документ пользователя, вывести диалог с сообщением об ошибке и т.п.)

Общего решения задача не имеет, так как C++ не имеет собственной модели обработки исключений, связанных с работой с памятью. Тем не менее, мы рассмотрим два способа, использующих особенности операционной системы, вызвавшей исключение.

Читать дальше →

Как использовать C++ AMP из C#

Время на прочтение5 мин
Количество просмотров12K

В Visual Studio 11 Developer Preview, C++ AMP позволяет ускорить Ваши приложения, используя гетерогенное железо, такое как GPU.
Если Вы являетесь .NET-разработчиком, то все равно сможете использовать C++ AMP в Ваших приложениях. Большинство кода будет писаться на C#, лишь некоторые участки с помощью C++ AMP для его выполнения на GPU, затем использоваться любимый interop-механизм для связывания. Данный пост объяснит, как это сделать через P/invoke.
Читать дальше →

Коды возврата & исключения

Время на прочтение3 мин
Количество просмотров18K
Замечательные статьи публиковались в последнее время, хотелось бы добавить ещё несколько абзацев по данной теме.

Уважаемые авторы предыдущих топиков как-то упускали тот момент (или мне показалось? или это само-собой подразумевается?) что exceptions возникли как инструмент для решения весьма утилитарной задачи —
Читать дальше →

Шаблонная библиотека cxxtools

Время на прочтение1 мин
Количество просмотров1.7K
Начиная рабочий проект под Linux, я застрял в поисках С++ библиотеки, которая бы 1) была free, 2) умела работать с сокетами и можно быстро было поднять свой сервер, 3) нужна была оббёртка над потоками для плюсов. Сперва я наткнулся на Qt, но через некоторое время Qt стал слишком тяжелым для поставленной цели. В итоге поиски подтолкнули к cxxtools.

Кратко
Кратко о том, что умеет делать библиотечка:
  • умеет работать с TCP сокетами и поднимать на их основе слушающий сервер;
  • умеет парсить http запросы и отдавать ответы;
  • умеет работать с SSL;
  • реализован быстрый механизм сигналов (как раз похожий на Qt);
  • имеется похожий на boost-овский, но более удобный шаблон Function / Method; необходим для callback-функционала
  • умеет работать с потоками (threads): attached и detached threads;
  • удобный шаблон пула (pool);
  • гораздо удобнее smart pointer (ну имхо конечно), чем тот же std::smart_ptr и auto_ptr. Позволяет использовать разные политики управления классом и подсчёта ссылок, что удобно и необходимо для многопотоковых реализаций
  • удобный механизм логирования
  • ini-парсер
Читать дальше →

О бедном Александреску замолвлю я слово

Время на прочтение6 мин
Количество просмотров20K
Дорого времени суток!
Книга АлександрескуПрочитал я недавно статью одну про Template metaprogramming в С++. И был там такой комментарий: «Ровно то же самое с тем же уровнем настраиваемости можно было сделать на интерфейсах, реализациях, на фабриках, на дефайнах, на конфигах и на еще целой куче вещей». И вообще, мораль статьи и обсуждения — эти шаблоны от Александреску в жизни не шибко-то и нужны.
Я вспомнил свою задачу, где мне его (Александреску) идея об ортогональном проектировании здорово помогла. Хочу с вами ею поделиться.
Читать дальше →

Разбираемся в WinAPI

Время на прочтение4 мин
Количество просмотров132K

Для кого эта статья


Эта статья адресована таким же, как и я новичкам в программировании на С++ которые по воле случая или по желанию решили изучать WinAPI.
Хочу сразу предупредить:
Я не претендую на звание гуру по C++ или WinAPI.
Я только учусь и хочу привести здесь несколько примеров и советов которые облегчают мне изучение функций и механизмов WinAPI.

Читать дальше →

C/C++. Главное — начать!

Время на прочтение4 мин
Количество просмотров130K
Одной из главных проблем человека, желающего начать изучать языки программирования C/C++, при этом ничего практически о них не зная, может являться отсутствие начальной точки опоры. Эта статья призвана помочь новичкам сделать первые шаги на захватывающем пути освоения этого семейства языков.

Итак, прежде чем ринуться в глубинные просторы интернета в поисках уроков по программированию на C, необходимо подготовить себе хорошую почву — среду программирования. На данный момент существует немалое количество программ, позволяющих писать программы на рассматриваемом языке, осуществлять проверку синтаксиса и компилировать (переводить) исходный код программы в исполняемый файл (с расширением *.exe). Среди них хочется отметить прежде всего Borland C, Borland C++, Dev-C++, Visual Studio, Eclipse, NetBeans, IDEA. Особенно хочется рассмотреть здесь довольно старую, но и по сей день пользующуюся популярностью среду Borland C++ (на примере версии 5.5.1) ввиду наличия некоторых сложностей в ее настройке (однако, лучше конечно же пользоваться более современной и более автоматизированной средой).
Читать дальше →

Подробности о разработке для GPU в Visual Studio и платформе C++ AMP

Время на прочтение2 мин
Количество просмотров1.9K
Все большую популярность и актуальность приобретают технологии разработки приложений, которые на полную мощность используют вычислительные ресурсы графических ускорителей (GPU). Сегодня практически каждый компьютер и ноутбук комплектуется графическим адаптером с огромными вычислительными мощностями, которые потенциально могут быть использованы приложениями для значительного ускорения вычислений.

Одним из последних результатов исследований компании Microsoft в рамках вычислений в гетерогенной среде (связка CPU+GPU) стал анонс платформы С++ AMP, которая позволяет полностью утилизировать все возможности современных многоядерных процессоров и GPU. Анонс платформы был произведен на конференции AMD Fusion’11 летом этого года, подробности об этом вы можете прочитать в этой записи блога. На этом же мероприятии были анонсированы встроенные средства отладки и профилирования GPU кода в следующем поколении Visual Studio. Подробные доклады по новой платформе так же были прочитаны в рамках конференции BUILD, которая прошла совсем недавно.

Читать дальше →

Ставим объекты на поток, паттерн фабрика объектов

Время на прочтение12 мин
Количество просмотров92K
Доброго времени суток, читатель. Я хочу поделится с тобой знаниями об одном из наиболее часто используемых мною паттернов — фабрики объектов, для данного паттерна так же подходит другое название — виртуальный конструктор.

Что представляет из себя этот паттерн?

Исходя из названия легко догадаться, что это некая, определенная, фабрика (или завод), который создает объекты. Еще раз выражу слово определенная. Как и в реальной жизни фабрика имеет некую специализацию, создавая товары или устройства какого-либо определенного типа. И фабрика, которая выпускает, например, мебель, не может производить, например, еще и компоненты для смартфонов. По аналогии с программированием фабрика объектов может создавать только объекты определенного типа, которые используют единый интерфейс. Самыми главными преимуществами данного паттерна в С++, является упрощение создания объектов различных классов, использующих единый интерфейс. Зачастую библиотекам, которые разрабатывают программисты нужно не только уметь работать с определенными объектами, но и создавать их. Самый очевидный пример загрузка файлов различных форматов. Мы не знаем, какой файл мы будем загружать заранее, но у нас есть список возможных форматов. Пользователь указывает файл, библиотека пытается определить тип файла и вызвать соответствующий загрузчик для него. В большинстве случаев программисты использует конструкции типа switch или if, чтобы определить экземпляр какого класса им необходимо создать. И чем больше возможных вариантов появляется, тем больше разрастается эта конструкция, в последствии превращающиеся в уродливого монстра.

Что нам может предложить фабрика объектов?
Во-первых, простой метод создания объектов, который сократит switch/if до 1ой строчки.
Во-вторых, удобные методы для работы с объектами фабрики. Мы всегда точно можем узнать, зарегистрирован ли у нее определенный класс, количество зарегистрированных классов, а так же удобные методы для добавления и удаления экземпляров классов в фабрику. С помощью фабрики можно ограничивать набор возможных классов, которая она будет создавать, используя некую конфигурацию.

Читать дальше →

Разработка кросс-платформенного редактора с подсветкой синтаксиса на основе wxStyledTextCtrl

Время на прочтение4 мин
Количество просмотров3.5K

Доброе время суток Хабражители!


Хочу рассказать вам о своем опыте разработки редактора с подсветкой синтаксиса или редактора кода. Речь идет о редакторе для пользовательского языка. Суть этого поста не в детальном описании процесса разработки — я остановлюсь только на наиболее интересных моментах, слабо освященных или вообще пропущенных в документации.
Читать дальше →

Ближайшие события

Особенность работы со смарт-поинтерами в Qt

Время на прочтение3 мин
Количество просмотров36K
Смарт-поинтеры является очень важным механизмом управления временем жизни объектов. В Qt присутствует модель управления временем жизни объектов, когда объекты наследуются от базового класса QObject и задается “родство” — parent/child. При удалении объекта, он удаляет всех своих child. Эта модель управления временем жизни объектов очень хорошо сочетается с технологией взаимодействия между объектами “Signals & Slots” и при использовании смарт-поинтеров могут возникнуть тяжело отлаживаемые баги.
Читать дальше →

С++: как не сделать кино не для всех

Время на прочтение3 мин
Количество просмотров2.8K
image
Экран кинотеатра на мгновение погас и показал первые титры. Из темного зала стали доноситься весьма скудные аплодисменты. Начинает казаться, что закончившийся фильм мало кому понравился: по звуку можно насчитать десяток аплодирующих зрителей… Но тут свет загорается и оказывается, что фильм понравился всем. В полупустом зале сидит редкая группа зрителей, и хлопают все… Это был закрытый показ, который обычно именуют как «кино не для всех».
Какое отношение это имеет к C++? Пожалуй, самое прямое…
Читать дальше →

Запускаем Skype без надоедливой Главной страницы

Время на прочтение2 мин
Количество просмотров20K
Поводом к написанию заметки послужил недавний вопрос. Меня тоже очень раздражает окно Skype Home, появляющееся при каждом запуске, однако с помощью простой программы на C мне удалось от него избавиться. Получилось нечто вроде Hello World Tutorial по использованию Windows API. Программу можно скачать тут, а исходник с описанием найдете под катом.
Читать дальше →

Перезаписывать память – зачем?

Время на прочтение4 мин
Количество просмотров40K
В недрах Win32 API есть функция SecureZeroMemory с очень лаконичным описанием, из которого следует, что эта функция перезаписывает область памяти нулями и устроена таким образом, что компилятор при оптимизации кода никогда не удаляет вызов этой функции. Там же говорится, что следует с помощью этой функции перезаписывать память, ранее использованную для хранения паролей и криптографических ключей.

Остается один вопрос – зачем это? Можно найти пространные рассуждения о риске записи памяти программы в файл подкачки, файл hibernate или аварийный дамп, где его может найти злоумышленник. Это похоже на паранойю – далеко не всякий злоумышленник имеет возможность наложить руку на эти файлы.

На самом деле, возможностей получить доступ к данным, которые программа забыла перезаписать, гораздо больше – иногда не нужно даже иметь доступа к машине. Дальше мы рассмотрим пример, и каждый сам решит, насколько оправдана паранойя.
Читать дальше →

Создаём приложение на С++ с использованием Tesseract-ocr, MinGW и напильника

Время на прочтение6 мин
Количество просмотров31K
Так случилось, что понадобилось нам внедрить в своё приложение возможность распознавания текста, поэтому начались поиски подходящей библиотеки. В конечном счёте остановились на двух опенсорсных проектах CuneiForm Linux и Tesseract-ocr. Внимательное изучение проекта CuneiForm показало, что это просто порт продукта компании Cognitive Technologies, исходники которого они открыли в 2008 году и благополучно забили получив свою порцию внимания (во всяком случае такое сложилось впечатление). По сути весь проект состоял в портировании, а о новых фичах даже речи не шло. Всё это, вкупе с печальной новостью на страничке проекта, заставило нас отказаться от CuneiForm в пользу Tesseract, который в данный момент принадлежит Google, что даёт некоторую уверенность в будущем проекта. Под катом опыт сборки Tesseract-ocr под Windows с использованием MinGW и последующего создания простейшего приложения на С++.
Читать дальше →

С++: шаблон «поводок»

Время на прочтение6 мин
Количество просмотров5.4K
Намедни коллега подкинул такую задачку:

«Есть два типа объектов — Human и Dog. Human может владеть некоторой собакой (а может и не владеть). Dog может иметь некоторого хозяина (а может и не иметь). Понятно, что если некоторый объект типа Human владеет некоторым объектом типа Dog, то для данного объекта типа Dog именно данный объект типа Human является хозяином и только он. Причем Dog должен знать, кто его Human, и наоборот. Как бы ты это реализовал?»

Казалось бы, всё просто — заведём два указателя друг на друга у классов Human и Dog и дело в шляпе. Но реализация данной затеи привела меня к идее, как мне кажется, нового шаблона проектирования.
Читать дальше →

Про абстракции и метод рефакторинга «Extract method»

Время на прочтение3 мин
Количество просмотров4.2K
Абстракции чрезвычайно важны в программировании и это все знают. Они помогают нам отделить существенные детали чего бы то ни было от несущественных. В идеале они должны выделять только самое главное, эссенцию, без всяких посторонних примесей, минимум характеристик объекта или процесса, но идеал встречается не так уж и часто.
Читать дальше →

Вклад авторов