Главная страница
Навигация по странице:

  • Шаблоны классов

  • Курс ООП в С презентация. ООП в с++(полный курс). Объекты и классы


    Скачать 1.76 Mb.
    НазваниеОбъекты и классы
    АнкорКурс ООП в С презентация
    Дата21.02.2022
    Размер1.76 Mb.
    Формат файлаppt
    Имя файлаООП в с++(полный курс).ppt
    ТипДокументы
    #368655
    страница13 из 26
    1   ...   9   10   11   12   13   14   15   16   ...   26

    Виртуальные методы


    Чтобы избежать двойного наследования полей, при наследовании общего предка, его определяют с ключевым словом virtual (виртуальный класс).
    class person
    {...};
    class student: virtual person
    {...};
    class employee: virtual person
    {...};
    class employee_student: public employee, public student
    {...};
    Класс employee_student будет содержать только один экземпляр полей класса person.


    Шаблоны классов

    Шаблоны классов


    Шаблоны функций
    Шаблоны вводятся для того, чтобы автоматизировать создание функций, обрабатывающих разнотипные данные (см. часть I). При перегрузке функции для каждого используемого типа определяется своя функция. Шаблон функции определяется один раз, но определение параметризируется, т. е. тип данных передается как параметр шаблона.
    Формат шаблона:
    template <параметры_шаблона>
    заголовок_функции
    {тело функции}
    Таким образом, шаблон семейства функций состоит из 2 частей – заголовка шаблона: template <список параметров шаблона> и обыкновенного определения функции, в котором вместо типа возвращаемого значения и/или типа параметров, записывается имя типа, определенное в заголовке шаблона.

    Шаблоны классов


    template set_value(T& value)
    {
    cout << "Enter value: " << endl; cin >> value;
    }
    Подобные функции часто имеет смысл группировать в параметризованные утилиты классов, имеющие практически то же предназначение, что и обычные утилиты классов:
    Естественно, в некоторых случаях необходимо учитывать и особенности типов, указываемых в качестве параметров шаблона. Так, операции ввода и вывода потоковых классов определены по умолчанию только для простых типов. Соответственно, если мы желаем использовать такие операции для определяемых нами классов, то их требуется переопределить для работы с объектами этих классов.

    Шаблоны классов


    template class util
    {
    public:
    static void set_value(T&);
    static void show_value(T&);
    };
    template void util::set_value(T& value)
    {
    cout << "Enter value: " << endl; cin >> value;
    };
    template void util::show_value(T& value)
    {
    cout << "Value is: " << value << endl;
    };
    Cледует отметить, что объявление класса шаблона и реализация его функций должны размещаться в одной единице трансляции, под которой обычно подразумевается заголовочный файл, например "util.h".
    Обращение к таким функциям будут иметь свои особенности, поскольку потребуется указывать тип – параметр шаблона:

    Шаблоны классов


    Шаблоны классов
    Шаблоны классов так же, как и шаблоны функций поддерживают механизм обобщенного программирования, т. е. программирования с использованием типов в качестве параметров. Механизм шаблонов в C++ допускает применение абстрактного типа в качестве параметра при определении класса. Такой класс называется параметризованным. После того как шаблон класса определен, он может использоваться для определения конкретных классов. Процесс генерации компилятором определения конкретного класса по шаблону класса и аргументам шаблона называется инстанцированием шаблона.
    Определение параметризованного (шаблонного, обобщенного) класса имеет вид:
    template <параметры шаблона>
    class имя_класса
    {
    ...
    };

    Шаблоны классов


    В качестве примера для шаблона продолжим рассмотрение нашего класса-группы для объектов, поскольку самым распространенным способом использования шаблонов классов является реализация различных видов контейнеров.
    Ниже рассмотрен шаблон класса group, предназначенного для определения контейнерных типов с элементами любых типов (как стандартных, так и определённых программистом).
    template class group
    //Т – параметр шаблона
    {
    public:
    group();
    void push_back(T);
    void for_each(void (*)(T&));
    protected:
    node* last;
    node* first;
    };

    Шаблоны классов


    Наш объект-группа представляет собой заготовку двунаправленного списка, реализуемого посредством включения указателей на первый и последний элемент типа node. Каждый из них реализуется шаблоном структуры, включающим в себя помимо указателей на соседние элементы (prev и next) и атрибут data хранимого элементом значения типа T.
    template struct node
    {
    public:
    node* prev;
    T data;
    node* next;
    };

    1   ...   9   10   11   12   13   14   15   16   ...   26


    написать администратору сайта