Разделы презентаций


Лекция 4. Классы в C++. Конкретные классы (часть 2)

Nortel Networks ConfidentialВстроенные функцииСпецификатор inlineКомпилятор пытается генерировать в месте вызова код, соответсвующие inline-функциинебольшие по размеру и часто используемые функцииclass Date {public: inline int get_day() const; //...private: int day, month, year;};class Date

Слайды и текст этой презентации

Слайд 1Лекция 4. Классы в C++. Конкретные классы (часть 2).
Артур Садеков

Лекция 4. Классы в C++. Конкретные классы (часть 2).Артур Садеков

Слайд 2Nortel Networks Confidential
Встроенные функции
Спецификатор inline
Компилятор пытается генерировать в месте вызова

код, соответсвующие inline-функции
небольшие по размеру и часто используемые функции

class Date

{
public:
inline int get_day() const;
//...
private:
int day, month, year;
};

class Date {
public:
int get_day() const {return day;}
//…
}

inline int Date::get_day() const
{
return day;
}

Nortel Networks ConfidentialВстроенные функцииСпецификатор inlineКомпилятор пытается генерировать в месте вызова код, соответсвующие inline-функциинебольшие по размеру и часто

Слайд 3Nortel Networks Confidential
Копирование объектов
void h ()
{
Stack s1(1000);

Stack s2 = s1;
Stack s3(100000000);
s3 =

s2;
}

По умолчанию – почленное копирование.

Возможные проблемы:
Утечка памяти
Многократный вызов деструктора - попытка освобождения одних и тех же ресурсов

Nortel Networks ConfidentialКопирование объектовvoid h (){  Stack s1(1000);  Stack s2 = s1;  Stack s3(100000000);

Слайд 4Nortel Networks Confidential
Копирование объектов. Копирующий конструктор.
class Stack {
public:
//...
Stack(const Stack&

rs); // копирующий конструктор
Stack& operator= (const Stack& rs);//

коп. присваивание
}

Stack::Stack(const Stack& rs) :
max_size(rs.max_size),
top(rs.top)
{
storage = new char[max_size];
for(int i=0; i}

Nortel Networks ConfidentialКопирование объектов. Копирующий конструктор.class Stack {public: //... Stack(const Stack& rs);  // копирующий конструктор Stack&

Слайд 5Nortel Networks Confidential
Копирование объектов. Копирующее присваивание.
Stack& Stack::operator= (const Stack& rs)
{
if

(&rs != this)
{
delete[] storage;
storage =

new char[max_size=rs.max_size];
top = rs.top;
for(int i=0; i storage[i]=rs.storage[i];
}
return *this;
}
Nortel Networks ConfidentialКопирование объектов. Копирующее присваивание.Stack& Stack::operator= (const Stack& rs){ if (&rs != this) {  delete[]

Слайд 6Nortel Networks Confidential
Копирование объектов. Итог.
Копирующий конструктор инициализирует чистую память.
Оператор присваивания

работает с созданным объектом. Стратегия:
защита от присваивания самому себе,
удаление старых

элементов,
инициализация и копирование новых элементов,
возврат ссылки на себя.



Nortel Networks ConfidentialКопирование объектов. Итог.Копирующий конструктор инициализирует чистую память.Оператор присваивания работает с созданным объектом. Стратегия:защита от присваивания

Слайд 7Nortel Networks Confidential
Объекты-члены. Инициализация
Class Schedule {
public:
Schedule(Date dt1,

Stack& s);
Schedule(Date dt1);
//...
private:
Date m_date;

Stack m_stack;
}

Schedule::Schedule(Date dt1, Stack& s)
: m_date(dt1), m_stack(s)
{
m_stack.push(/*...*/);
}

Schedule::Schedule(Date dt1)
:m_date(dt1)
{ }

Schedule::Schedule(Date dt1, Stack& s)
:m_date(dt1)
{
m_stack = s;
}

, m_stack()

Nortel Networks ConfidentialОбъекты-члены. ИнициализацияClass Schedule {public: Schedule(Date dt1,      Stack& s); Schedule(Date dt1);

Слайд 8Nortel Networks Confidential
Объекты-члены. Копирование.
Class Schedule {
public:
Schedule& operator=(const Schedule &sch);

//...
private:
Date m_date;
Stack m_stack;
}
Schedule& Schedule::operator=(const Schedule &sch)
{

m_date = sch.m_date;
m_stack = sch.m_stack;
}
Nortel Networks ConfidentialОбъекты-члены. Копирование.Class Schedule {public: Schedule& operator=(const Schedule &sch); //...private: Date m_date; Stack m_stack;}Schedule& Schedule::operator=(const Schedule

Слайд 9Nortel Networks Confidential
Необходимая инициализация членов.
Class Schedule {
public:
Schedule(int ii,

Date& dd,

Time tt);
//…
private:
const int m_i;
Date& m_rd;
Time m_t;
}

Schedule::Schedule(int ii, Date& dd,
Time tt)
:m_i(ii), m_rd(dd), m_t(tt)
{ }

Инициализация в конструкторе обязательна для:
членов без конструкторов по умолчанию,
константных членов,
членов, являющихся ссылками.

Nortel Networks ConfidentialНеобходимая инициализация членов.Class Schedule {public: Schedule(int  ii,     Date& dd,

Слайд 10Nortel Networks Confidential
Эффективные типы, определяемые пользователем
Конструктор/деструктор
набор функций доступа – селекторов

(const)
набор функций модификаторов
набор операций для копирования объектов

Nortel Networks ConfidentialЭффективные типы, определяемые пользователемКонструктор/деструкторнабор функций доступа – селекторов (const) набор функций модификаторовнабор операций для копирования

Слайд 11Nortel Networks Confidential
Конец

Nortel Networks ConfidentialКонец

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика