Evgenii Legotckoi
15 вересня 2017 р. 01:05

C++ - Підручник 009. Модульність

Ключовим моментом під управлінням взаємодією різних елементів у C++ програмі є розмежування інтерфейсу компопонентів програми зі своїми реалізацією. На рівні мови C++ представляє інтерфейс у вигляді оголошень. Оголошення вказує всі необхідні частини інтерфейсу, які необхідні наприклад функції: повертається значення, аргументи, ім'я функції. Наприклад:

  1. double sqrt(double); // функция квадратного корня, которая принимает аргументы типа double и возвращает переменную типа double
  2.  
  3. // Объявление класса со всеми необходимыми методами и участниками класса
  4. class Vector
  5. {
  6. public:
  7. Vector(int s);
  8. double& operator[](int i);
  9. int size();
  10. private:
  11. double elem;
  12. int sz;
  13. };

Ключовим моментом тут є те, що реалізація всіх методів і функцій може бути зовсім в іншому місці, в іншому файлі. Найчастіше оголошення функцій здійснюється у заголовних файлах з розширенням .h , а реалізація здійснюється у файлах вихідних кодів .cpp.

Наприклад, реалізація функції квадратного кореня:

  1. double sqrt(double d) // definition of sqrt()
  2. {
  3. // ... алгоритм нахождения квадратного корня ...
  4. }

Також для класу Vector потрібно реалізувати кілька учасників:

  1. Vector::Vector(int s) // реализация конструктора
  2. : elem{new double[s]}, sz{s} // инициализация участников
  3. {
  4. }
  5.  
  6. double& Vector::operator[](int i) // реализация оператора доступа
  7. {
  8. return elem[i];
  9. }
  10. int Vector::size() // реализация метод size()
  11. {
  12. return sz;
  13. }

Ми повинні визначити Vector функції, але не sqrt (), оскільки вона є частиною стандартної бібліотеки. Однак це не має жодного значення: бібліотека – це просто якийсь «інший код, який ми використовуємо», написаний із тими самими мовними засобами, що й ми.

Вам це подобається? Поділіться в соціальних мережах!

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up
  • Останні коментарі
  • Evgenii Legotckoi
    16 квітня 2025 р. 17:08
    Благодарю за отзыв. И вам желаю всяческих успехов!
  • IscanderChe
    12 квітня 2025 р. 17:12
    Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
  • AK
    01 квітня 2025 р. 11:41
    Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
  • Evgenii Legotckoi
    09 березня 2025 р. 21:02
    К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
  • VP
    09 березня 2025 р. 16:14
    Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…