SlideShare a Scribd company logo
1 of 56
•
•
•
•
•
•
•
•
// пустой бесконечный цикл
for(;;);
// цикл с тождественно истинным условием
while(1) foo();
// постфиксный декремент, адресная арифметика и др.
while(*cp1++ = *cp2++);
•
•
•
•
•
•
•
•
•
operator = operator << operator >>
public private
std::pair<T1, T2>
boost::is_void<T>
std::vector<T>
•
•
•
•
•
class A;
A a; // вызов A::A(), если есть
// ...
A b(a); // вызов A::A(A&), если есть
this
class A;
A *pa = new A(42); // вызов A::A(int)
A *pa2 = new A[N]; // вызов A::A(), N раз
// ...
// освобождение памяти с вызовом A::~A()
delete [] pa2;
// освобождение памяти без вызова A::~A()
// delete pa2;
• operator []
• operator new
• operator delete
• operator ->
• operator double operator
char
class ARef // фиктивный класс
{
public:
ARef(A &a, int i) : _a(a), _ix(i) { }
ARef& operator= (T t) { /* запись t в _a */
return *this;
}
operator T() { /* чтение из _a в _t */
return _t;
}
private:
A& _a; // ссылка на агрегат
int _ix; // индекс в агрегате
T _t; // T – гл. обр. базовый тип
};
class A // агрегат
{
friend class ARef; // для повышения производит.
public:
A() { /* ... */ }
ARef operator[] (int ix) {
return ARef(*this, ix);
}
};
// в точке использования
A a; int i, j; T t;
// ...
a[i] = t; // (a.operator[](i)).operator=(t);
t = a[j]; // t = (a.operator[](j)).operator T();
•
•
class StringRep // класс-представление
{
friend class String;
private:
StringRep(const char *s) : _count(1) {
strcpy(_rep = new char[strlen(s) + 1],
s);
}
~StringRep() { delete [] _rep; }
private:
char* _rep; // общее представление
int _count; // количество ссылок
};
class String // класс-строка
{
public:
String() { rep = new StringRep(“”); }
String(const String& s)
{ rep = s.rep; rep->_count++; }
String& operator=(const String& s) {
s.rep->_count++;
if(--rep->_count <= 0) delete rep;
rep = s.rep; return *this;
}
~String() {
if(--rep->_count <= 0) delete rep;
}
// class String
String(const char *s)
{ rep = new StringRep(s); }
int length() const // делегирование
{ return strlen(rep->_rep); }
private:
StringRep *rep; // общее представление
};
class StringRep // класс-представление
{
friend class String;
private:
StringRep() { *(_rep = new char[1]) = „0‟; }
StringRep(const StringRep& s) {
strcpy(_rep = new char[
strlen(s._rep) + 1],
s._rep);
}
StringRep(const char *s) {
strcpy(_rep = new char[strlen(s) + 1],
s);
}
// class StringRep
~StringRep() { delete [] _rep; }
int length() const { return strlen(_rep); }
private:
char* _rep; // общее представление
int _count; // количество указателей
};
class String // класс-строка
{
public:
String() {(p = new StringRep())->_count = 1;}
String(const String& s) {
(p = s.p)->_count++;
}
// class String
String(const char *s) {
(p = new StringRep(s))->_count = 1;
}
StringRep* operator->() const { return p; }
String& operator=(const String& q) {
if(--p->_count <= 0 && p != q.p)
delete p;
(p = q.p)->_count++;
return *this;
}
~String() { if(--p->_count <= 0) delete p; }
private:
StringRep *p; // общее представление
};
void* operator new(std::size_t size);
void operator delete(void* ptr);
// для «размещающего» new: T *pt = new (buf) T(val);
void* operator new(std::size_t, void* p);
operator new operator
delete
•
•
•
class String
{
public:
String() { /* _rep = ... */ }
String(const char *s) { /* _rep = ... */ }
~String() { delete[] _rep; }
void* operator new(std::size_t);
void operator delete(void*);
private:
static String *_list; // список своб. блоков
// указатель на следующий блок
// или представление строки
union { String *_freeptr; char *_rep; };
};
String *String::_list = NULL;
void String::operator delete(void *p)
{
String *s = (String *)p;
s->_freeptr = _list;
_list = s;
}
void* String::operator new(std::size_t /* size */)
{
if(!_list) {
int i = 0;
for(_list = (String*)new char
[POOL_SIZE * sizeof(String)];
i < POOL_SIZE - 1; i++)
_list[i]->_freeptr =
&(_list[i + 1]);
_list[i]->_freeptr = NULL;
}
String *aList = _list;_list = _list->_freeptr;
return aList;
}
•
•
•
struct BaseConstructor{BaseConstructor(int = 0){}};
class Base // класс-конверт
{
public:
Base() { _rep = new DerivedOne; }
Base(T t) { _rep = new DerivedOne(t); }
Base(T t,U u) { _rep = new DerivedTwo(t,u); }
Base(Base &b) { /* ... */ }
Base& operator=(Base &b) { /* ... */ }
virtual Base& operator+(const Base &b) {
return _rep->operator+(b);
}
// class Base
void Redefine(Base *pb)
{
if(!(--_rep->_refCount)) delete _rep;
_rep = pb;
}
protected:
Base(BaseConstructor) : _refCount(1) { }
private:
Base* _rep; // адрес экз. письма
int _refCount; // количество ссылок
};
class DerivedOne : public Base
{
public:
DerivedOne(T t) :
Base(BaseConstructor()), _refCount(1)
{ /* ... */ }
Base& operator+(const Base &b) { /* ... */ }
// ...
private:
// ...
};
•
•
•
• new
•
•
class Base;
inline void *operator new(std::size_t, Base *b)
{ return b; }
unsigned char buf[BUF_SIZE], *pbuf = &buf;
class Base // класс, «создаваемый» пользователем
{
public:
void *operator new(std::size_t)
{ return (void*) pbuf; }
Base() { /* ПУСТО */ }
Base(T t) { /* ... */
(void) new(this) Derived(t); /* ... */
}
};
// выравнивание адреса a на границу в b байт
inline int round(int a, int b)
{ return ((a + b – 1) / b) * b; }
class Derived : public Base
{
private:
Derived(T t) : Base()
{
// ...
// выравнивание на границу DWORD
pbuf += round(sizeof(Derived), 0x04);
}
};
•
•
•
•
•
•
•
•
•
•
•
•
• gets()
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
C++ осень 2012 лекция 11
C++ осень 2012 лекция 11

More Related Content

What's hot

Монады для барабанщиков. Антон Холомьёв
Монады для барабанщиков. Антон ХоломьёвМонады для барабанщиков. Антон Холомьёв
Монады для барабанщиков. Антон ХоломьёвЮрий Сыровецкий
 
2.4 Использование указателей
2.4 Использование указателей2.4 Использование указателей
2.4 Использование указателейDEVTYPE
 
DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6Dmitry Soshnikov
 
Красота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки PythonКрасота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки PythonPython Meetup
 
2.2 Стек вызовов
2.2 Стек вызовов2.2 Стек вызовов
2.2 Стек вызововDEVTYPE
 
Недостатки Python
Недостатки PythonНедостатки Python
Недостатки PythonPython Meetup
 
Паттерны и примеры структур данных в NoSQL на примере Tarantool
Паттерны и примеры структур данных в NoSQL на примере TarantoolПаттерны и примеры структур данных в NoSQL на примере Tarantool
Паттерны и примеры структур данных в NoSQL на примере TarantoolAlexandre Kalendarev
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3Eugeniy Tyumentcev
 
3.3 Конструкторы и деструкторы
3.3 Конструкторы и деструкторы3.3 Конструкторы и деструкторы
3.3 Конструкторы и деструкторыDEVTYPE
 
Боремся со сложностью по-функциональному
Боремся со сложностью по-функциональномуБоремся со сложностью по-функциональному
Боремся со сложностью по-функциональномуAgile Base Camp
 
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?tfmailru
 
2.8 Строки и ввод-вывод
2.8 Строки и ввод-вывод2.8 Строки и ввод-вывод
2.8 Строки и ввод-выводDEVTYPE
 
Разработка IntelliJ IDEA: впечатления новичка. Тагир Валеев, Senior Software ...
Разработка IntelliJ IDEA: впечатления новичка. Тагир Валеев, Senior Software ...Разработка IntelliJ IDEA: впечатления новичка. Тагир Валеев, Senior Software ...
Разработка IntelliJ IDEA: впечатления новичка. Тагир Валеев, Senior Software ...JetBrains Russia
 
основы программирования на языке C
основы программирования на языке Cосновы программирования на языке C
основы программирования на языке Cstudent_kai
 
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведенияДракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведенияPlatonov Sergey
 

What's hot (20)

Монады для барабанщиков. Антон Холомьёв
Монады для барабанщиков. Антон ХоломьёвМонады для барабанщиков. Антон Холомьёв
Монады для барабанщиков. Антон Холомьёв
 
2.4 Использование указателей
2.4 Использование указателей2.4 Использование указателей
2.4 Использование указателей
 
DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6
 
Красота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки PythonКрасота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки Python
 
Concepts lite
Concepts liteConcepts lite
Concepts lite
 
Lisp8
Lisp8Lisp8
Lisp8
 
Scala #3
Scala #3Scala #3
Scala #3
 
2.2 Стек вызовов
2.2 Стек вызовов2.2 Стек вызовов
2.2 Стек вызовов
 
Недостатки Python
Недостатки PythonНедостатки Python
Недостатки Python
 
Паттерны и примеры структур данных в NoSQL на примере Tarantool
Паттерны и примеры структур данных в NoSQL на примере TarantoolПаттерны и примеры структур данных в NoSQL на примере Tarantool
Паттерны и примеры структур данных в NoSQL на примере Tarantool
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3
 
3.3 Конструкторы и деструкторы
3.3 Конструкторы и деструкторы3.3 Конструкторы и деструкторы
3.3 Конструкторы и деструкторы
 
Боремся со сложностью по-функциональному
Боремся со сложностью по-функциональномуБоремся со сложностью по-функциональному
Боремся со сложностью по-функциональному
 
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
 
2.8 Строки и ввод-вывод
2.8 Строки и ввод-вывод2.8 Строки и ввод-вывод
2.8 Строки и ввод-вывод
 
Разработка IntelliJ IDEA: впечатления новичка. Тагир Валеев, Senior Software ...
Разработка IntelliJ IDEA: впечатления новичка. Тагир Валеев, Senior Software ...Разработка IntelliJ IDEA: впечатления новичка. Тагир Валеев, Senior Software ...
Разработка IntelliJ IDEA: впечатления новичка. Тагир Валеев, Senior Software ...
 
08 set
08 set08 set
08 set
 
основы программирования на языке C
основы программирования на языке Cосновы программирования на языке C
основы программирования на языке C
 
20110227 csseminar alvor_breslav
20110227 csseminar alvor_breslav20110227 csseminar alvor_breslav
20110227 csseminar alvor_breslav
 
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведенияДракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
 

Viewers also liked

Java весна 2013 лекция 9
Java весна 2013 лекция 9Java весна 2013 лекция 9
Java весна 2013 лекция 9Technopark
 
C++ осень 2012 лекция 6
C++ осень 2012 лекция 6C++ осень 2012 лекция 6
C++ осень 2012 лекция 6Technopark
 
Тестирование весна 2013 лекция 4
Тестирование весна 2013 лекция 4Тестирование весна 2013 лекция 4
Тестирование весна 2013 лекция 4Technopark
 
Информационная безопасность весна 2013 лекция 4
Информационная безопасность весна 2013 лекция 4Информационная безопасность весна 2013 лекция 4
Информационная безопасность весна 2013 лекция 4Technopark
 
СУБД осень 2012 вестник 2
СУБД осень 2012 вестник 2СУБД осень 2012 вестник 2
СУБД осень 2012 вестник 2Technopark
 
Бизнес и системный анализ весна 2013 лекция 2
Бизнес и системный анализ весна 2013 лекция 2Бизнес и системный анализ весна 2013 лекция 2
Бизнес и системный анализ весна 2013 лекция 2Technopark
 
АиСД осень 2012 лекция 8
АиСД осень 2012 лекция 8АиСД осень 2012 лекция 8
АиСД осень 2012 лекция 8Technopark
 
Web осень 2012 лекция 10
Web осень 2012 лекция 10Web осень 2012 лекция 10
Web осень 2012 лекция 10Technopark
 
СУБД осень 2012 лекция 5
СУБД осень 2012 лекция 5СУБД осень 2012 лекция 5
СУБД осень 2012 лекция 5Technopark
 
АиСД осень 2012 лекция 3
АиСД осень 2012 лекция 3АиСД осень 2012 лекция 3
АиСД осень 2012 лекция 3Technopark
 
Web осень 2012 лекция 5
Web осень 2012 лекция 5Web осень 2012 лекция 5
Web осень 2012 лекция 5Technopark
 
Web весна 2012 лекция 10
Web весна 2012 лекция 10Web весна 2012 лекция 10
Web весна 2012 лекция 10Technopark
 
Web весна 2012 лекция 3
Web весна 2012 лекция 3Web весна 2012 лекция 3
Web весна 2012 лекция 3Technopark
 
Web осень 2012 лекция 2
Web осень 2012 лекция 2Web осень 2012 лекция 2
Web осень 2012 лекция 2Technopark
 
Управление продуктом весна 2014 лекция 1
Управление продуктом весна 2014 лекция 1Управление продуктом весна 2014 лекция 1
Управление продуктом весна 2014 лекция 1Technopark
 
Web осень 2012 лекция 9
Web осень 2012 лекция 9Web осень 2012 лекция 9
Web осень 2012 лекция 9Technopark
 
Java осень 2012 лекция 7
Java осень 2012 лекция 7Java осень 2012 лекция 7
Java осень 2012 лекция 7Technopark
 
Безопасность интернет-приложений осень 2013 лекция 1
Безопасность интернет-приложений осень 2013 лекция 1Безопасность интернет-приложений осень 2013 лекция 1
Безопасность интернет-приложений осень 2013 лекция 1Technopark
 
Java весна 2013 лекция 1
Java весна 2013 лекция 1Java весна 2013 лекция 1
Java весна 2013 лекция 1Technopark
 

Viewers also liked (19)

Java весна 2013 лекция 9
Java весна 2013 лекция 9Java весна 2013 лекция 9
Java весна 2013 лекция 9
 
C++ осень 2012 лекция 6
C++ осень 2012 лекция 6C++ осень 2012 лекция 6
C++ осень 2012 лекция 6
 
Тестирование весна 2013 лекция 4
Тестирование весна 2013 лекция 4Тестирование весна 2013 лекция 4
Тестирование весна 2013 лекция 4
 
Информационная безопасность весна 2013 лекция 4
Информационная безопасность весна 2013 лекция 4Информационная безопасность весна 2013 лекция 4
Информационная безопасность весна 2013 лекция 4
 
СУБД осень 2012 вестник 2
СУБД осень 2012 вестник 2СУБД осень 2012 вестник 2
СУБД осень 2012 вестник 2
 
Бизнес и системный анализ весна 2013 лекция 2
Бизнес и системный анализ весна 2013 лекция 2Бизнес и системный анализ весна 2013 лекция 2
Бизнес и системный анализ весна 2013 лекция 2
 
АиСД осень 2012 лекция 8
АиСД осень 2012 лекция 8АиСД осень 2012 лекция 8
АиСД осень 2012 лекция 8
 
Web осень 2012 лекция 10
Web осень 2012 лекция 10Web осень 2012 лекция 10
Web осень 2012 лекция 10
 
СУБД осень 2012 лекция 5
СУБД осень 2012 лекция 5СУБД осень 2012 лекция 5
СУБД осень 2012 лекция 5
 
АиСД осень 2012 лекция 3
АиСД осень 2012 лекция 3АиСД осень 2012 лекция 3
АиСД осень 2012 лекция 3
 
Web осень 2012 лекция 5
Web осень 2012 лекция 5Web осень 2012 лекция 5
Web осень 2012 лекция 5
 
Web весна 2012 лекция 10
Web весна 2012 лекция 10Web весна 2012 лекция 10
Web весна 2012 лекция 10
 
Web весна 2012 лекция 3
Web весна 2012 лекция 3Web весна 2012 лекция 3
Web весна 2012 лекция 3
 
Web осень 2012 лекция 2
Web осень 2012 лекция 2Web осень 2012 лекция 2
Web осень 2012 лекция 2
 
Управление продуктом весна 2014 лекция 1
Управление продуктом весна 2014 лекция 1Управление продуктом весна 2014 лекция 1
Управление продуктом весна 2014 лекция 1
 
Web осень 2012 лекция 9
Web осень 2012 лекция 9Web осень 2012 лекция 9
Web осень 2012 лекция 9
 
Java осень 2012 лекция 7
Java осень 2012 лекция 7Java осень 2012 лекция 7
Java осень 2012 лекция 7
 
Безопасность интернет-приложений осень 2013 лекция 1
Безопасность интернет-приложений осень 2013 лекция 1Безопасность интернет-приложений осень 2013 лекция 1
Безопасность интернет-приложений осень 2013 лекция 1
 
Java весна 2013 лекция 1
Java весна 2013 лекция 1Java весна 2013 лекция 1
Java весна 2013 лекция 1
 

Similar to C++ осень 2012 лекция 11

ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...Alexey Paznikov
 
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...Alexey Paznikov
 
6.2 Шаблоны функций
6.2 Шаблоны функций6.2 Шаблоны функций
6.2 Шаблоны функцийDEVTYPE
 
8 встреча — Язык программирования Python (В. Ананьев)
8 встреча — Язык программирования Python (В. Ананьев)8 встреча — Язык программирования Python (В. Ананьев)
8 встреча — Язык программирования Python (В. Ананьев)Smolensk Computer Science Club
 
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...corehard_by
 
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-CШкола-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-CГлеб Тарасов
 
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программированияПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программированияAlexey Paznikov
 
презентации продолжение банкета
презентации продолжение банкетапрезентации продолжение банкета
презентации продолжение банкетаstudent_kai
 
DSLs in Lisp and Clojure
DSLs in Lisp and ClojureDSLs in Lisp and Clojure
DSLs in Lisp and ClojureVasil Remeniuk
 
Programming Java - Lecture 02 - Objects - Lavrentyev Fedor
Programming Java - Lecture 02 - Objects - Lavrentyev FedorProgramming Java - Lecture 02 - Objects - Lavrentyev Fedor
Programming Java - Lecture 02 - Objects - Lavrentyev FedorFedor Lavrentyev
 
Математическое обоснование S.O.L.I.D принципов
Математическое обоснование S.O.L.I.D принциповМатематическое обоснование S.O.L.I.D принципов
Математическое обоснование S.O.L.I.D принциповetyumentcev
 
аппроксимация функции нескольких переменных
аппроксимация функции нескольких переменныхаппроксимация функции нескольких переменных
аппроксимация функции нескольких переменныхDmitry Protopopov
 
Догнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_castДогнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_castRoman Orlov
 
Лекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksЛекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksMikhail Kurnosov
 
Лекция 4: Стеки и очереди
Лекция 4: Стеки и очередиЛекция 4: Стеки и очереди
Лекция 4: Стеки и очередиMikhail Kurnosov
 
основы Java переменные, циклы
основы Java   переменные, циклыосновы Java   переменные, циклы
основы Java переменные, циклыSergey Nemchinsky
 
Лекция 4: Стек. Очередь
Лекция 4: Стек. ОчередьЛекция 4: Стек. Очередь
Лекция 4: Стек. ОчередьMikhail Kurnosov
 

Similar to C++ осень 2012 лекция 11 (20)

ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
 
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
 
6.2 Шаблоны функций
6.2 Шаблоны функций6.2 Шаблоны функций
6.2 Шаблоны функций
 
8 встреча — Язык программирования Python (В. Ананьев)
8 встреча — Язык программирования Python (В. Ананьев)8 встреча — Язык программирования Python (В. Ананьев)
8 встреча — Язык программирования Python (В. Ананьев)
 
Charming python sc2-8
Charming python sc2-8Charming python sc2-8
Charming python sc2-8
 
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
 
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-CШкола-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
 
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программированияПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
 
презентации продолжение банкета
презентации продолжение банкетапрезентации продолжение банкета
презентации продолжение банкета
 
DSLs in Lisp and Clojure
DSLs in Lisp and ClojureDSLs in Lisp and Clojure
DSLs in Lisp and Clojure
 
Programming Java - Lecture 02 - Objects - Lavrentyev Fedor
Programming Java - Lecture 02 - Objects - Lavrentyev FedorProgramming Java - Lecture 02 - Objects - Lavrentyev Fedor
Programming Java - Lecture 02 - Objects - Lavrentyev Fedor
 
Algo 00
Algo 00Algo 00
Algo 00
 
C language. Introduction
C language. IntroductionC language. Introduction
C language. Introduction
 
Математическое обоснование S.O.L.I.D принципов
Математическое обоснование S.O.L.I.D принциповМатематическое обоснование S.O.L.I.D принципов
Математическое обоснование S.O.L.I.D принципов
 
аппроксимация функции нескольких переменных
аппроксимация функции нескольких переменныхаппроксимация функции нескольких переменных
аппроксимация функции нескольких переменных
 
Догнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_castДогнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_cast
 
Лекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksЛекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building Blocks
 
Лекция 4: Стеки и очереди
Лекция 4: Стеки и очередиЛекция 4: Стеки и очереди
Лекция 4: Стеки и очереди
 
основы Java переменные, циклы
основы Java   переменные, циклыосновы Java   переменные, циклы
основы Java переменные, циклы
 
Лекция 4: Стек. Очередь
Лекция 4: Стек. ОчередьЛекция 4: Стек. Очередь
Лекция 4: Стек. Очередь
 

More from Technopark

Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelTechnopark
 
Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuTechnopark
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARNTechnopark
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. SparkTechnopark
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache MahoutTechnopark
 
Лекция 9. ZooKeeper
Лекция 9. ZooKeeperЛекция 9. ZooKeeper
Лекция 9. ZooKeeperTechnopark
 
Лекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveЛекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveTechnopark
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Technopark
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Technopark
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Technopark
 
Лекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSЛекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSTechnopark
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы HadoopTechnopark
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceTechnopark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"Technopark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...Technopark
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"Technopark
 
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"Technopark
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"Technopark
 
СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"Technopark
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...Technopark
 

More from Technopark (20)

Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель Pregel
 
Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.Ru
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARN
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. Spark
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache Mahout
 
Лекция 9. ZooKeeper
Лекция 9. ZooKeeperЛекция 9. ZooKeeper
Лекция 9. ZooKeeper
 
Лекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveЛекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и Hive
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)
 
Лекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSЛекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFS
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы Hadoop
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduce
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"
 
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
 
СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
 

C++ осень 2012 лекция 11

  • 1.
  • 3.
  • 4.
  • 5. • • • // пустой бесконечный цикл for(;;); // цикл с тождественно истинным условием while(1) foo(); // постфиксный декремент, адресная арифметика и др. while(*cp1++ = *cp2++);
  • 8. • • • • • class A; A a; // вызов A::A(), если есть // ... A b(a); // вызов A::A(A&), если есть
  • 9. this class A; A *pa = new A(42); // вызов A::A(int) A *pa2 = new A[N]; // вызов A::A(), N раз // ... // освобождение памяти с вызовом A::~A() delete [] pa2; // освобождение памяти без вызова A::~A() // delete pa2;
  • 10. • operator [] • operator new • operator delete • operator -> • operator double operator char
  • 11. class ARef // фиктивный класс { public: ARef(A &a, int i) : _a(a), _ix(i) { } ARef& operator= (T t) { /* запись t в _a */ return *this; } operator T() { /* чтение из _a в _t */ return _t; } private: A& _a; // ссылка на агрегат int _ix; // индекс в агрегате T _t; // T – гл. обр. базовый тип };
  • 12. class A // агрегат { friend class ARef; // для повышения производит. public: A() { /* ... */ } ARef operator[] (int ix) { return ARef(*this, ix); } }; // в точке использования A a; int i, j; T t; // ... a[i] = t; // (a.operator[](i)).operator=(t); t = a[j]; // t = (a.operator[](j)).operator T();
  • 14. class StringRep // класс-представление { friend class String; private: StringRep(const char *s) : _count(1) { strcpy(_rep = new char[strlen(s) + 1], s); } ~StringRep() { delete [] _rep; } private: char* _rep; // общее представление int _count; // количество ссылок };
  • 15. class String // класс-строка { public: String() { rep = new StringRep(“”); } String(const String& s) { rep = s.rep; rep->_count++; } String& operator=(const String& s) { s.rep->_count++; if(--rep->_count <= 0) delete rep; rep = s.rep; return *this; } ~String() { if(--rep->_count <= 0) delete rep; }
  • 16. // class String String(const char *s) { rep = new StringRep(s); } int length() const // делегирование { return strlen(rep->_rep); } private: StringRep *rep; // общее представление };
  • 17. class StringRep // класс-представление { friend class String; private: StringRep() { *(_rep = new char[1]) = „0‟; } StringRep(const StringRep& s) { strcpy(_rep = new char[ strlen(s._rep) + 1], s._rep); } StringRep(const char *s) { strcpy(_rep = new char[strlen(s) + 1], s); }
  • 18. // class StringRep ~StringRep() { delete [] _rep; } int length() const { return strlen(_rep); } private: char* _rep; // общее представление int _count; // количество указателей }; class String // класс-строка { public: String() {(p = new StringRep())->_count = 1;} String(const String& s) { (p = s.p)->_count++; }
  • 19. // class String String(const char *s) { (p = new StringRep(s))->_count = 1; } StringRep* operator->() const { return p; } String& operator=(const String& q) { if(--p->_count <= 0 && p != q.p) delete p; (p = q.p)->_count++; return *this; } ~String() { if(--p->_count <= 0) delete p; } private: StringRep *p; // общее представление };
  • 20. void* operator new(std::size_t size); void operator delete(void* ptr); // для «размещающего» new: T *pt = new (buf) T(val); void* operator new(std::size_t, void* p);
  • 22. class String { public: String() { /* _rep = ... */ } String(const char *s) { /* _rep = ... */ } ~String() { delete[] _rep; } void* operator new(std::size_t); void operator delete(void*); private: static String *_list; // список своб. блоков // указатель на следующий блок // или представление строки union { String *_freeptr; char *_rep; }; };
  • 23. String *String::_list = NULL; void String::operator delete(void *p) { String *s = (String *)p; s->_freeptr = _list; _list = s; }
  • 24. void* String::operator new(std::size_t /* size */) { if(!_list) { int i = 0; for(_list = (String*)new char [POOL_SIZE * sizeof(String)]; i < POOL_SIZE - 1; i++) _list[i]->_freeptr = &(_list[i + 1]); _list[i]->_freeptr = NULL; } String *aList = _list;_list = _list->_freeptr; return aList; }
  • 26. struct BaseConstructor{BaseConstructor(int = 0){}}; class Base // класс-конверт { public: Base() { _rep = new DerivedOne; } Base(T t) { _rep = new DerivedOne(t); } Base(T t,U u) { _rep = new DerivedTwo(t,u); } Base(Base &b) { /* ... */ } Base& operator=(Base &b) { /* ... */ } virtual Base& operator+(const Base &b) { return _rep->operator+(b); }
  • 27. // class Base void Redefine(Base *pb) { if(!(--_rep->_refCount)) delete _rep; _rep = pb; } protected: Base(BaseConstructor) : _refCount(1) { } private: Base* _rep; // адрес экз. письма int _refCount; // количество ссылок };
  • 28. class DerivedOne : public Base { public: DerivedOne(T t) : Base(BaseConstructor()), _refCount(1) { /* ... */ } Base& operator+(const Base &b) { /* ... */ } // ... private: // ... };
  • 30. class Base; inline void *operator new(std::size_t, Base *b) { return b; } unsigned char buf[BUF_SIZE], *pbuf = &buf; class Base // класс, «создаваемый» пользователем { public: void *operator new(std::size_t) { return (void*) pbuf; } Base() { /* ПУСТО */ } Base(T t) { /* ... */ (void) new(this) Derived(t); /* ... */ } };
  • 31. // выравнивание адреса a на границу в b байт inline int round(int a, int b) { return ((a + b – 1) / b) * b; } class Derived : public Base { private: Derived(T t) : Base() { // ... // выравнивание на границу DWORD pbuf += round(sizeof(Derived), 0x04); } };
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 53.