Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Билеты по ООП.doc
Скачиваний:
4
Добавлен:
14.04.2019
Размер:
596.48 Кб
Скачать

19. Inline-функции

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

Общая форма объявления inline-функции следующая:

inline объявление_функции

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

Создание inline-функций внутри класса

Всякая функция, определенная внутри объявления класса, является автоматически inline-функцией, если только это допустимо.

20. Передача объектов в функции

Объекты могут быть переданы в функции тем же способом, что и переменные любого другого типа. Объекты передаются функциям с использованием стандартного механизма передачи по значению. Это означает, что создается копия объекта, которая и передается функции. Это означает, что создается другой объект. В результате возникает вопрос, исполняется ли функция-конструктор объекта при создании копии и исполняется ли функция-деструктор, когда копия уничтожается.

Пример

#include <iostream>

using namespace std;

class myclass {

int i;

public:

myclass(int n);

~myclass( );

void set_i(int n) { i = n; }

int get_i( ) {return i; }

};

myclass:: myclass(int n)

{

i = n;

cout << "Constructing " << i << "\n";

}

myclass::~myclass( )

{

cout << "Destroying " << i << "\n";

}

void f(myclass ob);

int main()

{

myclass o(1);

f(o);

cout << "This is i in main: ";

cout << o.get_i( ) << "\n";

system("PAUSE");

return 0;

}

void f(myclass ob)

{

ob.set_i(2);

cout << "This is local i: " << ob.get_i( );

cout << "\n";

}

Эта программа выведет на экран следующие сообщения:

Имели место два вызова деструктора, в то время как конструктор вызывался только один раз. Хотя функция-конструктор не вызывалась при передаче объекта в функцию, необходимо вызывать деструктор при уничтожении копии. (Копия объекта уничтожается, как и любая локальная переменная, после окончания выполнения функции.)

Чтобы не возникало проблем необходимо определить оператор копирования для класса, который называется конструктором копирования.

21. Возвращение объектов функциями

Функция может возвращать объект в точку вызова.

Пример

#include <iostream.h>

using namespace std;

class myclass {

int i;

public:

void set_i(int n) { i = n; }

int get_i( ) {return i; }

};

myclass f( ); // возвращение объекта типа myclass

int main( )

{

myclass o;

o = f( );

cout << o.get_i( ) << “\n”;

return 0;

}

myclass f( );

{

myclass x;

x.set_i(1);

return x;

}

Когда функция возвращает объект, автоматически создается временный объект, содержащий возвращаемое значение. После того, как значение возвращено, этот объект уничтожается. Уничтожение временного объекта может вызвать неожиданные побочные эффекты. Для того чтобы преодолеть эту проблему используется перегрузка оператора присваивания и определение конструктора копирования.