Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 10 лет назад пользователемВасилий Шалавин
1 C++ Объектно-ориентированное программирование
2 Первая программа C++ #include int n = 5; // глобальная переменная void main() {int n; // локальная переменная cout > n; // ввод из потока cout
3 Объект вектор #include class vector { private: float *p; // указатель на начало вектора int n; // количество элементов в векторе public: vector(int i = 3); // конструктор (назначен параметр по умолчанию) ~vector(); // деструтор (не может иметь параметров) float item(int i); // возвращает указанный элемент void assign(int i, float x); // назначение элемента float num() { return n; }; // возвращает число элементов (inline) float norm(); // возвращает квадрат нормы вектора };
4 Объект вектор – реализация методов vector::vector(int i) { int j; n=i; p=new float[n]; for (j=0; j
5 Объект вектор – реализация методов void vector::assign(int i, float x) { if ((i>=0) && (i
6 Использование объекта main() { int i; vector a(100); vector b; for (i=0; i
7 Перегрузка операций {... float operator()(int i); // возвращает указанный элемент void operator=(vector &x); // присваивает значение одного... // вектора другому } float vector::operator()(int i) { if ((i>=0) && (i
8 Наследование class matrix: public vector {protected: int M,N; int lineaddres(int i, int j) { return i*N+j; }; public: matrix(int m=2, int n=2): vector(m*n) { M=m; N=n; } float item(int i,int j); void assign(int i,int j, float x); int m() { return M;}; int n() { return M;}; }; float matrix::item(int i, int j) { return vector::operator()(lineaddres(i,j)); } void matrix::assign(int i, int j, float x) { vector::assign(lineaddres(i,j),x); }
9 Наследование main() { int i,j; for (i=0; i
10 Атрибуты наследования private – доступны только в данном классе protected – доступны только в данном классе и потомках private– доступны для всеобщего использования
11 Реализация класса Vector class vector { … public: vector(int i = 3); // конструктор vector(float x, float y, float z); // второй конструктор vector & operator=(vector &x); // присваивает значение одного в. другому vector & operator*(float c); // умножение вектора на скаляр float operator*(vector &x); // умножение вектора на вектор float & operator[](int i); // возвращает ссылку на элемент }
12 Реализация класса Vector vector::vector(float x, float y, float z) { n=3; p=new float[n]; vector::assign(0,x); vector::assign(1,y); vector::assign(2,z); cout
13 Реализация класса Vector vector & vector::operator*(float c) // умножение вектора на скаляр { for (int i=0; i
14 Использование класса Vector main() { … vector d(1,1,1); b=d*2.0; b[0]=3; for (i=0; i
15 Наследование и виртуальные правила // Класс Точка 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); // изменение цвета точки };
16 Наследование и виртуальные правила // методы класса 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(); }
17 Наследование и виртуальные правила // главная программа void main(void) { int gdriver = DETECT, gmode; // инициализация графики initgraph(&gdriver, &gmode, "C:/BC5/BGI"); point p(0,240); for (int i=0; i
18 Наследование и виртуальные правила // Класс Точка 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; }; };
19 Наследование и виртуальные правила // методы класса 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(); }
20 Наследование и виртуальные правила // Класс Окружность 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(); }
21 Наследование и виртуальные правила // Класс Окружность 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(); }
22 Наследование и виртуальные правила // Класс Квадрат 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); }
23 Передача объектов как аргументов функции 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); // передается ссылка }
24 Массивы указателей на объекты 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 show(); }
25 Дружественные функции, дружественные классы 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) }
26 Дружественные функции-операции #include // Перегрузка операций ввода/вывода class vector { float x,y,z; public: vector (float a, float b, float c) {x=a; y=b; z=c; } friend ostream & operator > (istream & stream, vector &obj); };
27 Дружественные функции-операции // vector inserter ostream & operator obj.z; return stream; } void main() { vector a(1.0,2.0,3.0); cout > a; cout
28 Множественное наследование, чистые виртуальные функции 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();}
29 Множественное наследование, чистые виртуальные функции // множественное наследование 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) { int gdriver = DETECT, gmode; initgraph(&gdriver, &gmode, "C:/BC5/BGI"); // figure f(320,240,10); // так нельзя! circus cr(320,240,10,YELLOW); cr.show(); getch(); closegraph(); }
30 Статические члены класса class st { static int c; public: static int incr(void) { return c++; } st(void) {cin
31 Шаблоны template // Шаблоны функций T sqr ( T x ) { return x*x ; } main() { int i = 3; float x = 3.1; cout
32 Шаблоны template // Шаблоны классов class vec { T *q; int n; public: vec (void); }; template vec ::vec(void) { q = new T[size]; }; void main() { vec d; vec k; }
33 Обработка исключений Обработка исключений в стиле С++ try (пытаться) - начало блока исключений; catch (поймать) - начало блока, "ловящего" исключение; Finally (завершение) – всегда выполняется последним throw (бросить) - ключевое слово, "создающее" ("возбуждающее") исключение. Блок Try обработчика исключений Try...Catch...Finally содержит раздел кода, который будет отслеживать обработчик ошибок. Если во время выполнения какого-либо кода данного раздела возникает ошибка, Visual Basic проверяет каждый оператор Catch в пределах группы операторов Try...Catch...Finally, пока не обнаружит тот, условия которого совпадают с условиями ошибки. При обнаружении управление передается первой строке кода в этом блоке Catch. Если соответствующий оператор Catch не найден, поиск продолжается в операторах Catch внешнего блока Try...Catch...Finally, который содержит блок, в котором возникло исключение. Этот процесс продолжается по всему стеку, пока не будет обнаружен соответствующий блок Catch в текущей процедуре. Если он не найден, выдается ошибка. Код в разделе Finally всегда выполняется последним, непосредственно перед тем, как блок обработки ошибок выйдет из области видимости, независимо от того, выполнен ли код в блоках Catch. В разделе Finally следует поместить код очистки, чтобы закрыть файлы и освободить объекты.
34 Обработка исключений 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!
35 Обработка исключений catch может "ловить" данные любого типа, но вовсе не обязательно при это указывать переменную. Т.е. прекрасно будет работать что-нибудь типа этого: catch(dumbclass) { } так же, как и catch(dumbclass&) { } Так же можно "поймать" и все исключения: catch(...) { }
36 Обработка исключений try { throw 1; // throw 'a'; } catch (long b) { cout
37 Обработка исключений try { Main.Setup(); Main.Loop(); Main.Close(); } catch (Exception &e) { // использование класса, ведущего лог. log("Exception thrown: %s", e.String()); // Показываем сообщение об ошибке и закрываем приложение. }
38 Обработка исключений в стиле Microsoft #include 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); }
39 Обработка исключений в стиле Microsoft set_terminate( term_func );
40 Препроцессор языка С #define MAX 100 #define NAME Borland C++ #define MIN(a,b) ( (a)
41 Препроцессор языка С void main () { #if MAX>99 printf(MAX>99\n); #else printf(MAX
42 Препроцессор языка С #if defined(MAX) && defined(MIN) #ifdef MAX #ifndef MAX #if defined(MAX) … #elif defined (MIN) … #else … #endif
43 Препроцессор языка С #pragma warn +xxx, -xxx, and.xxx #error Error N 3
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.