2.1. Оператор typeid() для объекта
2.1.1. Пример использования оператора typeid() для переменных базовых типов и объектов классов.
#include
#include
using namespace std;
// Некоторый класс
class MyClass
{
// ...
};
void main()
{
// Получить характеристики типа на основе объекта (экземпляра)
// 1. Объявить переменные (объекты) разных типов
int a, b;
double x;
string s;
MyClass obj;
// 2. Использовать ссылку на type_info для получения информации о типе
// 2.1. Метод name() - получить имя типа
const type_info& ti = typeid(x);
cout << "Type of x is: " << ti.name() << endl;
// 2.2. Сравнить типы объектов s и obj
const type_info& ti_s = typeid(s);
const type_info& ti_obj = typeid(obj);
if (ti_s == ti_obj)
cout << "typeid(s)==typeid(obj)" << endl;
else
cout << "typeid(s)!=typeid(obj)" << endl;
// 3. Непосредственное использование typeid() без объявления ссылки
// 3.1. Сравнить типы объектов a, b – использовать функцию operator==()
if (typeid(a) == typeid(b))
cout << "Types of a and b are equal." << endl;
else
cout << "Types of a and b are not equal." << endl;
// 3.2. Сравнить типы переменных x и a использовать функцию operator!=()
if (typeid(x) != typeid(a))
cout << "Types of x and a are not equal." << endl;
else
cout << "Types of x and a are equal." << endl;
// 3.3. Получить данные на основании типа
string tName = typeid(s).name();
cout << "typeid(string) = " << tName << endl;
}
Результат выполнения программы
Type of x is: double
typeid(s)!=typeid(obj)
Types of a and b are equal.
Types of x and a are not equal.
typeid(string) = class std::basic_string,class std::allocator >
Do'stlaringiz bilan baham: |