ВУЗ:
Составители:
Рубрика:
{ 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
- …
- следующая ›
- последняя »
