![]() |
|
Программирование >> Расширенная версия языка c++
.360 , Самоучитель C++ class BaseClass { virtual void f() (}; делаем класс BaseClass полорфн H ... class Derivedl: public BaseClass { /; ... class public BaseClass { { ; int i; . .i L:Ui 1tt!t- BaseClass *p, baseob; ... iri -y-. Derivedl оЫ; Derived2 . J. . . .J ~uOii-..\ :. г r,-.: : ii r - Г ->: Вывод на экран встроенного типа данных cout Тип переменной i - это ; cout Обработка полорфн1х типов i.i*-- . р = ibaseob; cout Указатель р указывает на объект типа ; cout typeid (*р) .name о endl; . р = &obl; : :;: . ., .. cout Указатель р указывает на объект типа ; . cout typeid (*р) .nameO endl; . , р = £ОЬ2; ... . . i, . . -..Т cout Указатель р указывает на объект типа ; . cout typeid{*р) .namef) endl; return 0; Программа выводит на экран следующую информацию: Тип переменной i - это int Указатель р указывает на объект типа BaseClass Указатель р указывает на объект типа Derivedl ч.- * Указатель р указывает на объект типа Derived2 Как уже отмечалось, когда в качестве аргумента оператора typeid задан указатель полиморфного базового класса, реальный тип объекта, на который указывает указатель определяется во время выполнения программы, что очевидно по выводимой на экран информации. В качестве эксперимента за- WhatType (baseob) WhatType (obi) WhatType (оЬ2) return 0; ктчу: . . и.i :, . --i-l- комментируйте виртуальную функцию f() в определении базового класса и что получится. 2. Ранее уже говорилось, что когда в качестве аргумента оператора typeid указана ссылка полиморфного базового класса, возвращаемым типом будет тип реального объекта, на который дана ссылка. Чаще всего это свойство используется в ситуациях, когда объекты передаются функциям по ссылке. Например, в следующей программе в объявлении функции WhatType() объект типа BaseCiass задан параметром-ссылкой. Это означает, что функции What-Туре() можно передавать ссылки на объекты типа BaseClass или типов, про-изводнгх от класса Class. Если в операторе typeid задать такой параметр, то он возвратит тип реального объекта. Использование оператора typeid со ссылкой в качестве аргумента ttinclude <iostream> ttinclude <typeinfo> using namespace std; class BaseClass { ..... virtual void f() {}; делаем класс BaseClass полиморфным ... class Derivedl: public BaseClass { ... class Derived2: public BaseClass { ;/ . .. Задание ссхлки в качестве параметра функции void WhatType (BaseClass Sob) cout ob - это ссылка на объект типа ; cout typeid (ob) .name {) endl; int main() int i; * BaseClass baseob; Derivedl ; Derived2 ob2; 362 - .1 i Самоучитель С++ Программа выводит на экран следующую информацию: ob - это ссылка на объект типа BaseClass ob - это ссылка на объект типа Derivedl .i;-. . .- . .li.H, ob - это ссылка на объект типа Derived2 ! 3. Хотя получение имени типа объекта в некоторых ситуациях оказывается весьма полезным, часто бывает необходимо соответствуют ли друг другу типы нескольких объектов. Это легко сделать, зная что объект типа type info, возвращаемый оператором typeid, перегружает операторы == и !=. В представленной ниже программе показано использование этих операторов. Использование операторов == и != с оператором typeid ftinclude <iostream> ttinclude <typeinfo> . . i using namespace std; Ц. , v.-, class X { virtual void f() (} .- class Y { virtual void f () П yt - г-и:::л, . : int mainO X xl, x2; ! <, Y yl; if (typeid(xl) == (typeid(x2)) cou Т объектов xl и х2 одинаков\п ; else . . cou Т объектов xl и х2 не одинаков \п ; id{xl) != (typeid(yl)) cou Т объектов xl и yl не одинаков \n ; else cou Т объектов xl и yl одинаков\n ; о , return 0; ) - Программа выводит на экран следующую информацию: Тип объектов xl и х2 одинаков Тип объектов xl и yl не одинаков 4. Хотя в предыдущих примерах и были показаны некоторые приемы работы с оператором type info, главных его достоинств мы не увидели, поскольку типы объектов были известны уже на этапе компиляции программы. В сле-
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |