ВУЗ:
Составители:
Рубрика:
{ SymbolLocation SymLoc(1,1,'A');
StringLocation StrLoc(1,1,"ABC");
Location* LocPtr;
SymbolLocation* SymLocPtr=&SymLoc;
StringLocation* StrLocPtr=&StrLoc;
SymbolLocation& SymLocRef=SymLoc;
StringLocation& StrLocRef=StrLoc;
Print(SymLocPtr);/*-выдача символа на экран; */
Print(StrLocPtr);/*-выдача строки на экран; */
LocPtr=SymLocPtr;
Print(LocPtr); /*-выдача символа на экран; */
LocPtr=StrLocPtr;
Print(LocPtr); /*-выдача строки на экран; */
Print(SymLocRef);/*-выдача символа на экран; */
Print(StrLocRef);/*-выдача строки на экран; */
} /*-конец программы выдачи полиморфного объекта; */
Поскольку базовый класс может быть закрыт для производно-
го,когда не используется спецификатор доступа public в опре-
делении этого производного класса,то для классов в этом слу-
чае неявное преобразование указателя производного класса в
указатель базового класса не имеет места.
Модифицированный оператор присваивания для указателей и ссы-
лок составных типов является необходимым,но не достаточным
средством обработки полиморфных объектов.Теперь необходимо вы-
яснить,каким образом установить по указателю базового типа тип
обрабатываемого объекта с тем,чтобы вызвать требуемую функцию
обработки.Существуют два основных способа решения этой пробле-
мы в языке С++:
1)использовать виртуальные функции,когда объекты автомати-
чески получают связь со своим типом;
2)поместить в базовый класс специальное поле типа - дискри-
минант,который смогут просматривать функции.
И в том,и в другом случае используются указатели или ссылки
на базовые типы,которые конструируются как контейнерные или
вмещающие типы в виде множеств,векторов или списков.Получае-
мые при этом неоднородные списки объектов облегчают програм-
42
{ SymbolLocation SymLoc(1,1,'A'); StringLocation StrLoc(1,1,"ABC"); Location* LocPtr; SymbolLocation* SymLocPtr=&SymLoc; StringLocation* StrLocPtr=&StrLoc; SymbolLocation& SymLocRef=SymLoc; StringLocation& StrLocRef=StrLoc; Print(SymLocPtr);/*-выдача символа на экран; */ Print(StrLocPtr);/*-выдача строки на экран; */ LocPtr=SymLocPtr; Print(LocPtr); /*-выдача символа на экран; */ LocPtr=StrLocPtr; Print(LocPtr); /*-выдача строки на экран; */ Print(SymLocRef);/*-выдача символа на экран; */ Print(StrLocRef);/*-выдача строки на экран; */ } /*-конец программы выдачи полиморфного объекта; */ Поскольку базовый класс может быть закрыт для производно- го,когда не используется спецификатор доступа public в опре- делении этого производного класса,то для классов в этом слу- чае неявное преобразование указателя производного класса в указатель базового класса не имеет места. Модифицированный оператор присваивания для указателей и ссы- лок составных типов является необходимым,но не достаточным средством обработки полиморфных объектов.Теперь необходимо вы- яснить,каким образом установить по указателю базового типа тип обрабатываемого объекта с тем,чтобы вызвать требуемую функцию обработки.Существуют два основных способа решения этой пробле- мы в языке С++: 1)использовать виртуальные функции,когда объекты автомати- чески получают связь со своим типом; 2)поместить в базовый класс специальное поле типа - дискри- минант,который смогут просматривать функции. И в том,и в другом случае используются указатели или ссылки на базовые типы,которые конструируются как контейнерные или вмещающие типы в виде множеств,векторов или списков.Получае- мые при этом неоднородные списки объектов облегчают програм- 42
Страницы
- « первая
- ‹ предыдущая
- …
- 40
- 41
- 42
- 43
- 44
- …
- следующая ›
- последняя »