🗊Презентация Абстрактные классы (C++)

Нажмите для полного просмотра!
Абстрактные классы (C++), слайд №1Абстрактные классы (C++), слайд №2Абстрактные классы (C++), слайд №3Абстрактные классы (C++), слайд №4Абстрактные классы (C++), слайд №5Абстрактные классы (C++), слайд №6Абстрактные классы (C++), слайд №7Абстрактные классы (C++), слайд №8Абстрактные классы (C++), слайд №9Абстрактные классы (C++), слайд №10Абстрактные классы (C++), слайд №11Абстрактные классы (C++), слайд №12Абстрактные классы (C++), слайд №13Абстрактные классы (C++), слайд №14Абстрактные классы (C++), слайд №15Абстрактные классы (C++), слайд №16Абстрактные классы (C++), слайд №17Абстрактные классы (C++), слайд №18Абстрактные классы (C++), слайд №19

Содержание

Вы можете ознакомиться и скачать презентацию на тему Абстрактные классы (C++). Доклад-сообщение содержит 19 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

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


Слайд 1





Абстрактные классы 
Абстрактным классом называется класс, в котором есть хотя бы одна чистая (пустая) виртуальная функция, которой соответствует следующее определение
virtual тип имя_функции(список формальных параметров) = 0; 
В этой записи конструкция "=0" называется чистый cпецификатор
virtual void fpure(void) = 0;
Описание слайда:
Абстрактные классы Абстрактным классом называется класс, в котором есть хотя бы одна чистая (пустая) виртуальная функция, которой соответствует следующее определение virtual тип имя_функции(список формальных параметров) = 0; В этой записи конструкция "=0" называется чистый cпецификатор virtual void fpure(void) = 0;

Слайд 2





Чистая виртуальная функция "ничего не делает" и недоступна для вызовов
Чистая виртуальная функция "ничего не делает" и недоступна для вызовов
 Ее назначение - служить основой для подменяющих ее функций в производных классах
 Исходя из этого становится понятной невозможность создания самостоятельных объектов абстрактного класса
 Абстрактный класс может использоваться только в качестве базового для производных классов
Описание слайда:
Чистая виртуальная функция "ничего не делает" и недоступна для вызовов Чистая виртуальная функция "ничего не делает" и недоступна для вызовов Ее назначение - служить основой для подменяющих ее функций в производных классах Исходя из этого становится понятной невозможность создания самостоятельных объектов абстрактного класса Абстрактный класс может использоваться только в качестве базового для производных классов

Слайд 3





Абстрактный класс:
Абстрактный класс:
class В
{ 
 protected: 
    virtual void func(char) =0;
    void sos(int);
};
Описание слайда:
Абстрактный класс: Абстрактный класс: class В { protected: virtual void func(char) =0; void sos(int); };

Слайд 4





На основе класса в можно по-разному построить производные классы:
На основе класса в можно по-разному построить производные классы:
class D: public В { void func(char); }; 
class E: public В { void sos(int); };
В классе D чистая виртуальная функция func() заменена конкретной виртуальной функцией того же типа. Функция B::sos() наследуется классом D и доступна в нем и в его методах. Класс D не абстрактный
 В классе E переопределена функция B::sos() , а виртуальная функция B::func() унаследована. Тем самым класс E становится абстрактным и может использоваться только как базовый
Описание слайда:
На основе класса в можно по-разному построить производные классы: На основе класса в можно по-разному построить производные классы: class D: public В { void func(char); }; class E: public В { void sos(int); }; В классе D чистая виртуальная функция func() заменена конкретной виртуальной функцией того же типа. Функция B::sos() наследуется классом D и доступна в нем и в его методах. Класс D не абстрактный В классе E переопределена функция B::sos() , а виртуальная функция B::func() унаследована. Тем самым класс E становится абстрактным и может использоваться только как базовый

Слайд 5





Механизм абстрактных классов разработан для представления общих понятий, которые в дальнейшем предполагается конкретизировать
Механизм абстрактных классов разработан для представления общих понятий, которые в дальнейшем предполагается конкретизировать
Эти общие понятия обычно невозможно использовать непосредственно, но на их основе можно, как на базе, построить частные производные классы, пригодные для описания конкретных объектов
Например, из абстрактного класса "фигура" можно сформировать класс "треугольник", "окружность" и т.д. В качестве примера рассмотрим программу, в которой на основе базового класса point построен абстрактный класс figure
Описание слайда:
Механизм абстрактных классов разработан для представления общих понятий, которые в дальнейшем предполагается конкретизировать Механизм абстрактных классов разработан для представления общих понятий, которые в дальнейшем предполагается конкретизировать Эти общие понятия обычно невозможно использовать непосредственно, но на их основе можно, как на базе, построить частные производные классы, пригодные для описания конкретных объектов Например, из абстрактного класса "фигура" можно сформировать класс "треугольник", "окружность" и т.д. В качестве примера рассмотрим программу, в которой на основе базового класса point построен абстрактный класс figure

Слайд 6





В классе figure определены: конструктор, чистая виртуальная функция show() для вывода изображения фигуры, например, на экран дисплея
В классе figure определены: конструктор, чистая виртуальная функция show() для вывода изображения фигуры, например, на экран дисплея
Кроме того, в класс входят методы hide() - убрать изображение фигуры с экрана дисплея и move() - переместить изображение фигуры в заданную точку экрана
 Функции hide() и move() обращаются к чистой виртуальной функции show() 
Однако реальное выполнение show() возможно только после создания производного класса, в котором чистая виртуальная функция show() будет подменена компонентной функцией для изображения конкретной фигуры
Введем класс point, определяющий понятие "точка на экране дисплея". Разместим описание класса в отдельном файле с именем point.h
Описание слайда:
В классе figure определены: конструктор, чистая виртуальная функция show() для вывода изображения фигуры, например, на экран дисплея В классе figure определены: конструктор, чистая виртуальная функция show() для вывода изображения фигуры, например, на экран дисплея Кроме того, в класс входят методы hide() - убрать изображение фигуры с экрана дисплея и move() - переместить изображение фигуры в заданную точку экрана Функции hide() и move() обращаются к чистой виртуальной функции show() Однако реальное выполнение show() возможно только после создания производного класса, в котором чистая виртуальная функция show() будет подменена компонентной функцией для изображения конкретной фигуры Введем класс point, определяющий понятие "точка на экране дисплея". Разместим описание класса в отдельном файле с именем point.h

Слайд 7





// point.h - определение функций класса
// point.h - определение функций класса

class point
{ int x,y;
 public: 
    point(int, int);
    int& point::givex(void);
    int& point::givey(void);
    void point::show(void);
    void point::hide(void);
    void point::move(int xn, int yn);
};
Описание слайда:
// point.h - определение функций класса // point.h - определение функций класса class point { int x,y; public: point(int, int); int& point::givex(void); int& point::givey(void); void point::show(void); void point::hide(void); void point::move(int xn, int yn); };

Слайд 8





// POINT.СРР - определение функций класса
// POINT.СРР - определение функций класса

#ifndef POINTCPP
#define POINTCPP 1 
#include <graphics.h>         
#include "point.h" 

point::point(int xi, int yi) { x = xi; у = yi; }
int& point::givex(void) { return x; }
int& point::givey(void) { return y; } 
void point::show(void)
  { putpixel(x, у,getcolor()); } 
void point::hide(void)
  { putpixel (x,y,getbkcolor()); } // Цвет фона
void point::move(int xn, int yn)
   { hide() ; x = xn; у = yn; show(); }
#endif
Описание слайда:
// POINT.СРР - определение функций класса // POINT.СРР - определение функций класса #ifndef POINTCPP #define POINTCPP 1 #include <graphics.h> #include "point.h" point::point(int xi, int yi) { x = xi; у = yi; } int& point::givex(void) { return x; } int& point::givey(void) { return y; } void point::show(void) { putpixel(x, у,getcolor()); } void point::hide(void) { putpixel (x,y,getbkcolor()); } // Цвет фона void point::move(int xn, int yn) { hide() ; x = xn; у = yn; show(); } #endif

Слайд 9





Программа для иллюстрации работы 
Программа для иллюстрации работы 
с классом point
Описание слайда:
Программа для иллюстрации работы Программа для иллюстрации работы с классом point

Слайд 10





//Р9-04.СРР - работа с классом "точка на экране" 
//Р9-04.СРР - работа с классом "точка на экране" 
#include <graphics.h> 
#include <conio.h>        // Для getch(); 
#include "point.cpp" // Определение класса point

void main() { 
  point A(200,50) ;  // Создается невидимая точка А
  point В;           // Невидимая точка В с нулевыми
                     // координатами 
  point D(500,200) ; // Создается невидимая точка D
  int dr = DETECT, mod;
  initgraph(&dr,&mod,"c:\\borlandc\\bgi") ;
  A.show();            // Показать на экране точку А 
  getch();             // Ждать нажатия клавиши 
  B.show();            // Показать на экране точку В 
  getch(); D.show();   // Показать на экране точку D
  getch(); A.move() ;  // Переместить точку А
  getch(); B.move (50, 60) ; // Переместить точку В
  getch(); closegraph();     // Закрыть графический режим
 }
Описание слайда:
//Р9-04.СРР - работа с классом "точка на экране" //Р9-04.СРР - работа с классом "точка на экране" #include <graphics.h> #include <conio.h> // Для getch(); #include "point.cpp" // Определение класса point void main() { point A(200,50) ; // Создается невидимая точка А point В; // Невидимая точка В с нулевыми // координатами point D(500,200) ; // Создается невидимая точка D int dr = DETECT, mod; initgraph(&dr,&mod,"c:\\borlandc\\bgi") ; A.show(); // Показать на экране точку А getch(); // Ждать нажатия клавиши B.show(); // Показать на экране точку В getch(); D.show(); // Показать на экране точку D getch(); A.move() ; // Переместить точку А getch(); B.move (50, 60) ; // Переместить точку В getch(); closegraph(); // Закрыть графический режим }

Слайд 11





Определим абстрактный класс
Определим абстрактный класс
   figure (в файле figure. срр):
Описание слайда:
Определим абстрактный класс Определим абстрактный класс figure (в файле figure. срр):

Слайд 12





//FIGURE.CPP - абстрактный класс
//FIGURE.CPP - абстрактный класс

#include "point.срр"
class figure: public point { 
  public: 
                  // Конструктор абстрактного класса figure
  figure (point p): point(p.givex(), p.givey() ) { }
  virtual void show()=0; // Чистая виртуальная функция 
  void hide()        // Функция для скрытия изображения
   { int bk, cc;
     bk = getbkcolor(); cc = getcolor (); setcolor(bk);
     show();       // Обращение к чистой виртуальной функции 
     setcolor(ее); 
   } 
  void move(point p) // Перемещение фигуры в точку "p" 
      { hide (); х = р.givex(); у = p.givey(); show(); }
  };
Описание слайда:
//FIGURE.CPP - абстрактный класс //FIGURE.CPP - абстрактный класс #include "point.срр" class figure: public point { public: // Конструктор абстрактного класса figure figure (point p): point(p.givex(), p.givey() ) { } virtual void show()=0; // Чистая виртуальная функция void hide() // Функция для скрытия изображения { int bk, cc; bk = getbkcolor(); cc = getcolor (); setcolor(bk); show(); // Обращение к чистой виртуальной функции setcolor(ее); } void move(point p) // Перемещение фигуры в точку "p" { hide (); х = р.givex(); у = p.givey(); show(); } };

Слайд 13





На базе класса figure определим неабстрактные классы: 
На базе класса figure определим неабстрактные классы:
Описание слайда:
На базе класса figure определим неабстрактные классы: На базе класса figure определим неабстрактные классы:

Слайд 14







//ELLIPS.FIG - конкретный класс "эллипс" 

class ellips : public figure { 
  int rx,ry;
  public: 
                        // Конструктор: 
  ellips (point d, int radx, int rady): figure(d)
     { rx = radx; ry = rady; } 
  void show()
     { ellipse(x,y,0,360,rx,ry); return; }
 };
Описание слайда:
//ELLIPS.FIG - конкретный класс "эллипс" class ellips : public figure { int rx,ry; public: // Конструктор: ellips (point d, int radx, int rady): figure(d) { rx = radx; ry = rady; } void show() { ellipse(x,y,0,360,rx,ry); return; } };

Слайд 15







//CIRC.FIG - конкретный класс "окружность"

class circ: public figure { 
    int radius; 
 public: 
    circ(point e, int rad): figure(e) 
         {radius = rad; ) // Конструктор:
    void show() { circle(x,y,radius); }
 };
Описание слайда:
//CIRC.FIG - конкретный класс "окружность" class circ: public figure { int radius; public: circ(point e, int rad): figure(e) {radius = rad; ) // Конструктор: void show() { circle(x,y,radius); } };

Слайд 16





В следующей программе используются все три класса: 
В следующей программе используются все три класса:
Описание слайда:
В следующей программе используются все три класса: В следующей программе используются все три класса:

Слайд 17





//Р10-08.СРР - абстрактные классы и чистые виртуальные функции 
//Р10-08.СРР - абстрактные классы и чистые виртуальные функции 
#include <graphics.h>
#include "figure.cpp" 
#include "circ.fig" 
#include "ellips.fig" 
#include <stdio.h>

void main(void) { 
 point A(100,80), B(300,200);
 circ С(А, 60);
 ellips E(В,200,100);
 { int dr = DETECT, mod; 
   initgraph(&dr,&mod,"с:\\borlandc\\bgi");
   A.show();  getchO;   // Изобразить точку  
   В.show();  getch();  // Изобразить точку 
   С.show();  getch();  // Показать окружность 
   E.show (); getch();  // Показать эллипс
   С.move(B); getch();  // Совместить фигуры
   E.hide();  getch();  // Убрать эллипс
    C.hideO ;  getchO ;  // Убрать окружность 
 }
closegraph(); }
Описание слайда:
//Р10-08.СРР - абстрактные классы и чистые виртуальные функции //Р10-08.СРР - абстрактные классы и чистые виртуальные функции #include <graphics.h> #include "figure.cpp" #include "circ.fig" #include "ellips.fig" #include <stdio.h> void main(void) { point A(100,80), B(300,200); circ С(А, 60); ellips E(В,200,100); { int dr = DETECT, mod; initgraph(&dr,&mod,"с:\\borlandc\\bgi"); A.show(); getchO; // Изобразить точку В.show(); getch(); // Изобразить точку С.show(); getch(); // Показать окружность E.show (); getch(); // Показать эллипс С.move(B); getch(); // Совместить фигуры E.hide(); getch(); // Убрать эллипс C.hideO ; getchO ; // Убрать окружность } closegraph(); }

Слайд 18





В программе на базе класса figure определены два производных класса: circ (окружность) и ellips (эллипс)
В программе на базе класса figure определены два производных класса: circ (окружность) и ellips (эллипс)
Для обоих классов унаследованный класс point определяет центры фигур
В обоих классах определены конкретные методы show() и из абстрактного класса figure унаследованы функции move() и hide()

Комментарии к операторам основной программы содержат полные (квалифицированные) имена исполняемых функций
Описание слайда:
В программе на базе класса figure определены два производных класса: circ (окружность) и ellips (эллипс) В программе на базе класса figure определены два производных класса: circ (окружность) и ellips (эллипс) Для обоих классов унаследованный класс point определяет центры фигур В обоих классах определены конкретные методы show() и из абстрактного класса figure унаследованы функции move() и hide() Комментарии к операторам основной программы содержат полные (квалифицированные) имена исполняемых функций

Слайд 19






По сравнению с обычными классами абстрактные классы пользуются "ограниченными правами". Как говорилось, невозможно создать объект абстрактного класса. Абстрактный класс нельзя употреблять для задания типа параметра функции или в качестве типа возвращаемого функцией значения. Абстрактный класс нельзя использовать при явном приведении типов. В то же время можно определять указатели и ссылки на абстрактные классы
Объект абстрактного класса не может быть формальным параметром функции, однако формальным параметром может быть указатель абстрактного класса. В этом случае появляется возможность передавать в вызываемую функцию в качестве фактического параметра значение указателя на производный объект, заменяя им указатель на абстрактный базовый класс.
Описание слайда:
По сравнению с обычными классами абстрактные классы пользуются "ограниченными правами". Как говорилось, невозможно создать объект абстрактного класса. Абстрактный класс нельзя употреблять для задания типа параметра функции или в качестве типа возвращаемого функцией значения. Абстрактный класс нельзя использовать при явном приведении типов. В то же время можно определять указатели и ссылки на абстрактные классы Объект абстрактного класса не может быть формальным параметром функции, однако формальным параметром может быть указатель абстрактного класса. В этом случае появляется возможность передавать в вызываемую функцию в качестве фактического параметра значение указателя на производный объект, заменяя им указатель на абстрактный базовый класс.



Похожие презентации
Mypresentation.ru
Загрузить презентацию