Тема 01 Неопределенные типы и пространство неизвестных имен. Динамическая идентификация типов и операторы приведения типа


Пример использования оператора typeid


Download 355.01 Kb.
bet4/4
Sana29.03.2023
Hajmi355.01 Kb.
#1309083
1   2   3   4
Bog'liq
Тема 1 видео запись рус N30 слайд

Пример использования оператора 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: “ << typeid(i).name()<

cout<<“Tip argumenta r: “ << typeid(r).name()<

cout<<" Tip argumenta d: “ << typeid(d).name()<

if(typeid(i)==typeid(j)) cout<<“i, j odinakogo tipa"<

if(typeid(i)!=typeid(r)) cout<<"i, r raznogo tipa "<

system("Pause"); return 0; }

Результать программы

Tip argumenta i:int

Tip argumenta r:float

Tip argumenta d: class doctor

i, j odinakogo tipa

i, r raznogo tipa

Для продолжения нажмите любую клавишу . . .

Пример использования оператора typeid

#include "stdafx.h"

#include

#include

using namespace std;

template

class myclass {

T a;

public:

myclass(T i) { a = i; }

};

Продолжение примера

int main() {

setlocale(LC_ALL,"rus");

myclass o1(10), o2(9);

myclass o3(7.2);

cout<<"Объект o1 имеет тип ";

cout<

cout<<"Объект o2 имеет тип ";

cout<

cout<<"Объект o3 имеет тип ";

сout<

Продолжение примера

if(typeid(o1) == typeid(o2)) {

cout<<"Объекты o1 и o2“; cout<<"имеют одинаковый тип. " cout<<"\n"; }

if(typeid(o1) == typeid(o3))

cout << "Ошибка\n";

else { cout << "Объекты o1 и o3 "; cout<<“имеют разные типы. ";

cout<

getch();

return 0;

}

Результать программы

Объект o1 имеет тип class myclass

Объект o2 имеет тип class myclass

Объект o3 имеет тип class myclass

Объекты o1 и o2 имеют одинаковый тип.

Объекты o1 и o3 имеют разные типы.

Для продолжения нажмите любую клавишу . . .

Операторы приведения типов.

Статическое приведение static_cast

Преобразование «родственных» типов.

float f = static_cast < float > ( d );

float * pf2 = static_cast( static_cast (pd) );

«Слепое» приведение reinterpret_cast

Преобразование с сохранением битового представления, невыполнимое явно или при помощи static_cast

float * pf = reinterpret_cast( pd );

float h = *reinterpret_cast( &d );

Примеры явного С++ приведения

Оператор const_cast

Снятие квалификаторов const и volatile

int d = static_cast < int >( 7.5 );

int const * cpd = &d ;

int * pd = const_cast < int * >( cpd );

Оператор dynamic_cast Нисходящее преобразование при наследовании

/ /dynamic_cast

# include < iostream >

using name space std ;

class Base {

public:

virtual void f() { }

};

class Derived : public Base {

public: void f() { } };

Оператор dynamic_cast Продолжение примера


int main ( ) {
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 (определён в файле typeinfo.h). Оператор typeid возвращает ссылку на структуру type_info, которая содержит поля, позволяющие получить информацию о типе.

Заключение

Для явного переобразование типов применяются операторы :

  • static_cast
  • reinterpret_cast
  • const_cast
  • dynamic_cast

СПАСИБО ЗА ВНИМАНИЕ!


САФАРОВА МАФТУНА
АССИСТЕНТ
КАФЕДРА ОСНОВЫ
ИНФОРМАТИКИ
ТАШКЕНТСКИЙ УНИВЕРСИТЕТ ИНФОРМАЦИОННЫХ
ТЕХНОЛОГИЙ ИМЕНИ МУХАММАДА АЛ-ХОРАЗМИЙ
Download 355.01 Kb.

Do'stlaringiz bilan baham:

1   2   3   4




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling