The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

8.2 Пример — list

Пример — list

Предыдущая  Содержание  Следующая V*D*V

Как пример того, что можно делать с isOf() и как может быть сделан безопасный cast(), рассмотрим следующую модификацию тестовой программы из раздела 7.7:

 

#include "Circle.h"

#include "List.h"

 

int main (int argc, char ** argv) {

    void * q;

    unsigned n;

 

    initList();

    initCircle();

 

    q = new(List, 1);

 

    while (* ++ argv)

        switch (** argv) {

        case ’+’:

            switch ((* argv)[1]) {

            case ’c’:

                addFirst(q, new(Circle, 1, 2, 3));

                break;

            case ’p’:

                addFirst(q, new(Point, 4, 5));

                break;

            default:

                addFirst(q, new(Object));

            }

            break;

        case ’-’:

            puto(takeLast(q), stdout);

            break;

        case ’.’:

            n = count(q);

            while (n -- > 0) {

                const void * p = takeFirst(q);

 

                if (isOf(p, Point))

                    draw(p);

                else

                    puto(p, stdout);

                addLast(q, p);

            }

            break;

        default:

            if (isdigit(** argv))

                addFirst(q, (void *) atoi(* argv));

            else

                addFirst(q, * argv + 1);

        }

    return 0;

}

 

Для аргументов, начинающихся с +, эта программа добавит в список окружности, точки или простые объекты. Аргумент - удалит последний объект и покажет его на экране с помощью puto(). Аргумент . покажет текущее содержание списка; draw() используется, если запись унаследована от Point. Наконец, выполняется преднамеренная попытка поместить в список в качестве аргументов числа или другие строки, хотя они создали бы проблемы при удалении. Вот типичный вывод:

 

$ list +c +p + - . 1234

Circle at 0x122f4

Object at 0x12004

"." at 4,5

Object.c:66: failed assertion `sig == 0’

 

Как мы увидим в разделе 8.4, addFirst() использует cast(), чтобы удостовериться, что добавляет к списку только объекты. cast() может даже быть сделан достаточно надёжным, чтобы обнаружить, что число или строка пытаются изобразить из себя объект.

 

Предыдущая  Содержание  Следующая