Камран Амини - Экстремальный Си. Параллелизм, ООП и продвинутые возможности
Название: | Экстремальный Си. Параллелизм, ООП и продвинутые возможности | |
Автор: | Камран Амини | |
Жанр: | C, C++, C#, Параллельное и распределенное программирование | |
Изадано в серии: | Для профессионало | |
Издательство: | Питер | |
Год издания: | 2021 | |
ISBN: | 978-5-4461-1694-2 | |
Отзывы: | Комментировать | |
Рейтинг: | ||
Поделись книгой с друзьями! Помощь сайту: донат на оплату сервера |
Краткое содержание книги "Экстремальный Си. Параллелизм, ООП и продвинутые возможности"
Для того чтобы овладеть языком Cи, знания одного лишь синтаксиса недостаточно. Специалист в области разработки должен обладать четким научным пониманием принципов и методик. Книга «Экстремальный Cи» научит вас пользоваться продвинутыми низкоуровневыми возможностями языка для создания эффективных систем, чтобы вы смогли стать экспертом в программировании на Cи.
Вы освоите директивы препроцессора, макрокоманды, условную компиляцию, указатели и многое другое. Вы по-новому взглянете на алгоритмы, функции и структуры. Узнаете, как выжимать максимум производительности из приложений с ограниченными ресурсами.
В XXI веке Си остается ключевым языком в машиностроении, авиации, космонавтикн и многих других отраслях. Вы узнаете, как язык работает с Unix, как реализовывать принципы объектно-ориентированного программирования, и разберетесь с многопроцессной обработкой.
Камран Амини научит вас думать, сомневаться и экспериментировать. Эта книга просто необходима для всех, кто хочет поднять знания Cи на новый уровень.
Читаем онлайн "Экстремальный Си. Параллелизм, ООП и продвинутые возможности". [Страница - 204]
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 --">