C++ Объектно-ориентированное программирование. Первая программа C++ #include int n = 5; // глобальная переменная void main() {int n; // локальная переменная.

Презентация:



Advertisements
Похожие презентации
Обработка исключительных ситуаций Исключительная ситуация (исключение) – это ошибка, возникающая во время выполнения программы. Например, ошибка работы.
Advertisements

Инструкции C++ Условная инструкция Формат: if (условие) оператор; else оператор; Пример: if (i!=0) { if (j) j++; if(k) k++; else if(p) k--; } else i--;
Лекция 4. Введение в С++ Наследование, множественное наследование. Конструкторы, деструкторы. Виртуальные функции.
Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
Обработка исключений Основы метапрограммированияОбработка исключений Основы метапрограммирования.
НГТУ, каф. ВТ Наследование в С++ Макаревич Л. Г.НГТУ, каф. ВТ Наследование в С++ Макаревич Л. Г.
Преобразования типов В языке C/C++ имеется несколько операций преобразования типов. Они используются в случае, если переменная одного типа должна рассматриваться.
Функции Функция – именованная последовательность описаний и операторов, выполняющая некоторое действие. Может иметь параметры и возвращать значение. Функция.
Инструкции C++ Условная инструкция Формат: if (условие) оператор; else оператор; Пример: if (i!=0) { if (j) j++; if(k) k++; else if(p) k--; } else i--;
Статические поля класса Статические поля хранят данные, общие для всех элементов класса. Статическое поле существует в единственном экземпляре для всех.
Лекция 10 ОбъектыЛекция 10 ОбъектыООП Инкапсуляция Возможность совместного хранения данных и кода для их обработки Наследование Возможность расширять существующие.
Прикладное программирование кафедра прикладной и компьютерной оптики Полиморфизм.
С++, начала ООП Семинар 3 Рябова Анна Сергеевна
Потоки Язык C++ не обеспечивает средств для ввода/вывода Ему это и не нужно; такие средства легко и элегантно можно создать с помощью самого языка Традиционно.
Объектно-ориентированное программирование С++. Лекция 9 Карпов В.Э.
Наследование Наследование – это отношение является между классами. class Person { string first_name; int birth_year;... } class Student : Person { float.
Наследование Полиморфизм ВЫЗОВ КОНСТРУКТОРОВ И ДЕСТРУКТОРОВ ПРИ НАСЛЕДОВАНИИ.
С++, ООП Семинар 2 Рябова Анна Сергеевна
1 Обработка исключений в Java Одно из важнейших преимуществ Java – разработанный на уровне языка механизм обработки исключений. Исключение в Java - это.
Лекция 9 Функции. Массивы-параметры функции Передача массива в функцию Пример: void array_enter(int a[], int size) { int i; for (i = 0; i < size; i++)
Транксрипт:

C++ Объектно-ориентированное программирование

Первая программа C++ #include int n = 5; // глобальная переменная void main() {int n; // локальная переменная cout > n; // ввод из потока cout

Объект вектор #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(); // возвращает квадрат нормы вектора };

Объект вектор – реализация методов vector::vector(int i) { int j; n=i; p=new float[n]; for (j=0; j

Объект вектор – реализация методов void vector::assign(int i, float x) { if ((i>=0) && (i

Использование объекта main() { int i; vector a(100); vector b; for (i=0; i

Перегрузка операций {... float operator()(int i); // возвращает указанный элемент void operator=(vector &x); // присваивает значение одного... // вектора другому } float vector::operator()(int i) { if ((i>=0) && (i

Наследование 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); }

Наследование main() { int i,j; for (i=0; i

Атрибуты наследования private – доступны только в данном классе protected – доступны только в данном классе и потомках private– доступны для всеобщего использования

Реализация класса 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); // возвращает ссылку на элемент }

Реализация класса 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

Реализация класса Vector vector & vector::operator*(float c) // умножение вектора на скаляр { for (int i=0; i

Использование класса Vector main() { … vector d(1,1,1); b=d*2.0; b[0]=3; for (i=0; i

Наследование и виртуальные правила // Класс Точка 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); // изменение цвета точки };

Наследование и виртуальные правила // методы класса 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(); }

Наследование и виртуальные правила // главная программа void main(void) { int gdriver = DETECT, gmode; // инициализация графики initgraph(&gdriver, &gmode, "C:/BC5/BGI"); point p(0,240); for (int i=0; i

Наследование и виртуальные правила // Класс Точка 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; }; };

Наследование и виртуальные правила // методы класса 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(); }

Наследование и виртуальные правила // Класс Окружность 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(); }

Наследование и виртуальные правила // Класс Окружность 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(); }

Наследование и виртуальные правила // Класс Квадрат 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); }

Передача объектов как аргументов функции 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); // передается ссылка }

Массивы указателей на объекты 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(); }

Дружественные функции, дружественные классы 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) }

Дружественные функции-операции #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); };

Дружественные функции-операции // vector inserter ostream & operator obj.z; return stream; } void main() { vector a(1.0,2.0,3.0); cout > a; cout

Множественное наследование, чистые виртуальные функции 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();}

Множественное наследование, чистые виртуальные функции // множественное наследование 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(); }

Статические члены класса class st { static int c; public: static int incr(void) { return c++; } st(void) {cin

Шаблоны template // Шаблоны функций T sqr ( T x ) { return x*x ; } main() { int i = 3; float x = 3.1; cout

Шаблоны template // Шаблоны классов class vec { T *q; int n; public: vec (void); }; template vec ::vec(void) { q = new T[size]; }; void main() { vec d; vec k; }

Обработка исключений Обработка исключений в стиле С++ try (пытаться) - начало блока исключений; catch (поймать) - начало блока, "ловящего" исключение; Finally (завершение) – всегда выполняется последним throw (бросить) - ключевое слово, "создающее" ("возбуждающее") исключение. Блок Try обработчика исключений Try...Catch...Finally содержит раздел кода, который будет отслеживать обработчик ошибок. Если во время выполнения какого-либо кода данного раздела возникает ошибка, Visual Basic проверяет каждый оператор Catch в пределах группы операторов Try...Catch...Finally, пока не обнаружит тот, условия которого совпадают с условиями ошибки. При обнаружении управление передается первой строке кода в этом блоке Catch. Если соответствующий оператор Catch не найден, поиск продолжается в операторах Catch внешнего блока Try...Catch...Finally, который содержит блок, в котором возникло исключение. Этот процесс продолжается по всему стеку, пока не будет обнаружен соответствующий блок Catch в текущей процедуре. Если он не найден, выдается ошибка. Код в разделе Finally всегда выполняется последним, непосредственно перед тем, как блок обработки ошибок выйдет из области видимости, независимо от того, выполнен ли код в блоках Catch. В разделе Finally следует поместить код очистки, чтобы закрыть файлы и освободить объекты.

Обработка исключений 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!

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

Обработка исключений try { throw 1; // throw 'a'; } catch (long b) { cout

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

Обработка исключений в стиле 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); }

Обработка исключений в стиле Microsoft set_terminate( term_func );

Препроцессор языка С #define MAX 100 #define NAME Borland C++ #define MIN(a,b) ( (a)

Препроцессор языка С void main () { #if MAX>99 printf(MAX>99\n); #else printf(MAX

Препроцессор языка С #if defined(MAX) && defined(MIN) #ifdef MAX #ifndef MAX #if defined(MAX) … #elif defined (MIN) … #else … #endif

Препроцессор языка С #pragma warn +xxx, -xxx, and.xxx #error Error N 3