Составители:
Рубрика:
78
ределить в программе объекты, реально к предметной области не
имеющие никакого отношения. Для того, чтобы предотвратить возмож-
ность использования объектов таких классов в программе, их объявляют
абстрактными. Абстрактным называется класс, в котором определена
хотя бы одна чистая виртуальная функция. Чистая виртуальная функция
определяется следующим образом:
virtual тип имя_функции( список_формальных
_параметров )=0;
Чистая виртуальная функция не имеет реализации, ее нельзя вы-
звать в программе, она служит лишь как основа для дальнейшего поли-
морфного переопределения в производном классе. Соответственно, аб-
страктный класс не может иметь объектов, так как в нем не определены
операции над объектами (или, по крайней мере, хотя бы
одна операция,
реализуемая чистой виртуальной функцией).
Рассмотрим пример.
//Листинг 32. Использование абстрактных классов
#include <stdio.h>
#include <iostream.h>
#include <string.h>
#include <conio.h>
class File //абстрактный класс
{ protected:
char **str; //адрес буфера для временного хранения информации из файла
char Name[30]; //имя файла
int n; //количество строк в буфере
virtual int ReadFile()=0; //чистая виртуальная функция чтения информации из файла в буфер
public:
File(char*,int);
~File();
void display(); //метод, отображающий содержимое буфера на экране
};
File::File(char * FileName,int k) //конструктор
{ strcpy(Name,FileName);
n=k;
str=new char*[n]; //выделяем память под буфер
for(int i=0;i<n;i++)
str[i]=new char[80];
}
File::~File() //деструктор
ределить в программе объекты, реально к предметной области не имеющие никакого отношения. Для того, чтобы предотвратить возмож- ность использования объектов таких классов в программе, их объявляют абстрактными. Абстрактным называется класс, в котором определена хотя бы одна чистая виртуальная функция. Чистая виртуальная функция определяется следующим образом: virtual тип имя_функции( список_формальных_параметров )=0; Чистая виртуальная функция не имеет реализации, ее нельзя вы- звать в программе, она служит лишь как основа для дальнейшего поли- морфного переопределения в производном классе. Соответственно, аб- страктный класс не может иметь объектов, так как в нем не определены операции над объектами (или, по крайней мере, хотя бы одна операция, реализуемая чистой виртуальной функцией). Рассмотрим пример. //Листинг 32. Использование абстрактных классов #include#include #include #include class File //абстрактный класс { protected: char **str; //адрес буфера для временного хранения информации из файла char Name[30]; //имя файла int n; //количество строк в буфере virtual int ReadFile()=0; //чистая виртуальная функция чтения информации из файла в буфер public: File(char*,int); ~File(); void display(); //метод, отображающий содержимое буфера на экране }; File::File(char * FileName,int k) //конструктор { strcpy(Name,FileName); n=k; str=new char*[n]; //выделяем память под буфер for(int i=0;i
Страницы
- « первая
- ‹ предыдущая
- …
- 76
- 77
- 78
- 79
- 80
- …
- следующая ›
- последняя »