Объектно-ориентированное программирование на C++. Андрианова А.А - 161 стр.

UptoLike

Объектно-ориентированное программирование на С++
Для извлечения элемента из очереди и стека вызывается метод
базового класса DeleteByPosition. Извлечение происходит из
начала списка.
// метод извлечения элемента из стека
int Stack::PopElement()
{
// удаление элемента, стоящего в начале списке
return DeleteByPosition(1);
}
// метод извлечения элемента из очереди
int Queue::PopElement()
{
// уменьшаем количество элементов в очереди
if(count != 0)
count--;
// извлекаем из списка первый элемент
return DeleteByPosition(1);
}
При public-наследовании функцию печати стека и очереди
переопределять не требуется, поскольку вступает в силу принцип
подстановки ссылка на базовый класс может указывать на объект
производного класса (будет вызвана дружественная функция базового
класса). Наследование private-способом данный принцип игнорирует
преобразование из производного класса в базовый возможно только в
методах производного класса или в дружественных ему функциях.
Поэтому требуется написать свои функции для печати стека и очереди,
которые будут осуществлять преобразование объекта к типу базового
класса и, таким образом, вызывать функцию печати списка.
// дружественная функция печати стека
ostream& operator << (ostream& out, Stack& ob)
{
// преобразование к базовому классу и вызов
// операции вывода для базового класса
out << (List)ob;
return out;
}
// дружественная функция печати очереди
ostream& operator << (ostream& out, Queue& ob)
{
161
                          Объектно-ориентированное программирование на С++

    Для извлечения элемента из очереди и стека вызывается метод
базового класса DeleteByPosition. Извлечение происходит из
начала списка.

    // метод извлечения элемента из стека
    int Stack::PopElement()
    {
         // удаление элемента, стоящего в начале списке
         return DeleteByPosition(1);
    }

       // метод извлечения элемента из очереди
    int Queue::PopElement()
    {
         // уменьшаем количество элементов в очереди
         if(count != 0)
              count--;
         // извлекаем из списка первый элемент
         return DeleteByPosition(1);
    }

    При public-наследовании функцию печати стека и очереди
переопределять не требуется, поскольку вступает в силу принцип
подстановки – ссылка на базовый класс может указывать на объект
производного класса (будет вызвана дружественная функция базового
класса). Наследование private-способом данный принцип игнорирует
– преобразование из производного класса в базовый возможно только в
методах производного класса или в дружественных ему функциях.
Поэтому требуется написать свои функции для печати стека и очереди,
которые будут осуществлять преобразование объекта к типу базового
класса и, таким образом, вызывать функцию печати списка.
    // дружественная функция печати стека
    ostream& operator << (ostream& out, Stack& ob)
    {
         // преобразование к базовому классу и вызов
         // операции вывода для базового класса
         out << (List)ob;
         return out;
    }

    // дружественная функция печати очереди
    ostream& operator << (ostream& out, Queue& ob)
    {
                                                                      161