Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лекции программирование / polevoy_cpp_2012_spring_lecture_03

.pdf
Скачиваний:
29
Добавлен:
20.04.2015
Размер:
110.89 Кб
Скачать

Динамические объекты

время жизни не ограничено областью видимости переменной, а полностью определяется пользователем

“живут” в динамической памяти

25.02.2012

cppNewb.ru

21

Операторы работы с динамическими объектами

оператор new – создает объект

оператор delete – уничтожает объект

указатель, возвращенный new

0 (ноль)

пример:

int* pCounter = new int; //< создадим объект

++(*pCounter);

delete pCounter; //< уничтожим объект

pCounter = 0; //< обнулим для верности

25.02.2012

cppNewb.ru

22

Динамические массивы

new T[SIZE]

delete[]

пример:

/// Cоздадим массив объектов.

int* pCounters = new int[NCOUNTERS]; *(pCounters + 5) += 1;

/// Уничтожим массив. delete[] pCounters;

pCounters = 0; //< обнулим для верности

25.02.2012

cppNewb.ru

23

Указатель на себя

this – ключевое слово, указатель на текущий экземпляр

определен внутри нестатических методов

нельзя получить адрес

нельзя присвоить значение

используется неявно

25.02.2012

cppNewb.ru

24

Пример неудачный (this)

пример: void

Point::setX(const int x)

{

this->m_x = x;

}

или

void

Point::setX(const int x)

{

(*this).m_x = x;

}

25.02.2012

cppNewb.ru

25

Пример удачный (this)

T&

T::operator++()

{

// содержательная работа

return *this;

}

25.02.2012

cppNewb.ru

26

Использование this

использовать единообразно

избегать избыточности

использовать при необходимости, т.е. НЕ для доступа к членам в методах

25.02.2012

cppNewb.ru

27

Константные поля

не изменяются после создания объекта

инициализируются в списке инициализации

25.02.2012

cppNewb.ru

28

Константные поля (пример)

class FixedArr

{

public:

FixedArr(int size); private:

const int m_size;

///…

};

FixedArr::FixedArr(int size) : m_size(size)

///…

25.02.2012

cppNewb.ru

29

Константные методы

сохраняют логическую константность

не изменяют состояния полей кроме mutable

могут вызываться для константных экземпляров

отличаются от неконстантных методов с тем же набором параметров

25.02.2012

cppNewb.ru

30