Что такое findslide.org?

FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.


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

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

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

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

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

Содержание

Чистая виртуальная функция "ничего не делает" и недоступна для вызовов Ее назначение - служить основой для подменяющих ее функций в производных классах Исходя из этого становится понятной невозможность создания самостоятельных объектов абстрактного класса Абстрактный класс может
Абстрактные классы Абстрактным классом называется класс, в котором есть хотя бы одна Чистая виртуальная функция Абстрактный класс:class В{ protected:   virtual void func(char) =0;  void sos(int);}; На основе класса в можно по-разному построить производные классы:class D: public В Механизм абстрактных классов разработан для представления общих понятий, которые в дальнейшем предполагается В классе figure определены: конструктор, чистая виртуальная функция show() для вывода изображения // point.h - определение функций классаclass point{ int x,y; public: // POINT.СРР - определение функций класса#ifndef POINTCPP#define POINTCPP 1 #include Программа для иллюстрации работы с классом point //Р9-04.СРР - работа с классом Определим абстрактный класс  figure (в файле figure. срр): //FIGURE.CPP - абстрактный класс#include На базе класса figure определим неабстрактные классы: //ELLIPS.FIG - конкретный класс //CIRC.FIG - конкретный класс В следующей программе используются все три класса: //Р10-08.СРР - абстрактные классы и чистые виртуальные функции #include #include В программе на базе класса figure определены два производных класса: circ (окружность) По сравнению с обычными классами абстрактные классы пользуются
Слайды презентации

Слайд 2 Чистая виртуальная функция "ничего не делает" и недоступна

Чистая виртуальная функция

для вызовов

Ее назначение - служить основой для подменяющих

ее функций в производных классах

Исходя из этого становится понятной невозможность создания самостоятельных объектов абстрактного класса

Абстрактный класс может использоваться только в качестве базового для производных классов

Слайд 3 Абстрактный класс:

class В
{
protected:
virtual

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

void func(char) =0;
void sos(int);
};


Слайд 4 На основе класса в можно по-разному построить производные

На основе класса в можно по-разному построить производные классы:class D: public

классы:

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

Слайд 6 В классе figure определены: конструктор, чистая виртуальная функция

В классе figure определены: конструктор, чистая виртуальная функция show() для вывода

show() для вывода изображения фигуры, например, на экран дисплея

Кроме

того, в класс входят методы hide() - убрать изображение фигуры с экрана дисплея и move() - переместить изображение фигуры в заданную точку экрана

Функции hide() и move() обращаются к чистой виртуальной функции show()

Однако реальное выполнение show() возможно только после создания производного класса, в котором чистая виртуальная функция show() будет подменена компонентной функцией для изображения конкретной фигуры

Введем класс point, определяющий понятие "точка на экране дисплея". Разместим описание класса в отдельном файле с именем point.h

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

class point
{ int

// point.h - определение функций классаclass point{ int x,y; public:

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.СРР - определение функций класса

#ifndef POINTCPP
#define POINTCPP

// POINT.СРР - определение функций класса#ifndef POINTCPP#define POINTCPP 1 #include

1
#include
#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
#include // Для

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 - абстрактный класс

#include "point.срр"
class figure: public point

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

{
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 определим неабстрактные классы:

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

class ellips :

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

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

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

{
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 #include


#include
#include "figure.cpp"
#include "circ.fig"
#include "ellips.fig"
#include

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 определены два

В программе на базе класса figure определены два производных класса: circ

производных класса: circ (окружность) и ellips (эллипс)
Для обоих классов

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

Комментарии к операторам основной программы содержат полные (квалифицированные) имена исполняемых функций

  • Имя файла: abstraktnye-klassy-c.pptx
  • Количество просмотров: 108
  • Количество скачиваний: 0