class TableStatic // методы для добавления, удаления и сортировки массивов
{
...
void swap( TRecord *, TRecord * );
}
class TableDynamic // методы для добавления, удаления и сортировки односвязных списков
{
...
void swap( TRecord *, TRecord * );
}
Полиморфизм
Код:
Как написать класс, в котором будет описан метод Sorty, сортирующий методом пузырька с помощью функции swap описаной в классах?
создаем родительский класс для TableStatic и TableDinamic с виртуальным методом swap
В сортирующем классе параметром у метода Sorty ставим указатель на объект родительского класса
Код:
class AbstractTable {
/* ... */
public:
virtual void swap(TRecord* a,TRecord* b)=0;
};
class TableStatic:public virtual AbstractTable
// методы для добавления, удаления и сортировки массивов
{
/* ... */
public:
void swap( TRecord *, TRecord * );
};
class TableDynamic:public virtual AbstractTable
// методы для добавления, удаления и сортировки односвязных списков
{
/* ... */
public:
void swap( TRecord *, TRecord * );
};
class Sorter // класс сортировщика
{
/* ... */
public:
void Sorty(AbstractTable* tbl);
};
Sorter s;
TableStatic tbl;
/*...*/
s.Sorty(&tbl);
/* ... */
public:
virtual void swap(TRecord* a,TRecord* b)=0;
};
class TableStatic:public virtual AbstractTable
// методы для добавления, удаления и сортировки массивов
{
/* ... */
public:
void swap( TRecord *, TRecord * );
};
class TableDynamic:public virtual AbstractTable
// методы для добавления, удаления и сортировки односвязных списков
{
/* ... */
public:
void swap( TRecord *, TRecord * );
};
class Sorter // класс сортировщика
{
/* ... */
public:
void Sorty(AbstractTable* tbl);
};
Sorter s;
TableStatic tbl;
/*...*/
s.Sorty(&tbl);
Можно также встроить этот метод в класс AbstractTable:
Код:
class AbstractTable {
/* ... */
protected:
virtual void swap(TRecord* a,TRecord* b)=0;
public:
void Sorty();
};
/* ... */
protected:
virtual void swap(TRecord* a,TRecord* b)=0;
public:
void Sorty();
};
Тогда сортировку можно будет проводить средствами самих таблиц
Код:
TableDynamic tbl;
/* ... */
tbl.Sorty();
/* ... */
tbl.Sorty();