🗊 Презентация МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере

Категория: Технологии
Нажмите для полного просмотра!
МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №1 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №2 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №3 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №4 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №5 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №6 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №7 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №8 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №9 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №10 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №11 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №12 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №13 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №14 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №15 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №16 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №17 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №18 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №19 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №20 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №21 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №22 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №23 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №24 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №25 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №26 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №27 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №28 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №29 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №30 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №31 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №32 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №33 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №34 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №35 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №36 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №37 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №38 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №39 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №40 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №41 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №42 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №43 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №44 МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере, слайд №45

Содержание

Вы можете ознакомиться и скачать презентацию на тему МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, сере. Доклад-сообщение содержит 45 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

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


Слайд 1


МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, середа 15-16 год.
Описание слайда:
МЕТОДИ ОБ'ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ - 2007 Бублик В.В. Кафедра мультимедійних систем, кімн. 204/1 Консультації: вівторок, середа 15-16 год.

Слайд 2


Тема 6. Узагальнене програмування Корисно повторити: Об'єктне програмування. Лекція 8. Параметризовані класи
Описание слайда:
Тема 6. Узагальнене програмування Корисно повторити: Об'єктне програмування. Лекція 8. Параметризовані класи

Слайд 3


Динамічний поліморфізм Чи завжди він потрібен?
Описание слайда:
Динамічний поліморфізм Чи завжди він потрібен?

Слайд 4


Динамічний поліморфізм Пізнє зв'язування віртуальних функцій вимагає Ієрархії класів Дотримання дисципліни стабільного інтерфейсу нетермінальних...
Описание слайда:
Динамічний поліморфізм Пізнє зв'язування віртуальних функцій вимагає Ієрархії класів Дотримання дисципліни стабільного інтерфейсу нетермінальних класів Накладних витрат непрямого виклику

Слайд 5


Поліморфна ієрархія класів Базовий клас class Base { public: virtual void vf() { cout
Описание слайда:
Поліморфна ієрархія класів Базовий клас class Base { public: virtual void vf() { cout

Слайд 6


Поліморфна ієрархія класів Похідний клас class Derived: public Base { public: virtual void vf() { cout
Описание слайда:
Поліморфна ієрархія класів Похідний клас class Derived: public Base { public: virtual void vf() { cout

Слайд 7


Заміщення при пізньому зв'язуванні void manipulator(Base & x){ x.f(); x.g(); } Base b; Derived d; manipulator(b); //Base::f();Base::g()...
Описание слайда:
Заміщення при пізньому зв'язуванні void manipulator(Base & x){ x.f(); x.g(); } Base b; Derived d; manipulator(b); //Base::f();Base::g() manipulator(d); //Derived:: f();Base::g()

Слайд 8


Накладні витрати поліморфізму x.f(); // виклик віртуальної функції 00401207 mov edx,dword ptr [ebp+8] 0040120A mov eax,dword ptr [edx] 0040120C mov...
Описание слайда:
Накладні витрати поліморфізму x.f(); // виклик віртуальної функції 00401207 mov edx,dword ptr [ebp+8] 0040120A mov eax,dword ptr [edx] 0040120C mov esi,esp 0040120E mov ecx,dword ptr [ebp+8] 00401211 call dword ptr [eax] 00401213 cmp esi,esp 00401215 call __chkesp (00409620) 0040121A x.g(); // виклик невіртуальної функції 00401700 mov ecx,dword ptr [ebp+8] 00401703 call @ILT+805(Base::g) (0040132a) 00401708

Слайд 9


Внесення стабільного інтерфейсу Базовий клас class NVIBase { public: void vf() { dovf(); return;} void g() { cout
Описание слайда:
Внесення стабільного інтерфейсу Базовий клас class NVIBase { public: void vf() { dovf(); return;} void g() { cout

Слайд 10


Внесення стабільного інтерфейсу Похідний клас class NVIDerived: public NVIBase { private: virtual void dovf() { cout
Описание слайда:
Внесення стабільного інтерфейсу Похідний клас class NVIDerived: public NVIBase { private: virtual void dovf() { cout

Слайд 11


Накладні витрати невіртуального інтерфейсу Без особливих додаткових накладних витрат: один зайвий виклик невіртуальної інтерфейсної функції x.vf();...
Описание слайда:
Накладні витрати невіртуального інтерфейсу Без особливих додаткових накладних витрат: один зайвий виклик невіртуальної інтерфейсної функції x.vf(); 00416E5E mov ecx,dword ptr [x] 00416E61 call NVIBase::vf (415EFBh)

Слайд 12


Виділення абстрактного нетермінального класу Базовий клас class NVINTBase { public: void vf() { dovf(); return;} void g() { cout
Описание слайда:
Виділення абстрактного нетермінального класу Базовий клас class NVINTBase { public: void vf() { dovf(); return;} void g() { cout

Слайд 13


Виділення абстрактного нетермінального класу Похідні класи class NVITBase: public NVINTBase {}; class NVITDerived: public NVINTBase { private:...
Описание слайда:
Виділення абстрактного нетермінального класу Похідні класи class NVITBase: public NVINTBase {}; class NVITDerived: public NVINTBase { private: virtual void dovf() { cout

Слайд 14


Порівняння викликів деструкторів Виклик невіртуального деструктора delete nvip; 0043771D mov eax,dword ptr [nvip] 00437720 mov dword ptr...
Описание слайда:
Порівняння викликів деструкторів Виклик невіртуального деструктора delete nvip; 0043771D mov eax,dword ptr [nvip] 00437720 mov dword ptr [ebp-158h],eax 00437726 mov ecx,dword ptr [ebp-158h] 0043772C push ecx 0043772D call operator delete (41550Fh) 00437732 add esp,4

Слайд 15


Порівняння викликів деструкторів Накладні витрати віртуального деструктора delete pb; 00437780 mov eax,dword ptr [pb] 00437783 mov dword ptr...
Описание слайда:
Порівняння викликів деструкторів Накладні витрати віртуального деструктора delete pb; 00437780 mov eax,dword ptr [pb] 00437783 mov dword ptr [ebp-134h],eax 00437789 mov ecx,dword ptr [ebp-134h] 0043778F mov dword ptr [ebp-140h],ecx 00437795 cmp dword ptr [ebp-140h],0 0043779C je main+151h (4377C1h) 0043779E mov esi,esp 004377A0 push 1 004377A2 mov edx,dword ptr [ebp-140h] 004377A8 mov eax,dword ptr [edx] 004377AA mov ecx,dword ptr [ebp-140h] 004377B0 call dword ptr [eax] 004377B2 cmp esi,esp 004377B4 call @ILT+2795(__RTC_CheckEsp) (415AF0h) 004377B9 mov dword ptr [ebp-16Ch],eax 004377BF jmp main+15Bh (4377CBh) 004377C1 mov dword ptr [ebp-16Ch],0

Слайд 16


Висновок Повна гнучкість рішень за рахунок динамічного розпізнавання типу об'єкту при значних затратах як на етапі програмування, так і виконання
Описание слайда:
Висновок Повна гнучкість рішень за рахунок динамічного розпізнавання типу об'єкту при значних затратах як на етапі програмування, так і виконання

Слайд 17


“Невіртуальна” ієрархія class Base { public: void f() {cout
Описание слайда:
“Невіртуальна” ієрархія class Base { public: void f() {cout

Слайд 18


Раннє зв'язування void manipulator(Base & x){ x.f(); x.g(); } Base b; Derived d; manipulator(b); //Base::f();Base::g() manipulator(d); //...
Описание слайда:
Раннє зв'язування void manipulator(Base & x){ x.f(); x.g(); } Base b; Derived d; manipulator(b); //Base::f();Base::g() manipulator(d); // Base::f();Base::g()

Слайд 19


Висновок Раннє зв'язування не забезпечує заміщень: при підстановці параметром об'єкту похідного класу викликаються функції базового
Описание слайда:
Висновок Раннє зв'язування не забезпечує заміщень: при підстановці параметром об'єкту похідного класу викликаються функції базового

Слайд 20


Узагальнений маніпулятор ієрархією класів template void manipulator(T & x){ x.f(); x.g(); } Base b; Derived d; manipulator(b); //Base::f();Base::g()...
Описание слайда:
Узагальнений маніпулятор ієрархією класів template void manipulator(T & x){ x.f(); x.g(); } Base b; Derived d; manipulator(b); //Base::f();Base::g() manipulator(d); //Derived:: f();Base::g()

Слайд 21


Висновок Шаблон, застосований до ієрархії, доповненої явним делегуванням, моделює статичний поліморфізм
Описание слайда:
Висновок Шаблон, застосований до ієрархії, доповненої явним делегуванням, моделює статичний поліморфізм

Слайд 22


“На городі бузина...” class ElderBerry // бузина { public: void f(char a='!', double x=1, bool t=true) { cout
Описание слайда:
“На городі бузина...” class ElderBerry // бузина { public: void f(char a='!', double x=1, bool t=true) { cout

Слайд 23


А де Murgatroyd? class Murgatroyd { public: void f() { cout
Описание слайда:
А де Murgatroyd? class Murgatroyd { public: void f() { cout

Слайд 24


Узагальнена функція template void manipulator(T & x){ x.f(); x.g(); } ElderBerry u; Murgatroyd v; manipulator(u); // ElderBerry::f(), ElderBerry::...
Описание слайда:
Узагальнена функція template void manipulator(T & x){ x.f(); x.g(); } ElderBerry u; Murgatroyd v; manipulator(u); // ElderBerry::f(), ElderBerry:: g() manipulator(v); // Murgatroyd ::f(), ElderBerry:: g()

Слайд 25


Поліморфізм без ієрархії Методи узагальненого програмування дозволяють промоделювати статичний поліморфізм не застосовуючи ієрархії класів, а лише їх...
Описание слайда:
Поліморфізм без ієрархії Методи узагальненого програмування дозволяють промоделювати статичний поліморфізм не застосовуючи ієрархії класів, а лише їх знайомств за умови узгодженості їх поведінки

Слайд 26


Висновок Кожен початківець хоче продемонструвати володіння успадкуванням (90% випадків) Віртуальні функції найчастіше вживаються некоректно...
Описание слайда:
Висновок Кожен початківець хоче продемонструвати володіння успадкуванням (90% випадків) Віртуальні функції найчастіше вживаються некоректно Застосовувати динамічний поліморфізм варто лише тоді, коли статичного не вистачає Узагальнене програмування найпотужніший механізм статичного поліморфізму, але...

Слайд 27


Безпечність узагальненого програмування Наперед невідомо, який саме тип буде підставлено до шаблону: як гарантувати працездатність за мінімальних...
Описание слайда:
Безпечність узагальненого програмування Наперед невідомо, який саме тип буде підставлено до шаблону: як гарантувати працездатність за мінімальних вимог до типового параметру? Як уникнути збоїв на етапі виконання?

Слайд 28


Синтаксичний контроль типів Успадкування типів Зведення типів Примітивність типів Індексованість типів
Описание слайда:
Синтаксичний контроль типів Успадкування типів Зведення типів Примітивність типів Індексованість типів

Слайд 29


Типізація (за Бучем) Засіб захисту від використання об’єктів одного класу замість іншого, або принаймні спосіб управління цим використанням.
Описание слайда:
Типізація (за Бучем) Засіб захисту від використання об’єктів одного класу замість іншого, або принаймні спосіб управління цим використанням.

Слайд 30


Шаблон з одним параметром Пробуємо розмістити значення Того ж типу Т на новому місці template void construct( T*& p, const T& value ) { p =new...
Описание слайда:
Шаблон з одним параметром Пробуємо розмістити значення Того ж типу Т на новому місці template void construct( T*& p, const T& value ) { p =new T(value); return; }

Слайд 31


Застосування шаблону void converted( double*& p1, Base* p2 ) { Base b; Derived d; construct( p1, 2.718 ); construct( p2, b ); construct( p1, 42 );...
Описание слайда:
Застосування шаблону void converted( double*& p1, Base* p2 ) { Base b; Derived d; construct( p1, 2.718 ); construct( p2, b ); construct( p1, 42 ); construct( p1, 42 ); construct( p2, d ); construct( p2, d ); }

Слайд 32


Результати першої спроби void converted( double*& p1, Base* p2 ) { Base b; Derived d; construct( p1, 2.718 ); construct( p2, b ); // construct( p1,...
Описание слайда:
Результати першої спроби void converted( double*& p1, Base* p2 ) { Base b; Derived d; construct( p1, 2.718 ); construct( p2, b ); // construct( p1, 42 ); 42 is int construct( p1, 42 ); // construct( p2, d ); d is Derived construct( p2, d ); }

Слайд 33


Висновок (з першої спроби) Надто жорстка умова на типовий параметр
Описание слайда:
Висновок (з першої спроби) Надто жорстка умова на типовий параметр

Слайд 34


Шаблон з двома параметрами Пробуємо розмістити значення типу Т2 на новому місці за указником типу Т1 Як уникнути недопустимих комбінацій типів...
Описание слайда:
Шаблон з двома параметрами Пробуємо розмістити значення типу Т2 на новому місці за указником типу Т1 Як уникнути недопустимих комбінацій типів template void construct( T1*& p, const T2& value ) { p =new T2(value); return; }

Слайд 35


Обмеження на успадкування template struct must_have_base { ~must_have_base() { void (*p)(Derived*, Base*) = constraints; } private: static void...
Описание слайда:
Обмеження на успадкування template struct must_have_base { ~must_have_base() { void (*p)(Derived*, Base*) = constraints; } private: static void constraints(Derived* pd, Base* pb) { pb=pd; } };

Слайд 36


Шаблон, доповнений перевіркою підтипів Спроба використати недопустиму комбінацію типів діагностується компілятором template void construct( T1*& p,...
Описание слайда:
Шаблон, доповнений перевіркою підтипів Спроба використати недопустиму комбінацію типів діагностується компілятором template void construct( T1*& p, const T2& value ) { must_have_base check; p =new T2(value); return; }

Слайд 37


Результати другої спроби void converted( double*& p1, Base* p2 ) { Base b; Derived d; construct( p1, 2.718 ); construct( p2, b ); // construct( p1,...
Описание слайда:
Результати другої спроби void converted( double*& p1, Base* p2 ) { Base b; Derived d; construct( p1, 2.718 ); construct( p2, b ); // construct( p1, 42 ); 42 is int // construct( p1, 42 ); не підтип construct( p2, d ); // ОК d is Derived construct( p2, d ); }

Слайд 38


Обмеження на зводимість template struct must_be_converted { ~must_be_converted() { void (*p)(Type &, const Convert &) = constraints; } private:...
Описание слайда:
Обмеження на зводимість template struct must_be_converted { ~must_be_converted() { void (*p)(Type &, const Convert &) = constraints; } private: static void constraints(Type & s, const Convert & t) { s=t; } };

Слайд 39


Шаблон, доповнений перевіркою зведення типів Спроба використати недопустиму комбінацію типів діагностується компілятором template void construct(...
Описание слайда:
Шаблон, доповнений перевіркою зведення типів Спроба використати недопустиму комбінацію типів діагностується компілятором template void construct( T1*& p, const T2& value ) { must_be_converted check; p =new T2(value); return; }

Слайд 40


Результати третьої спроби void converted( double*& p1, Base* p2 ) { Base b; Derived d; construct( p1, 2.718 ); construct( p2, b ); construct( p1, 42...
Описание слайда:
Результати третьої спроби void converted( double*& p1, Base* p2 ) { Base b; Derived d; construct( p1, 2.718 ); construct( p2, b ); construct( p1, 42 ); // ОК 42 converted to double construct( p1, 42 ); construct( p2, d ); // ОК d is Derived construct( p2, d ); }

Слайд 41


Перевірка примітивності типу template struct must_be_POD { ~must_be_POD() { void (*p)() = constraints; } private: static void constraints() { union{...
Описание слайда:
Перевірка примітивності типу template struct must_be_POD { ~must_be_POD() { void (*p)() = constraints; } private: static void constraints() { union{ T T_is_not_POD_type;}; } };

Слайд 42


Приклади інших перевірок
Описание слайда:
Приклади інших перевірок

Слайд 43


Перевірка індексованості template struct must_be_subscriptable { ~must_be_subscriptable() { void (*p)(const T &) = constraints; } private: static...
Описание слайда:
Перевірка індексованості template struct must_be_subscriptable { ~must_be_subscriptable() { void (*p)(const T &) = constraints; } private: static void constraints (const T& T_is_not_subscriptable) { sizeof(T_is_not_subscriptable[0]); } };

Слайд 44


Перевірка розмірностей template struct must_have_same_size { ~must_have_same_size() { void (*p)() = constraints; } private: static void constraints()...
Описание слайда:
Перевірка розмірностей template struct must_have_same_size { ~must_have_same_size() { void (*p)() = constraints; } private: static void constraints() { const int T1_not_same_size_as_T2 = sizeof(T1) == sizeof(T2); int i[T1_not_same_size_as_T2]; } };

Слайд 45


Висновок Збалансовуйте застосування успадкувань і шаблонів Зважено контролюйте типи, але не вимагайте від них більше, ніж потрібно
Описание слайда:
Висновок Збалансовуйте застосування успадкувань і шаблонів Зважено контролюйте типи, але не вимагайте від них більше, ніж потрібно



Похожие презентации
Mypresentation.ru
Загрузить презентацию