C++
Download
1 / 43

C++ - PowerPoint PPT Presentation


  • 125 Views
  • Uploaded on

C++. Объектно-ориентированное программирование. Первая программа C++. # include < iostream . h > int n = 5; // глобальная переменная void main () { int n ; // локальная переменная cout << " Enter n " ; // вывод в поток cin >> n ; // ввод из потока

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'C++' - ziazan


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
C

C++

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


C
Первая программа C++

#include <iostream.h>

int n = 5; // глобальная переменная

void main()

{int n; // локальная переменная

cout << "Enter n" ; // вывод в поток

cin >> n; // ввод из потока

cout << "n = " << n; // вывод переменной в поток

cout << "global n = " << ::n; // вывод глобальной переменной

}


C
Объектвектор

#include <iostream.h>

#include <alloc.h>

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

};


C
Объектвектор – реализация методов

vector::vector(int i)

{ int j;

n=i;

p=new float[n];

for (j=0; j<n; j++) *(p+j)=0;

cout << "vector created " << n << "\n";

}

vector::~vector()

{ delete p;

cout << "vector destroyed\n";

}

float vector::item(int i)

{ if ((i>=0) && (i<n)) return *(p+i);

else {cout << "Error in vector::item"; return 0;}

}


C
Объектвектор – реализация методов

void vector::assign(int i, float x)

{

if ((i>=0) && (i<n)) *(p+i)=x;

else cout << "Error in vector::assign";

}

float vector::norm()

{ int i;

float x=0;

for (i=0; i<n; i++) x+=p[i]*p[i];

return x;

}


C
Использование объекта

main()

{ int i;

vector a(100);

vector b;

for (i=0; i<a.num(); i++) a.assign(i,i);

cout << a.norm() << "\n";

a.~vector();

}

vector created 100

vector created 3

328350

vector destroyed 100

vector destroyed 3


C
Перегрузка операций

{

...

float operator()(int i); // возвращает указанный элемент

void operator=(vector &x); // присваивает значение одного ... // векторадругому

}

float vector::operator()(int i)

{ if ((i>=0) && (i<n)) return *(p+i);

else {cout << "Error in vector::item"; return 0;}

}

void vector::operator=(vector &x)

{ if (x.num()==n)

for (int i=0; i<n; i++) p[i]=x(i);

else cout << "Error in operator =\n";

}

// в main():

c=a;

cout << c(10) << "\n";


C
Наследование

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); }


C
Наследование

11 12 13

21 22 23

31 32 33

main()

{ int i,j;

for (i=0; i<z.m(); i++)

{

for (j=0; j<z.n(); j++)

{

z.assign(i,j,(i+1)*10+j+1);

cout << z.item(i,j) << " ";

}

cout << "\n";

}

}


C
Атрибуты наследования

  • private – доступны только в данном классе

  • protected – доступны только в данном классе и потомках

  • private – доступны для всеобщего использования


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

}


Vector1
Реализация класса 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 << "3d vector created " << n << "\n";

}

vector& vector::operator=(vector &x)

{

if (x.num()==n)

for (int i=0; i<n; i++) p[i]=x(i);

else cout << "Error in operator =\n";

return *this;

}


Vector2
Реализация класса Vector

vector & vector::operator*(float c) // умножение вектора на скаляр

{

for (int i=0; i<n; i++) p[i]*=c;

return *this;

}

float vector::operator*(vector &x) // умножение вектора на вектор

{ float s=0.0;

for (int i=0; i<n; i++) s+=operator()(i)*x(i);

return s;

}

float & vector::operator[](int i)

{

if ((i>=0) && (i<n)) return p[i];

else {cout << "Error in vector::item"; return p[0];}

}


Vector3
Использование класса Vector

main()

{ …

vector d(1,1,1);

b=d*2.0;

b[0]=3;

for (i=0; i<b.num(); i++) cout << b(i) << " ";

}

3 2 2


C
Наследование и виртуальные правила

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

// КлассТочка

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); // изменение цвета точки

};


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(); }


C
Наследование и виртуальные правила

// главная программа

void main(void)

{

int gdriver = DETECT, gmode; // инициализацияграфики

initgraph(&gdriver, &gmode, "C:/BC5/BGI");

point p(0,240);

for (int i=0; i<640; i++) { p.move(i,240); delay(10); }

p.~point();

getch();

closegraph();

}


C
Наследование и виртуальные правила

// КлассТочка

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; };

};


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(); }


C
Наследование и виртуальные правила

// КлассОкружность

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(); }


C
Наследование и виртуальные правила

// КлассОкружность

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(); }


C
Наследование и виртуальные правила

// КлассКвадрат

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); }


C
Передача объектов как аргументов функции

class obj { }


C
Массивы указателей на объекты аргументов функции

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();

}


C
Дружественные функции, дружественные классы

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) }


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

#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);

};


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

// vector inserter

ostream & operator << (ostream & stream, vector obj)

{ stream << "(" << obj.x << ",";

stream << obj.y << ",";

stream << obj.y << ")\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;

}


C
Множественное наследование, чистые виртуальные функции

class color

{protected:

int c; // цвет

public:

color (int z) { c=z; } // конструктор

int getcolor() { return c; }

};

classfigure

{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();}


C
Множественное наследование, чистые виртуальные функции

// множественноенаследование

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();

}


C
Статические члены класса чистые виртуальные функции

class st {

static int c;

public:

static int incr(void) { return c++; }

st(void) {cin << incr(); }

~st(void) { c--; }

}

. . . .

st::c=0;

st::incr();


C
Шаблоны чистые виртуальные функции

template <class T> // Шаблоныфункций

T sqr ( T x )

{

return x*x ;

}

main()

{ int i = 3;

float x = 3.1;

cout << sqr(i) << “\n”;

cout << sqr(x) << “\n”;

}


C
Шаблоны чистые виртуальные функции

template <class T, int size> // Шаблоныклассов

class vec

{ T *q;

int n;

public:

vec (void);

};

template <class T, int size>

vec<T,size>::vec(void)

{ q = new T[size];

};

void main()

{ vec <double, 200> d;

vec <int, 100> k; }


C
Обработка исключений чистые виртуальные функции

Обработка исключений в стиле С++

• try (пытаться) - начало блока исключений;

• catch (поймать) - начало блока, "ловящего" исключение;

  • Finally (завершение) – всегда выполняется последним

    • throw (бросить) - ключевое слово, "создающее" ("возбуждающее") исключение.

    Блок Try обработчика исключений Try...Catch...Finally содержит раздел кода, который будет отслеживать обработчик ошибок. Если во время выполнения какого-либо кода данного раздела возникает ошибка, Visual Basic проверяет каждый оператор Catch в пределах группы операторов Try...Catch...Finally, пока не обнаружит тот, условия которого совпадают с условиями ошибки. При обнаружении управление передается первой строке кода в этом блоке Catch. Если соответствующий оператор Catch не найден, поиск продолжается в операторах Catch внешнего блока Try...Catch...Finally, который содержит блок, в котором возникло исключение. Этот процесс продолжается по всему стеку, пока не будет обнаружен соответствующий блок Catch в текущей процедуре. Если он не найден, выдается ошибка.

    Код в разделе Finally всегда выполняется последним, непосредственно перед тем, как блок обработки ошибок выйдет из области видимости, независимо от того, выполнен ли код в блоках Catch. В разделе Finally следует поместить код очистки, чтобы закрыть файлы и освободить объекты.


C
Обработка исключений чистые виртуальные функции

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!


C
Обработка исключений чистые виртуальные функции

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

catch(dumbclass) { }

так же, как и

catch(dumbclass&) { }

Так же можно "поймать" и все исключения:

catch(...) { }


C
Обработка исключений чистые виртуальные функции

try { throw 1;

// throw 'a';

}

catch (long b)

{ cout << "пойман тип long: " << b << endl; }

catch (char b)

{ cout << "пойман тип char: " << b << endl; }


C
Обработка исключений чистые виртуальные функции

try {

Main.Setup();

Main.Loop();

Main.Close();

}

catch (Exception &e)

{ // использование класса, ведущего лог.

log("Exception thrown: %s", e.String());

// Показываем сообщение об ошибке и закрываем приложение.

}


Microsoft
Обработка исключений в стиле чистые виртуальные функции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);

}


Microsoft1
Обработка исключений в стиле чистые виртуальные функцииMicrosoft

set_terminate( term_func );


C
Препроцессор языка С чистые виртуальные функции

#define MAX 100

#define NAME “Borland C++”

#define MIN(a,b) ( (a)<(b)) ? (a) : (b)

printf(“Минимумиз x и y %d, MIN(x,y));

#include <имя_файла>

#include “имя_файла”

#include имя_макроса


C
Препроцессор языка С чистые виртуальные функции

void main ()

{

#if MAX>99

printf(“MAX>99\n”);

#else

printf(“MAX<99\n”);

#endif

return 0;

}


C
Препроцессор языка С чистые виртуальные функции

#if defined(MAX) && defined(MIN)

#ifdef MAX

#ifndef MAX

#if defined(MAX)

#elif defined (MIN)

#else

#endif


C
Препроцессор языка С чистые виртуальные функции

#pragma warn +xxx, -xxx, and .xxx

#error Error N 3


ad