Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP_17.docx
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
207.59 Кб
Скачать

Что вам необходимо знать

Программы на C++ широко используют классы. Говоря кратко, классы позволяют вашим программам группировать для определенного объекта его данные и методы (функции), которые оперируют этими данными, в одной переменной. Как видите, классы очень похожи на структуры, которые вы рассматривали в уроке 18. Классы C++ являются основой объектно-ориентированного программирования. Следующие уроки расширяют возможности предоставляемые классами. Упоминавшаяся в этом уроке метка public, по являющаяся в определении класса, делает элементы класса доступными для всей программы. Из урока 22 вы больше узнаете о частных и общих элементах класса. До изучения урока 22 убедитесь, что освоили следующие основные концепции:

    1. В известном смысле объект представляет собой сущность, с которой ваши программы выполняют разные операции.

    2. Программы на C++ представляют объекты посредством классов.

    3. Класс, подобно структуре, содержит элементы. Элементы класса могут хранить информацию (данные) или быть функциями (методами), которые оперируют этими данными.

    4. Каждый класс имеет уникальное имя.

    5. После определения класса вы можете объявлять объекты этого класса, используя имя класса в качестве типа.

    6. Для обращения к элементам класса (как к данным, так и к функциям) ваши программы используют оператор точку.

    7. Программы могут определять функцию класса внутри или вне определения класса. Если вы определяете функцию вне определения класса, вам следует указать имя класса и использовать оператор глобального разрешения, например

25. Inline Функции

Чтобы избежать расходов на вызов функции, функцию можно описать как inline , а чтобы обеспечить более быстрый доступ к параметрам, их можно описать как register. Inline-функция будет растиражирована в коде компилятором столько раз, сколько она вызывается - это делается для того, чтобы минимизировать время работы со стеком, регистрами. Эти функции приводят к разбуханию исполняемого кода. Это подходит для малых по размеру функций, но не подходит для больших, а также рекурсивных функций.

inline-функция - это функция с модификатором ilnline, код которой компилятор может встроить в место вызова функции. Например

код C++

1:

2:

3:

4:

5:

6:

7:

8:

9:

10:

inline int func(void)

{

    return 5;

}

int main(void)

{

    int n = func();

    // ...

}

Компилятор может встроить код функции, примерно так:

код C++

1:

2:

3:

4:

5:

int main(void)

{

    int n = 5; // нет функции, есть её код

    // ...

}

Т.к. вызов функции требует некоторых накладных расходов, то inline-функции могут увеличить эффективность, но приводят к увеличению кода. inline - это только рекомендация, компилятор сам решает, может он встроить функцию или нет. Сложные функции с операторами ветвления, циклов и т.п. вполне могут быть не встроены. Например, если определение inline-функции расположено в заголовочном файле, и компилятор не сможет её встроить, то проект скомпилируется, но в каждом модуле, включающем этот заголовок, будет своя копия функции.

 "накладные расходы на вызов ф-ции" - не пустой звук ! Например, ф-ция которая вычисляет Max из двух-трёх значений, в inline-варианте будет работать на 10-25% быстрее, т.к. не-inline функция потребует создания кадра стека и сопутствующих действий (пролог-эпилог), а inline - "прозрачно", т.е. прямо в коде текущей функции выполнит все свои действия.