Cтраница 3
![]() |
Абстрактный базовый класс Employee ( часть 1 из 12. [31] |
Открытые функции-элементы включают: конструктор, который принимает в качестве аргументов имя и фамилию; деструктор, который освобождает динамически выделенную память; функцию доступа get, которая возвращает имя; функцию доступа get, которая возвращает фамилию; две чистые виртуальные функции earnings и print. Почему эти функции объявлены чистыми виртуальными. Ответ состоит в том, что не имеет никакого смысла реализовывать эти функции в классе Employee. Мы не можем начислять заработную плату абстрактному служащему: мы должны, сначала определить тип служащего; мы не можем также печатать заработную плату абстрактного служащего. Делая эти функции чистыми виртуальными, мы показываем, что они должны быть реализованы в производных классах, а не в базовом. [32]
![]() |
Абстрактный базовый класс Employee ( часть 1 из 12. [33] |
В открытой секции класса объявляются следующие функции-элементы: конструктор именем и фамилией работника в качестве аргументов; деструктор, который освобождает динамически выделенную память; get - функция, которая возвращает имя сотрудника; get - функция, возвращающая фамилию; и наконец, две чистых виртуальных функции - earnings и print. Почему эти функции - чистые виртуальные. Ответ прост: потому что не имеет смысла определять эти функции в классе Employee. Объявляя эти функции чистыми виртуальными, мы указываем на то, что будем определять эти функции в производных классах, но не в базовом классе. Мы не можем рассчитать доход для служащего вообще - сначала нужно знать категорию этого служащего. [34]
Во всех других классах, производимых от класса Mammal, теперь нет необходимости замещать общий для всех метод ReproduceO, хотя при желании это можно сделать для определенного класса, как, например, в нашей программе это было сделано в строке 83 для класса Dog. Все остальные чистые виртуальные функции были замещены в классах Fish, Horse и Dog, поэтому для каждого из них можно создавать соответствующие объекты. [35]
В нашем следующем примере ( рис. 20.2) мы вернемся к иерархии классов: точка, круг, цилиндр - из предыдущей главы, только на этот раз на вершину иерархии поставим абстрактный базовый класс Shape. Shape содержит чистую виртуальную функцию - printShapeName - и, следовательно, является абстрактным базовым классом. В Shape имеются две других виртуальных функции, а именно area и volume, каждая из которых возвращает нулевое значение. Класс Point наследует эти функции от Shape. И в этом есть смысл, потому что и площадь и объем точки равны нулю. [36]
В абстрактном классе определяется интерфейс всех узлов иерархии классов. Абстрактный класс содержит чистые виртуальные функции, которые будут определятся в производных классах. Благодаря полиморфизму этот интерфейс класса будет доступен всем функциям в иерархии. [37]
Абстрактный класс определяет интерфейс для разных типов элементов иерархии классов. Абстрактный класс включает чистые виртуальные функции, которые будут определены в производных классах. Все функции в иерархии могут применять один и тот же интерфейс, используя полиморфизм. [38]
В абстрактном классе определяется интерфейс всех узлов иерархии классов. Абстрактный класс содержит чистые виртуальные функции, которые будут определятся в производных классах. Благодаря полиморфизму этот интерфейс класса будет доступен всем функциям в иерархии. [39]
Абстрактный класс определяет интерфейс для разных типов элементов иерархии классов. Абстрактный класс включает чистые виртуальные функции, которые будут определены в производных классах. Все функции в иерархии могут применять один и тот же интерфейс, используя полиморфизм. [40]
В данном примере дополнительная функциональность состоит в выведении на экран простого сообщения. В реальной программе чистая виртуальная функция может содержать достаточно сложный программный код, например создание окна, в котором рисуются все фигуры, выбираемые пользователем. [41]
Обязательно замещайте в производных классах все чистые виртуальные функции. Объявляйте все функции, которые нужно замещать в производных классах, как 4истые виртуальные функции. [42]
Виртуальная функция, объявленная с инициализатором 0 вместо тела функции, называется чистой виртуальной функцией. Класс, содержащий хотя бы одну чистую виртуальную функцию, называется абстрактным классом. [43]
В строках 5 - 14 объявляется класс абстрактного типа данных Shape с тремя ч - чистыми виртуальными функциями. Впрочем, для того чтобы класс стал ADT, достаточно было объявить в нем хотя бы один из методов как чистую виртуальную функцию. [44]
![]() |
Определение абстрактного базового класса Shape ( часть 1 из 9. [45] |