Пространства имен и область видимости
Часть раздела Объектно-ориентированное программирование путешествия по C++ на Coddy — урок 4 из 104.
Пространства имен группируют связанный код вместе и предотвращают конфликты имен. Оператор разрешения области видимости :: обращается к элементам внутри пространства имен.
Создание пространства имен
namespace MathTools {
int add(int a, int b) {
return a + b;
}
}Доступ с помощью оператора разрешения области видимости ::
int result = MathTools::add(5, 3); // результат = 8Использование директивы, чтобы не вводить пространство имен каждый раз
using namespace MathTools;
int result = add(5, 3); // То же самое, что и MathTools::add(5, 3)Пространство имен std
std::cout << "Hello" << std::endl;
// или
using namespace std;
cout << "Hello" << endl;Пространства имен организуют код и предотвращают конфликты имен. Пространство имен std содержит все возможности стандартной библиотеки C++, такие как cout, cin, string и endl.
Задание
СреднеСоздайте функции внутри пространства имен MathTools:
add(int a, int b)— возвращает суммуmultiply(int a, int b)— возвращает произведение
Объявите их в MathTools.h и реализуйте в MathTools.cpp.
Шпаргалка
Пространства имен группируют связанный код вместе и предотвращают конфликты имен. Оператор разрешения области видимости :: обращается к элементам внутри пространства имен.
Создание пространства имен:
namespace MathTools {
int add(int a, int b) {
return a + b;
}
}Доступ с помощью разрешения области видимости :::
int result = MathTools::add(5, 3); // result = 8Использование директивы, чтобы не вводить пространство имен каждый раз:
using namespace MathTools;
int result = add(5, 3); // То же самое, что и MathTools::add(5, 3)Пространство имен std содержит все возможности стандартной библиотеки C++, такие как cout, cin, string и endl:
std::cout << "Hello" << std::endl;
// или
using namespace std;
cout << "Hello" << endl;Попробуйте сами
#include <iostream>
#include "MathTools.h"
int main() {
int a, b;
std::cin >> a >> b;
std::cout << "Add: " << MathTools::add(a, b) << std::endl;
std::cout << "Multiply: " << MathTools::multiply(a, b) << 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Итоги — Обобщенный контейнер