Разделы презентаций


Язык С ++

Содержание

Класс point class point // Класс Точка{ private: int x,y; // координаты int c; // и цвет точки public: point(int u, int v, int w = WHITE); // инициализация ~point();

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

Слайд 1Язык С++
Лекция №7
Объектно-ориентированное программирвоание в С++

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

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

Класс point class point // Класс Точка{		private: int x,y; // координаты int c;  // и цвет

Слайд 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(); }
Реализация методов класса point point::point(int u, int v, int w)  { x=u; y=v; c=w; } point::~point()

Слайд 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(); }

Вызов наследуемого конструктора с параметрами

Что даст непосредственное наследование? // Класс Окружностьclass circ: public point{ protected: int r; // радиус окружности public:

Слайд 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(); // но это метод точки
}

Использование классов point и circ// главная программаvoid main(void){    point p(0,240);  circ c(0,240);

Слайд 6Как работают виртуальные правила
void point::move(int u, int v)
{

hide();
x=u; y=v;
show();
}
«Заглушка»
«Заглушка»
Позднее

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

Слайд 7Как реализованы виртуальные правила
Эти адреса заполняются конструктором

Как реализованы виртуальные правилаЭти адреса заполняются конструктором

Слайд 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; };
};
Виртуальные правила // Класс Точкаclass point { protected: int x,y; // координаты int c; // и цвет

Слайд 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(); // для окружности
}

Использование классов point и circ// главная программаvoid main(void){    point p(0,240);  circ c(0,240);

Слайд 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); }
Наследование и виртуальные правила // Класс Квадратclass square: public circ{public: square(int u, int v, int w, int

Слайд 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();

}
Полиморфизм посредством указателей на объекты void main(void){  // массив указателей на родительский(!) тип  point *figures[3];

Слайд 12Операторы new и delete
Оператор new
type * t = new type(параметры)
Размещаемый

оператор new
new (адрес размещения) тип;
new (адрес размещения) тип(параметры);
Оператор delete
delete(t) //

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

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

Передача объектов как аргументов функции class obj { }

Слайд 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 полям класса

Дружественные функции, дружественные классыclass line; // Опережающее определениеclass box {   int color;  public :

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

// Перегрузка операций ввода/вывода
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);
};
Дружественные функции-операции#include // Перегрузка операций ввода/выводаclass vector{  float x,y,z; public: vector (float a, float b, float

Слайд 16Дружественные функции-операции
// vector inserter
ostream & operator

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

Слайд 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();}
Абстрактные функции class color {protected:  int c; // цвет public:  color (int z) { c=z;

Слайд 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();
}
Множественное наследование// множественное наследованиеclass circus : public color, public figure{public: circus(int x, int y, int r, int

Слайд 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();
Статические члены классаclass st { static int c; // статическое полеpublic: static int incr(void) { return c++;

Слайд 20Шаблоны функций
template // Шаблоны функций
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 inline T sqr ( T x )
{
return x*x ;
}

Шаблоны функцийtemplate  // Шаблоны функцийT sqr ( T x ) {   return x*x ;

Слайд 21Шаблоны класса
template class Queue
{public:
Queue();

const Type& front();
void push(const Type&)
void pop();

private:

};


Queue qi; // Очередь, содержащая целые числа
Queue< vector > qv; // Очередь, содержащая целые числа
Queue qi; // Очередь, содержащая строки

template class Queue

Шаблоны классаtemplate class Queue {public:  Queue();  const Type& front();  void push(const Type&)  void

Слайд 22Шаблон класса c параметром
template class vec
{

private:
T *q;
int n;
public:
vec

(void);
};

template vec::vec(void)
{ q = new T[size];
};


void main()
{ vec d;
vec k;
}
Шаблон класса c параметромtemplate class vec{ private:  T *q;  int n; public:  vec (void);

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

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

начало блока, "ловящего" исключение;
finally (завершение) – всегда выполняется последним
throw

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

Слайд 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!

Обработка исключенийvoid func() { try { throw 1;    } catch (int a)

Слайд 25Обработка исключений
catch может "ловить" данные любого типа, но вовсе не

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

типа этого:

catch(dumbclass) { }

так же, как и

catch(dumbclass&) { }

Так же можно "поймать" и все исключения:
catch(...) { }
Обработка исключенийcatch может

Слайд 26Обработка исключений
try { throw 1;
// throw

'a';
}
catch (long b)
{

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

Слайд 27Обработка исключений
try {
Main.Setup();
Main.Loop();


Main.Close();
}
catch (exception

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

Слайд 28Стандартные исключения
try {
b1[1233]=3;
}


catch (std::out_of_range)
{
cout

}
Стандартные исключенияtry {    b1[1233]=3;   } catch (std::out_of_range)   {			cout

Слайд 29Стандартные исключения
try {
b1[1233]=3;
}


catch (std::out_of_range)
{
cout

}
Стандартные исключенияtry {    b1[1233]=3;   } catch (std::out_of_range)   {			cout

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

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

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

#include
#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#include #include main () // Таблица умножения{int i=9; int c;__try {  i=i+1;

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

set_terminate( term_func );

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

Слайд 33Еще о пространствах имен
namespace foo
{
int bar;
}




using namespace foo;

Еще о пространствах именnamespace foo {  int bar; } using namespace foo;

Слайд 34Пространства имен
namespace Namespace12
{
int foo;
}

void func1()
{
using namespace Namespace12;

// теперь все имена из пространства имён Namespace12
// будут

видны здесь без дополнительных префиксов

++foo;
}

void func2()
{
// а тут имя нужно уточнить:
Namespace12::foo = 42;
}
Пространства именnamespace Namespace12{ int foo;} void func1(){ using namespace Namespace12; // теперь все имена из пространства имён

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика