2
Пример - / /dynamic_cast
- # include < iostream >
- using name space std ;
- class Base {
- public: virtual void f() { } };
- class Derived : public Base {
- public: void f() { } };
- int main ( )
- {
- Base * bp, b_ob;
- Derived * dp, d_ob;
Base * bp, b_ob;
Derived * dp, d_ob;
bp = dynamic_cast< Base *> (&d_ob);
if(bp) {
cout << "Derived pereshol -> Base \n";
bp -> f();
}
else
cout << "Error\ n ";
system("pause");
return 0;
}
Получения типа объекта во время выполнения программы
Чтобы получить тип объекта во время выполнения :
typeid(object)
Параметр означает объект, тип которого нужно получить.
Оператор возвращает ссылку на объект типа type_infо, который описывает тип объекта object.
Нужно подключить!
#include
Получения типа объекта во время выполнения программы
В классе type_info определены следующие public-члены
Классе type_info
bool operator == (const type_info &ob);
bool operator !=(const type_info &ob);
const char *name();
bool before(const type_info &ob);
функция предназначена в для внутреннего использования.
Пример использования оператора typeid
#include "stdafx.h"
#include
#include
using namespace std;
class doctor
{ private:
char professiya[35];
char F_I_O[25];
public:
int staj; };
Пример использования оператора typeid
int main()
{ int i,j; float r; doctor d;
cout<<"Tip argumenta i:"<cout<<"Tip argumenta r:"<cout<<" Tip argumenta d:"<if(typeid(i)==typeid(j))
cout<<“Peremennie i, j odinakogo tipa"<if(typeid(i)!=typeid(r))
cout<<" Peremennie i, r raznogo tipa "<system("Pause");
return 0; }
Результать программы
Tip argumenta i:int
Tip argumenta r:float
Tip argumenta d: class doctor
Peremennie i, j odinakogo tipa
Peremennie i, r raznogo tipa
Для продолжения нажмите любую клавишу . . .
Пример использования оператора typeid
#include "stdafx.h"
#include
#include
using namespace std;
template
class myclass {
T a;
public:
myclass(T i) { a = i; }
};
Пример использования оператора typeid
int main()
{
setlocale(LC_ALL,"rus");
myclass o1(10), o2(9);
myclass o3(7.2);
cout << "Объект o1 имеет тип ";
cout << typeid(o1).name() << endl;
cout << "Объект o2 имеет тип ";
cout << typeid(o2).name() << endl;
…
Пример использования оператора typeid
int main()
{…
cout << "Объект o3 имеет тип ";
cout << typeid(o3).name() << endl;
cout << endl;
if(typeid(o1) == typeid(o2))
cout << "Объекты o1 и o2 имеют одинаковый тип.\n";
if(typeid(o1) == typeid(o3)) cout << "Ошибка\n";
else cout << "Объекты o1 и o3 имеют разные типы.\n";
getch();
}
Результать программы
Объект o1 имеет тип class myclass
Объект o2 имеет тип class myclass
Объект o3 имеет тип class myclass
Объекты o1 и o2 имеют одинаковый тип.
Объекты o1 и o3 имеют разные типы.
Для продолжения нажмите любую клавишу . . .
Заключение - В C++ для динамической идентификации типов применяются операторы dynamic_cast и typeid (определён в файле typeinfo.h), для использования которых информацию о типах во время выполнения обычно необходимо добавить через опции компилятора при компиляции модуля.
- Оператор typeid возвращает ссылку на структуру type_info, которая содержит поля, позволяющие получить информацию о типе.
- Пространство имён является механизмом отражения логического группирования идентификаторов. Если некоторые объявления можно объединить по какому-либо критерию, это можно отразить явным размещением их в одном пространстве имён.
Творческих Вам успехов!
ТАШКЕНТСКИЙ УНИВЕРСИТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ ИМЕНИ МУХАММАДА АЛ-ХОРАЗМИЙ
АБДУРАХМАНОВ АББАС АБДУСАТТАРОВИЧ
СТАРШИЙ ПРЕПОДАВАТЕЛЬ КАФЕДРЫ ОСНОВЫ ИНФОРМАТИКИ
СПАСИБО ЗА ВНИМАНИЕ!
Do'stlaringiz bilan baham: |