Тема: “Виртуальные функции в динамических структурах”
Пример: Класс, описывающий базовый класс списка и производный класс стека
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <assert.h>
using namespace std;
// класс, описывающий один узел :
class ListItem
{
int data;
ListItem *next, *prev;
friend class List;
friend class Stack;
int Get() { return data; }
friend ostream& operator << (ostream&, List*);
friend istream& operator >> (istream&, List*);
public:
ListItem(const int d) // конструктор
{
data = d;
next = prev = NULL;
}
};
// Базовый класс списка:
class List
{
protected:
ListItem *back, *front, *token;
friend ostream & operator<<(ostream&, List*);
friend istream & operator>>(istream&, List*);
public:
List() {back = front = token = NULL;}
~List();
void PutToken(int); // добавляет элемент в список
virtual int GetToken(); // считывает текущий элемент списка
BOOL empty() {return front == NULL ? true:false;}
};
//Производный класс:
class Stack: public List
{
/* Стек является частным случаем списка и отличается главным образом тем, что удаление данных выполняется с конца. Будем считать, что при чтении данных стека, элементы данных удаляются (чтение с разрушением) */