Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КПИЯП_ОТВЕТЫ_2.rtf
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
238.39 Кб
Скачать

Void my_terminate()

{

cout<<”program aborted””<<endl;

abort();

}

Int main()

{

set_terminate(my_terminate);

try{

cout<<”generate exception int”<<endl;

throw 1;

}catch(double i)

{

cout << ”exception(double)”<<end;

}

return 0;

}

Функция unexpected()

void unexpected()

Особенности:

  • вызывается автоматически при попытке сгенерировать исключительную ситуацию, не указанную в разделе throw

  • по умолчанию вызывает функцию terminate()

  • можно изменить обработчик функции, используя

unexpected_handler set_unexpected ( unexpected_handler newhandler ) throw ()

Однако он должен заканчиваться вызовом terminate()

2.24

В С++ для поддержки динамического полиморфизма используются :

  • динамическая идентификация типа RTTI ( run-time type specification ) - позволяет идентифицировать тип объекта при выполнении программы

  • дополнительные операторы приведения типов - обеспечивают более безопасный способ приведения типов

Динамическая идентификация типа добавлена в связи с неободимостью определения типов объектов при выполнении программы.

Такая ситуация возникает при реализации полиморфизма с помощью иерархий класов, вирутальных функций. указателей на базовые классы.

Оператор typeid.

Для идентификации типа предназначен оператор

typeid ( object );

typeid ( type );

Особенности:

  • определен в заголовке <typeinfo>

  • object - объект, для которого выполняется ижентификация типа

  • type - тип, для которого требуется получить описание

  • оператор возвращает const type_info& - константную ссылку на объект типа type_info

Класс type_info.

Предназначен для описания типа объекта . Получить объект этого класса можно только с использованием оператора typeid.

2.25

Оператор typeid может применяться к шаблонным классам.

Особенности :

  • тип объекта определяется также тем, какие данные используются в качестве шаблонных параметров при создании конкретного объекта

  • если для одного и того же шаблонного класса типы параметров не совпадают, то типы классов считаются разными

#include <iostream>

#include <typeinfo>

using namespace std;

template < class T1, class T2>

class myclass{

T1 a; T2 b;

public:

};

template < class T1, class T2, class T3, class T4>

void compare ( myclass <T1, T2> & c1, myclass <T3, T4> &c2){

if (typeid ( c1 ) == typeid ( c2)) {

cout << " objects have one type " ;

}else {

cout << " object have different types";

}

}

Int main(){

myclass <int, double> o1, o2;

myclass <double, int> o3;

myclass < int, int> o4;

compare (o1, o2);

compare ( o1, o3)

compare( o1, o4);

compare (o2, o3);

compare( o2, o4);

return 0;

}

2.26

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

В С++ существуют следующий операторы приведения типов:

  • стандартный оператор - ( тип ) выражение

  • const_cast

  • reinterpreted_cast

  • static_cast

  • dynamic_cast

Оператор const_cast.

const_cast < type > ( expr )

Особенности:

  • используется для явного замещения модификаторов const ( немодифицируемый объект ) и volatile ( объект может менятся неявно ) для указателей и ссылок

  • результирующий тип должен совпадать с исходным за исключением const и volatile

  • НЕЛЬЗЯ напрямую снять модификатор const с переменной

  • в основном используется для работы с аргументами фукнций

  • не рекомендуется к использованию ( не безопасен )

  • expr - исходное выражение

  • type - результирующий тип

#include < iostream >

using namespace std;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]