Презентация на тему: Язык С ++

Реклама. Продолжение ниже
Язык С ++
Класс point
Реализация методов класса point
Что даст непосредственное наследование?
Использование классов point и circ
Как работают виртуальные правила
Как реализованы виртуальные правила
Виртуальные правила
Использование классов point и circ
Наследование и виртуальные правила
Полиморфизм посредством указателей на объекты
Операторы new и delete
Передача объектов как аргументов функции
Дружественные функции, дружественные классы
Дружественные функции-операции
Дружественные функции-операции
Абстрактные функции
Множественное наследование
Статические члены класса
Шаблоны функций
Шаблоны класса
Шаблон класса c параметром
Обработка исключений
Обработка исключений
Обработка исключений
Обработка исключений
Обработка исключений
Стандартные исключения
Стандартные исключения
Стандартные классы исключений, определенные в заголовке stdexcept
Обработка исключений в стиле Microsoft
Обработка исключений в стиле Microsoft
Еще о пространствах имен
Пространства имен
1/34
Средняя оценка: 4.1/5 (всего оценок: 16)
Код скопирован в буфер обмена
Скачать (103 Кб)
Реклама. Продолжение ниже
1

Первый слайд презентации: Язык С ++

Лекция № 7 Объектно-ориентированное программирвоание в С++

Изображение слайда
1/1
2

Слайд 2: Класс point

class point // Класс Точка { private : int x,y; // координаты int c; // и цвет точки public : point(int u, int v, int w = WHITE); // инициализация ~ point (); // уничтожение void show (); // высвечивание точки void hide (); // стирание точки void move ( int u, int v ); // перемещение точки void change ( int w ); // изменение цвета точки };

Изображение слайда
1/1
3

Слайд 3: Реализация методов класса point

point:: point (int u, int v, int w) { x=u; y=v; c=w; } point::~ point () { hide(); } void point:: show () { putpixel(x,y,c); } void point:: hide () { putpixel(x,y,BLACK); } void point:: move (int u, int v) { hide(); x=u; y=v; show(); } void point:: change (int w) { hide(); c=w; show(); }

Изображение слайда
1/1
4

Слайд 4: Что даст непосредственное наследование?

// Класс Окружность class circ: public point { protected : int r; // радиус окружности public : circ(int u, int v, int w = WHITE, int s = 10); void show(); void hide(); void size(int s); int getr() { return r; } }; // методы класса Окружность circ::circ(int u, int v, int w, int s) : point(u,v,w) { r=s; } void circ::show() { setcolor(c); circle(x,y,r); } void circ::hide() { setcolor(BLACK); circle(x,y,r); } void circ::size(int s) { hide(); r=s; show(); } Вызов наследуемого конструктора с параметрами

Изображение слайда
1/1
5

Слайд 5: Использование классов point и circ

// главная программа void main(void) { point p(0,240); circ c(0,240); for (int i=0; i<640; i++) { p.move(i,240); c.move(i,240); delay(10); } p.~point(); c.~point(); } void point:: move (int u, int v) { hide(); x=u; y=v; show(); // но это метод точки }

Изображение слайда
1/1
6

Слайд 6: Как работают виртуальные правила

void point:: move (int u, int v) { hide(); x=u; y=v; show(); } «Заглушка» «Заглушка» Позднее связывание. Что такое hide и show будет известно лишь во время выполнения программы.

Изображение слайда
1/1
7

Слайд 7: Как реализованы виртуальные правила

X int Y int C int show void * hide void * Эти адреса заполняются конструктором

Изображение слайда
1/1
Реклама. Продолжение ниже
8

Слайд 8: Виртуальные правила

// Класс Точка class point { protected : int x,y; // координаты int c; // и цвет точки public : point(int u, int v, int w = WHITE); // инициализация virtual ~point(); // уничтожение virtual void show(); // высвечивание точки virtual void hide(); // стирание точки void move(int u, int v); // перемещение точки void change(int w); // изменение цвета точки int getx() { return x; }; int gety() { return y; }; int getc() { return c; }; };

Изображение слайда
1/1
9

Слайд 9: Использование классов point и circ

// главная программа void main(void) { point p(0,240); circ c(0,240); for (int i=0; i<640; i++) { p.move(i,240); c.move(i,240); delay(10); } p.~point(); c.~point(); } void point:: move (int u, int v) { hide(); // для точки x=u; y=v; show(); // для точки } void point:: move (int u, int v) { hide(); // для окружности x=u; y=v; show(); // для окружности }

Изображение слайда
1/1
10

Слайд 10: Наследование и виртуальные правила

// Класс Квадрат class square: public circ { public : square(int u, int v, int w, int s) : circ(u,v,w,s){}; void show(); void hide(); }; // методы класса Квадрат void square::show() { setcolor(c); rectangle(x-r,y-r,x+r,y+r); } void square::hide() { setcolor(BLACK); rectangle(x-r,y-r,x+r,y+r); }

Изображение слайда
1/1
11

Слайд 11: Полиморфизм посредством указателей на объекты

void main(void) { // массив указателей на родительский(!) тип point *figures[3]; // инициализация разными конструкторами! figures[0]=new point(320,240 ); figures[1]=new square(320,240,20,WHITE ); figures[2]=new circ(320,240,30 ); // выполнение метода с одинаковым именем! for (int i=0; i<3; i++) figures[i]->show(); }

Изображение слайда
1/1
12

Слайд 12: Операторы new и delete

Оператор new type * t = new type( параметры) Размещаемый оператор new new ( адрес размещения) тип ; new ( адрес размещения) тип ( параметры) ; Оператор delete delete(t) // деструктор вызывается автоматически Операторы можно переопределить в классе

Изображение слайда
1/1
13

Слайд 13: Передача объектов как аргументов функции

class obj { } void f(obj x) { public: int i; } main() { obj a; f ( a ); } void f(obj * x) { public: int i; } main () { obj a ; f (& a ); } void f(obj & x) { public: int i; } main () { obj a ; f ( a ); } По значению По адресу в стиле С По ссылке в стиле С++

Изображение слайда
1/1
14

Слайд 14: Дружественные функции, дружественные классы

class line ; // Опережающее определение class box { int color; public : friend int same_color(line l, box b); } class line { int color; public : friend int same_color(line l, box b); } // Описание дружественной функции int same _ color ( line l, box b ) { return (l.color==b.color) } Дружественная функция имеет доступ к private полям класса

Изображение слайда
1/1
Реклама. Продолжение ниже
15

Слайд 15: Дружественные функции-операции

# include < iostream. h > // Перегрузка операций ввода/вывода class vector { float x,y,z; public: vector (float a, float b, float c) {x=a; y=b; z=c; } friend ostream & operator << (ostream & stream, vector obj); friend istream & operator >> (istream & stream, vector &obj); };

Изображение слайда
1/1
16

Слайд 16: Дружественные функции-операции

// vector inserter ostream & operator << (ostream & stream, vector obj) { stream << "(" << obj.x << ","; stream << obj.y << ","; stream << obj.z << ")\n"; return stream; } // vector extractor istream & operator >> (istream & stream, vector & obj) { stream >> obj.x >> obj.y >> obj.z ; return stream; } void main () { vector a(1.0,2.0,3.0); cout << a; cin >> a; cout << a; }

Изображение слайда
1/1
17

Слайд 17: Абстрактные функции

class color { protected : int c; // цвет public : color ( int z ) { c = z ; } // конструктор int getcolor() { return c; } }; class figure {protected: int x, y ; // координаты int r; // размер public: figure (int a, int b, int z) { x=a; y=b; r=z; }; ~figure() { hide(); }; int getsize() { return r; }; virtual void show() = 0 ; // абстрактная функция virtual void hide() = 0 ; // абстрактная функция void move(int u, int v); }; void figure::move(int u, int v) { hide(); x=u; y=v; show();}

Изображение слайда
1/1
18

Слайд 18: Множественное наследование

// множественное наследование class circus : public color, public figure { public : circus(int x, int y, int r, int c): color ( c ), figure ( x, y, r ) {}; // наследование конструкторов void show(); void hide(); }; void circus::show() { setcolor(c); circle(x,y,r); } void circus::hide() { setcolor(BLACK); circle(x,y,r); } void main(void) { // figure f (320,240,10); // так нельзя! circus cr(320,240,10,YELLOW); cr.show(); }

Изображение слайда
1/1
19

Слайд 19: Статические члены класса

class st { static int c; // статическое поле public: static int incr(void) { return c++; } // статическая функция st(void) {cin << incr(); } ~st(void) { c--; } } .... st::c=0; st::incr();

Изображение слайда
1/1
20

Слайд 20: Шаблоны функций

template <class T> // Шаблоны функций T sqr ( T x ) { return x*x ; } main() { int i = 3; float x = 3.1; cout << sqr(i) << "\n"; // создает экземпляр int sqr(int) cout << sqr(x) << "\n"; // создает экземпляр float sqr(float) } template < typename T> inline T sqr ( T x ) { return x*x ; }

Изображение слайда
1/1
21

Слайд 21: Шаблоны класса

template <class Type> class Queue {public: Queue(); const Type& front(); void push(const Type&) void pop(); private: … }; Queue<int> qi; // Очередь, содержащая целые числа Queue< vector<double> > qv; // Очередь, содержащая целые числа Queue<string> qi; // Очередь, содержащая строки template <typename Type> class Queue

Изображение слайда
1/1
22

Слайд 22: Шаблон класса c параметром

template <class T, size_t size> class vec { private: T *q; int n; public: vec (void); }; template <class T, size_t size> vec<T,size>::vec(void) { q = new T[size]; }; void main() { vec <double, 200> d; vec <int, 100> k; }

Изображение слайда
1/1
23

Слайд 23: Обработка исключений

try (пытаться) - начало блока исключений; catch (поймать) - начало блока, "ловящего" исключение; finally ( завершение) – всегда выполняется последним throw (бросить) - ключевое слово, "создающее" ("возбуждающее") исключение.

Изображение слайда
1/1
24

Слайд 24: Обработка исключений

void func() { try { throw 1; } catch (int a) { printf("Caught exception number: %d\n",a); return; } printf("No exception detected!\n"); return; } Если выполнить этот фрагмент кода, то мы получим следующий результат: Caught exception number: 1 Теперь закоментируйте строку throw 1; и функция выдаст No exception detected!

Изображение слайда
1/1
25

Слайд 25: Обработка исключений

catch может "ловить" данные любого типа, но вовсе не обязательно при это указывать переменную. Т.е. прекрасно будет работать что-нибудь типа этого: catch(dumbclass) { } так же, как и catch(dumbclass&) { } Так же можно "поймать" и все исключения: catch(...) { }

Изображение слайда
1/1
26

Слайд 26: Обработка исключений

try { throw 1; // throw 'a'; } catch (long b) { cout << "пойман тип long: " << b << endl; } catch (char b) { cout << "пойман тип char: " << b << endl; }

Изображение слайда
1/1
27

Слайд 27: Обработка исключений

try { Main.Setup(); Main.Loop(); Main.Close(); } catch ( e xception &e) { // использование класса, ведущего лог. log ("Exception thrown: %s", e.String() ); // Показываем сообщение об ошибке // и закрываем приложение. }

Изображение слайда
1/1
28

Слайд 28: Стандартные исключения

try { b1[1233]=3; } catch (std::out_of_range) { cout << "Error"; }

Изображение слайда
1/1
29

Слайд 29: Стандартные исключения

try { b1[1233]=3; } catch (std::out_of_range) { cout << "Error"; }

Изображение слайда
1/1
30

Слайд 30: Стандартные классы исключений, определенные в заголовке stdexcept

exception Наиболее общий вид проблемы runtime_error Ошибка выполнения range_error Значение вне диапазона overflow_error Переполненение underflow_error Исчездновение порядка logic_error Проблема до времени выполнения domain_error Аргумент, для которого нет результата invalid_argument Неподходящий аргумент length_error Попытка создать объект большего размера out_of_range Значение вне диапазона

Изображение слайда
1/1
31

Слайд 31: Обработка исключений в стиле Microsoft

#include <stdio.h> #include <excpt.h> main () // Таблица умножения {int i=9; int c; __ try { i=i+1; i=i/(i-i); } __ except(EXCEPTION_EXECUTE_HANDLER ) { c=GetExceptionCode(); printf("Error - %d\n",c); } printf("%d\n",i); }

Изображение слайда
1/1
32

Слайд 32: Обработка исключений в стиле Microsoft

set_terminate ( term_func );

Изображение слайда
1/1
33

Слайд 33: Еще о пространствах имен

namespace foo { int bar; } using namespace foo;

Изображение слайда
1/1
34

Последний слайд презентации: Язык С ++: Пространства имен

namespace Namespace12 { int foo; } void func1() { using namespace Namespace12; // теперь все имена из пространства имён Namespace12 // будут видны здесь без дополнительных префиксов ++foo; } void func2() { // а тут имя нужно уточнить: Namespace12:: foo = 42; }

Изображение слайда
1/1
Реклама. Продолжение ниже