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

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

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

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

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

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

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