Библиотека knigago >> Компьютеры: Языки и системы программирования >> C, C++, C# >> Экстремальный Си. Параллелизм, ООП и продвинутые возможности


Как думающий родитель, я искал информацию о прививках, чтобы принять информированное решение для своих детей. Книга "Прививки в вопросах и ответах для думающих родителей" Александра Котока оказалась бесценным источником. Книга охватывает широкий спектр тем, связанных с прививками, от истории и эффективности до рисков и альтернатив. Автор предоставляет четкие и хорошо обоснованные объяснения, подкрепленные научными исследованиями. Несмотря на обилие информации, книга легко читается и...

СЛУЧАЙНАЯ КНИГА

Камран Амини - Экстремальный Си. Параллелизм, ООП и продвинутые возможности

Экстремальный Си. Параллелизм, ООП и продвинутые возможности
Книга - Экстремальный Си. Параллелизм, ООП и продвинутые возможности.  Камран Амини  - прочитать полностью в библиотеке КнигаГо
Название:
Экстремальный Си. Параллелизм, ООП и продвинутые возможности
Камран Амини

Жанр:

C, C++, C#, Параллельное и распределенное программирование

Изадано в серии:

Для профессионало

Издательство:

Питер

Год издания:

ISBN:

978-5-4461-1694-2

Отзывы:

Комментировать

Рейтинг:

Поделись книгой с друзьями!

Помощь сайту: донат на оплату сервера

Краткое содержание книги "Экстремальный Си. Параллелизм, ООП и продвинутые возможности"

Для того чтобы овладеть языком Cи, знания одного лишь синтаксиса недостаточно. Специалист в области разработки должен обладать четким научным пониманием принципов и методик. Книга «Экстремальный Cи» научит вас пользоваться продвинутыми низкоуровневыми возможностями языка для создания эффективных систем, чтобы вы смогли стать экспертом в программировании на Cи.

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

В XXI веке Си остается ключевым языком в машиностроении, авиации, космонавтикн и многих других отраслях. Вы узнаете, как язык работает с Unix, как реализовывать принципы объектно-ориентированного программирования, и разберетесь с многопроцессной обработкой.

Камран Амини научит вас думать, сомневаться и экспериментировать. Эта книга просто необходима для всех, кто хочет поднять знания Cи на новый уровень.

Читаем онлайн "Экстремальный Си. Параллелизм, ООП и продвинутые возможности". [Страница - 204]

(!cstack_push(mStack, value)) {
throw "Stack is full!";
}
}
const T Pop() {
value_t value;
if (!cstack_pop(mStack, &value)) {
throw "Stack is empty!";
}
return ExtractValue(value);
}
void Clear() {
cstack_clear(mStack, free_value);
}
private:
cstack_t* mStack;
};

Данный класс имеет несколько важных аспектов, которые необходимо отметить.
zz Он содержит приватную переменную cstack_t — указатель на объект, создава­
емый функцией cstack_new, принадлежащей статической библиотеке. Это мож-

но считать ссылкой на объект, который существует на уровне языка C и создается/управляется отдельной библиотекой C. Указатель mStack аналогичен
файловому дескриптору (или ссылке), ссылающемуся на файл.
zz В класс завернуты все функции, предоставляемые библиотекой для работы

со стеком. Так делает не всякая обертка вокруг библиотеки C; обычно доступ
предоставляется к ограниченному набору функций.
zz Данный класс является шаблонным. То есть способен работать с различными

типами данных. Как видите, мы объявили две шаблонные функции для сериализации и десериализации объектов разных типов: CreateValue и ExtractValue.
С помощью этих функций класс превращает объект C++ в байтовый массив
(сериализация) и наоборот (десериализация).
zz Мы определяем специализированную шаблонную функцию для типа std::string.

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

Интеграция с C++  669
zz Наша библиотека позволяет размещать множество значений разных типов

в одном и том же экземпляре стека. Значение можно преобразовать в массив
символов и обратно. Взгляните на структуру value_t в листинге 21.1. Ей нужен
всего лишь указатель car. В отличие от библиотеки C этот класс, написанный
на C++, является типобезопасным, и каждый его экземпляр может работать
только с определенным типом данных.
zz В C++ каждый класс имеет как минимум один конструктор и один деструктор.

Таким образом, соответствующий объект стека будет удобно инициализировать
в конструкторе и финализировать в деструкторе.
Мы хотим, чтобы наш класс на C++ умел работать со строковыми значениями. Поэтому нам нужно написать подходящие функции сериализации и десериализации,
которые можно будет использовать в рамках данного класса. В листинге 21.7 содержатся определения функций, которые преобразуют массив символов языка C
в объект std::string и наоборот.
Листинг 21.7. Специализированные шаблонные функции, предназначенные
для сериализации/десериализации типа std::string. Они используются внутри класса
на языке C++ (c++/Stack.cpp)

template
value_t CreateValue(const std::string& pValue) {
value_t value;
value.len = pValue.size() + 1;
value.data = new char[value.len];
strcpy(value.data, pValue.c_str());
return value;
}
template
std::string ExtractValue(const value_t& value) {
return std::string(value.data, value.len);
}

Это специализация типа std::string для объявленной шаблонной функции, которая используется в классе. Она определяет, как объект std::string должен быть
преобразован в массив символов C и, наоборот, как массив символов C можно
превратить в объект std::string.
В листинге 21.8 показан метод main, который использует класс C++.
Листинг 21.8. Главная функция, использующая класс Stack из C++ (c++/Stack.cpp)

int main(int argc, char** argv) {
Stack stringStack(100);
stringStack.Push("Hello");
stringStack.Push("World");

670   Глава 21



Интеграция с другими языками

stringStack.Push("!");
std::cout --">

Оставить комментарий:


Ваш e-mail является приватным и не будет опубликован в комментарии.