Сборка и компиляция C++
Часть раздела Объектно-ориентированное программирование путешествия по C++ на Coddy — урок 2 из 104.
C++ собирается в три этапа: препроцессинг, компиляция и компоновка.
1. Препроцессинг — директивы #include разрешаются, копируя содержимое заголовочных файлов в исходные файлы
#include <iostream> // Системный заголовочный файл
#include "my_file.h" // Ваш собственный заголовочный файл2. Компиляция — Каждый файл .cpp компилируется независимо в объектный файл (.o)
// math_utils.cpp компилируется в math_utils.o
// main.cpp компилируется в main.o3. Компоновка — Объектные файлы объединяются в окончательный исполняемый файл
// math_utils.o + main.o → program.exeЗаголовочный файл объявляет то, что существует (прототипы). Файл .cpp содержит фактическую реализацию. Компоновщик связывает вызовы в main.cpp с реализациями в других файлах .cpp.
Задание
СреднеЗаголовочный файл math_utils.h объявляет две функции. Реализуйте их в math_utils.cpp:
doubleValue(int x)— возвращаетx * 2square(int x)— возвращаетx * x
Обязательно подключите заголовочный файл в вашем .cpp файле.
Шпаргалка
Сборка C++ происходит в три этапа: Препроцессинг, Компиляция и Линковка.
Препроцессинг — директивы #include разрешаются, копируя содержимое заголовочных файлов в исходные файлы:
#include <iostream> // Системный заголовочный файл
#include "my_file.h" // Ваш собственный заголовочный файлКомпиляция — каждый файл .cpp компилируется независимо в объектный файл (.o):
// math_utils.cpp компилируется в math_utils.o
// main.cpp компилируется в main.oЛинковка — объектные файлы объединяются в финальный исполняемый файл:
// math_utils.o + main.o → program.exeЗаголовочный файл объявляет то, что существует (прототипы). Файл .cpp предоставляет фактическую реализацию. Линковщик связывает вызовы в main.cpp с реализациями в других файлах .cpp.
Попробуйте сами
#include <iostream>
#include "math_utils.h"
int main() {
int num;
std::cin >> num;
std::cout << "Double: " << doubleValue(num) << std::endl;
std::cout << "Square: " << square(num) << std::endl;
std::cout << "Build successful" << std::endl;
return 0;
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыСборка и компиляция C++Заголовочные файлы и файлы исходного кодаПространства имен и область видимостиВведение в ООП на C++Классы и объектыУказатель 'this'Методы (функции-члены)Атрибуты (члены данных)Основы конструкторов и деструкторовИтоги — Простой калькулятор4Свойства классов
Члены экземпляра против статическихГеттеры и сеттерыКонстантные функции-членыКлючевое слово mutableСтатические методы и переменныеДружественные функции и классыИтоги — Менеджер банковских счетов7Наследование
Основы наследованияУровни доступа при наследованииПорядок вызова конструкторов и деструкторовПереопределение методовВиртуальные функции и VTableМножественное наследованиеВиртуальное наследованиеИтоги — Иерархия сотрудников10Обзор STL
Обзор и философия STLКонтейнеры STLИтераторыАлгоритмы STLФункторы и лямбда-выраженияИтоги: частота слов13Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн SingletonFactory и Abstract FactoryПаттерн BuilderПаттерн ObserverПаттерн Strategy2Управление памятью
Стек и кучаУказатели и ссылкиДинамическая память (new/delete)Умные указатели в C++RAII в C++Итоги — Менеджер динамического массива5Инкапсуляция
Спецификаторы доступа в C++Спецификаторы доступа: подробный разборСокрытие данныхStruct против ClassВложенные и внутренние классыИтоги — Система учета студентов8Полиморфизм
Полиморфизм компиляции и времени выполненияПерегрузка функцийВиртуальные функции: повторениеЧистые виртуальные функцииАбстрактные классыПроектирование интерфейсов на C++Dynamic Casting и RTTIИтоги: Калькулятор фигур11Продвинутые концепции ООП
Композиция против наследованияМиксины через CRTPИдиома PimplСтирание типовEnum Classes и строгая типизацияОбработка исключений в ООППользовательские иерархии исключений14Паттерны проектирования. Часть 2
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн КомпоновщикRAII как паттерн3Конструкторы и деструкторы
Конструктор по умолчаниюПараметризованный конструкторКонструктор копированияКонструктор перемещенияСписки инициализации конструктораДелегирующие конструкторыГлубокое погружение в деструкторыПравило трех / пяти / нуляПовторение — класс String6Перегрузка операторов
Введение в перегрузку операторовПерегрузка арифметических операторовПерегрузка операторов сравненияОператоры потоковПерегрузка оператора присваиванияПерегрузка операторов [] и ()Операторы преобразования типовИтоги — класс Matrix9Шаблоны
Шаблоны функцийШаблоны классовСпециализация шаблоновВариативные шаблоныОсновы SFINAE и Type TraitsИтоги — Обобщенный контейнер