C++ - Урок 009. Модульность

C++, Modularity

Ключевым моментом в управлении взаимодействием различных частей в C++ программе является разграничение интерфейса компопонентов программы с их реализацией. На уровне языка, C++ представляет интерфейс в виде объявлений. Обяъвление указывает все необходимые части интерфейса, которые необходимы например для функции: возвращаемое значение, аргументы, имя функции. Например:

double sqrt(double); // функция квадратного корня, которая принимает аргументы типа double и возвращает переменную типа double

// Объявление класса со всеми необходимыми методами и участниками класса
class Vector 
{
public:
    Vector(int s);
    double& operator[](int i);
    int size();
private:
    double∗ elem; 
    int sz;
};

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

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

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

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

Vector::Vector(int s) // реализация конструктора
    : elem{new double[s]}, sz{s} // инициализация участников
{
}

double& Vector::operator[](int i) // реализация оператора доступа
{
    return elem[i];
}
int Vector::size() // реализация метод size()
{
    return sz;
}

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

Комментарии

Комментарии

Только авторизованные пользователи могут оставлять комментарии.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь
25 февраля 2018 г. 14:09
exxtra_noise

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат 100 баллов
  • Очки рейтинга 10
25 февраля 2018 г. 14:06
exxtra_noise

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат 60 баллов
  • Очки рейтинга -1
25 февраля 2018 г. 10:39
exxtra_noise

C++ - Тест 003. Условия и циклы

  • Результат 100 баллов
  • Очки рейтинга 10
Последние комментарии
26 февраля 2018 г. 0:55
soz7557

Qt/C++ - Урок 029. Изображение в базе данных в Qt – Сохранение и Восстановление

thanks, but Id should be the same the one as i select the image in tree view.

25 февраля 2018 г. 21:53
Console

Выпуск Qt 5.10

Здравствуйте.Планируется ли урок по Qt Network Authorization? Всё же интересная тема и информации маловато в интернете.

25 февраля 2018 г. 19:54
EVILEG

GameDev на Qt - Урок 4. Обнаружение коллизий в Qt (2D)

Сначала нужно что-нибудь написать, прежде чем это оптимизировать. А вообще все оптимизации исходят из совокупности условий, а не из того, что есть один танк и N треугольников. Да и области вид...

25 февраля 2018 г. 19:31
romankoshelev

GameDev на Qt - Урок 4. Обнаружение коллизий в Qt (2D)

А как насчет оптимизации. Тут ведь например будет ездить N треугольников, для каждого проводить линию и смотреть пересечения? +Это же происходит много раз в секунду.

25 февраля 2018 г. 16:15
EVILEG

GameDev на Qt - Урок 4. Обнаружение коллизий в Qt (2D)

Как вариант, использовать QLineF. Условно взять линию от положения танка, до положения треугольника. И проверить пересечение этой линии с другими линиями на карте с помощью метода intersect. Этот м...

Сейчас обсуждают на форуме
25 февраля 2018 г. 11:31
Mic78

How to retrieve a QCandlestickSet item from a QChartView?

Sorry, in the last sentence I wanted to write: "For that I need to know the maximum value of the QCandlestickSets in the zoomed area."

25 февраля 2018 г. 10:02
EVILEG

Проблема с ComboBox

Да, в принципе идея понятна. Можно воспользоваться одной исходной моделью и делать по ней поиск. Найденные элементы добавлять в модель для отображения. При этом исходная модель буд...

25 февраля 2018 г. 9:07
EVILEG

Qt управление окнами других программ

Добрый день! Это всё делается через WinAPI. В Qt не занимаются разработкой настолько платформозависимого функционала, который нужен единицам. Не знаю, что там было в Delphi, возможн...

21 февраля 2018 г. 13:26
sol11

Qtableviev после сортировки

Спасибо, всё заработало :) Единственное вот тут row на id поменял и всё круто :)) if(id == -1){ model->insertRow(model->rowCount(QModelIndex())); map...

20 февраля 2018 г. 13:18
alex_lip

Разбить один qml файл на несколько составляющих

Да спасибо. Просто после необходимости специфичных названий для файла - стараюсь обращать внимание на любую мелочь.