Использование родового класса

Использование родового класса

Клиент может использовать родовой класс для объявления собственных сущностей, задающих стек. В этом случае в момент объявления следует задать фактический тип элементов стека - фактический родовой параметр, например:

sp: STACK [POINT]

Если у класса несколько родовых параметров, то соответственно столько же необходимо задать и фактических параметров.

Предоставление фактических родовых параметров родовому классу для создания типа называется родовым порождением (generic derivation), а полученный в результате класс, такой как STACK [POINT], называют параметрически порожденным классом.

Родовому порождению требуется тип, родовое порождение создает новый тип:

[x]. Результат порождения STACK [POINT] является типом.

[x]. Для получения такого результата, необходим уже существующий тип, используемый в качестве фактического параметра (POINT в примере).

Фактический параметр может быть произвольным типом. Ничто не мешает выбрать тип, который сам по себе параметрически порожден. Предположим, что мы определили другой родовой класс LIST [G], тогда можно определить стек, элементы которого являются списками точек:

slp: STACK [LIST [POINT]]

или, используя STACK [POINT] как фактический родовой параметр, - стек стеков точек:

ssp: STACK [STACK [POINT]]

Нет предела глубины таких вложений, кроме естественной необходимости сохранять простоту программного текста.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

Имя класса

Из книги автора

Имя класса Имя класса должно быть уникальным в пределах пакета, который описывается некоторой совокупностью диаграмм классов (возможно, одной диаграммой). Оно указывается в первой верхней секции прямоугольника. В дополнение к общему правилу наименования элементов


Определения класса

Из книги автора

Определения класса Классы определяются в С++ аналогично тому, как это делается в Java и C#, однако надо иметь в виду, что существует несколько отличий. Мы рассмотрим эти отличия на нескольких примерах. Начнем с класса, представляющего пару координат (x, у):01 #ifndef POINT2D_H 02 #define


Тип класса

Из книги автора

Тип класса Любой язык, совместимый с .NET, поддерживает, как минимум, тип класса, который является "краеугольным камнем" объектно-ориентированного программирования (ООП). Класс может состоять из любого числа членов (таких, как свойства, методы и события) и элементов данных


Тип класса в C#

Из книги автора

Тип класса в C# Если вы имеете опыт создания объектов в рамках какого-то другого языка программирования, то, несомненно, знаете о роли определений классов. Формально говоря, класс – это определенный пользователем тип (User-Defined Type - UDT), который скомпонован из полей данных


Использование возможностей класса Control

Из книги автора

Использование возможностей класса Control Чтобы продемонстрировать возможности применения некоторых членов класса Control, давайте построим новую форму, способную обеспечивать следующее.• Отвечать на события MouseMove и MouseDown.• Выполнять захват и обработку ввода с клавиатуры,


14.1. Инициализация класса

Из книги автора

14.1. Инициализация класса Рассмотрим следующее определение класса:class Data {public:int ival;char *ptr;};Чтобы безопасно пользоваться объектом класса, необходимо правильно инициализировать его члены. Однако смысл этого действия для разных классов различен. Например, может ли ival


14.2. Конструктор класса

Из книги автора

14.2. Конструктор класса Среди других функций-членов конструктор выделяется тем, что его имя совпадает с именем класса. Для объявления конструктора по умолчанию мы пишем2:class Account {public:// конструктор по умолчанию ...Account();// ...private:char *_name;unsigned int _acct_nmbr;double _balance;};Единственное


14.3. Деструктор класса

Из книги автора

14.3. Деструктор класса Одна из целей, стоящих перед конструктором, - обеспечить автоматическое выделение ресурса. Мы уже видели в примере с классом Account конструктор, где с помощью оператора new выделяется память для массива символов и присваивается уникальный номер счету.


Использование класса XalanTransformer

Из книги автора

Использование класса XalanTransformer Теперь, когда мы разобрались со всякого рода настройками, можно заняться самой программой. Типичный сценарий использования Xalan в программе можно проиллюстрировать следующим кодом.Листинг 9.2. Типовой сценарий использования Xalan//


Объявление родового класса

Из книги автора

Объявление родового класса По соглашению родовой параметр обычно, использует имя G (от Generic). Это неформальное правило. Если нужны еще родовые параметры, они будут названы H, I и т.д.Согласно синтаксису, формальные родовые параметры заключаются в квадратные скобки,


Операции над сущностями родового типа

Из книги автора

Операции над сущностями родового типа В родовом классе C [G, H, ...] рассмотрим сущность, чей тип - один из формальных родовых параметров, например x типа G. Когда класс используется клиентом для объявления сущностей, G, разумеется, может представлять любой тип. Поэтому любая


У10.3 Использование своего формального родового параметра фактически как чужого

Из книги автора

У10.3 Использование своего формального родового параметра фактически как чужого Сконструируйте пример, в котором подпрограмма родового класса C [G] вызывает подпрограмму, объявленную в другом родовом классе D [G], имеющую формальный параметр типа


Корректность класса

Из книги автора

Корректность класса Вооруженные понятиями инварианта, предусловий и постусловий, мы можем теперь точно определить понятие корректности уже не отдельной подпрограммы, а класса в целом.Класс, подобно всем остальным программным элементам, не может быть корректным или


Использование утверждений для документирования: краткая форма класса

Из книги автора

Использование утверждений для документирования: краткая форма класса Второе использование является основным в производстве повторно используемых программных элементов и, более обще, в организации интерфейсов модулей в большой программной системе. Постусловия,


Ограничение родового параметра

Из книги автора

Ограничение родового параметра Эти наблюдения дают решение. Мы должны оперировать исключительно терминами классов и типов.Потребуем, чтобы любой фактический параметр, используемый классом VECTOR (в других примерах по аналогии), был типом, поставляемым с множеством