Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
 Аватар для AzaKendler
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
Записей в блоге: 15

Страуструп. задание

10.07.2011, 12:38. Показов 1591. Ответов 7

Студворк — интернет-сервис помощи студентам
насколько я понял задание - есть класс
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class STC
{
 unexpected_handler old;
  public:
   STC(unexpected_handler h)
   {
    old = set_unexpectef(h);
   }
  ~STC()
   {
    set_unexpected(old);
   }
}
суть его - заменить вызов unexpeted() на свою функцию а при уничтожении вернуть все как было
Задание обобщить класс до шаблона, способного работать с разными функциями - например set_terminate()

вот детище. в конструкторе принимает указатель на функцию.
например надо set_unrxpected работает с ней, надо set_terminate - работает с этой.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
template <class A, class B> class STC
{
    A old;
    B (*st)(A);//нужен чтобы вызвать функцию в деструкторе
 
public:
    
 
    STC(B (*set)(A), A t)// первый параметр указатель на функцию которую будем пользовать из стандартных, второй хандлер на мою
    {
        st = set;
        old = set(t);
 
    }
 
    ~STC(void)
    {
        st(old);
    }
};
ВОПРОСЫ
1. при простом прогоне в мэйн первый вызов set_unrxpected возвращает NULL, так и должно быть? ведь исключение то не было сгенерировано?
Для того чтобы проверить работу шаблона пришлось вначале назначить свою функцию - в set, а потом менять ее через шаблон на другую - все справно работает, указатели на мои функции корректно меняются.
2. ОДНАКО - ПОЧЕМУ данный шаблон после его генерации и инициализации членов - сразу уничтожается? сразу идет вызов деструктора. Это настораживает. Вероятно где то ошибки?
3. Может все можно сделать гораздо проще?

Добавлено через 20 лет

простите великодушно) создавал какие-то временные объекты из шаблона, вот они сразу и грохались. Создав нормальный экземпляр - все ок. живет пока программа не завершится. Ну надо же....такая лажа, при определении. забыть дать имя экземпляру, видать невыспался.
Вопрос соответственно снят.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.07.2011, 12:38
Ответы с готовыми решениями:

Обсудите моё задание (Страуструп Б.) Последовательности слов
Обсудите моё задание (Страуструп Б. Язык программирования С++. Специальное издание, 3-изд. Бином.2004) 145 ст. задание 11. ...

Не получается сделать 6е задание 3й главы из книги Бьярне Страуструп
Здравствуйте, я совсем не давно начал изучать C++ и начал с книги Бьярна Страуструпа, и остановился на заданиях с 3й главы, а конкретно...

Задача:Страуструп. 4.11.4
1.Напишите программу,которая печатает символы от 'a' до 'z' и цифры от '0' до '9' и их целые значения. 2.Проделайте то же самое для...

7
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
10.07.2011, 12:50
AzaKendler, в качестве предложения
3. Может все можно сделать гораздо проще?
Попробуй сделать указатель на функцию параметром шаблона.
1
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
10.07.2011, 20:55
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template<typename T, T f(T)>
class  STC{
         T old;
public:
         STC(T h){
               old = f(h);
         }
         ~STC(){
               f(old);
         }
};
//##########################################
STC<terminate_handler, set_terminate> term(myterminate);
STC<unexpected_handler, set_unexpected> expec(myunexpected);
Хотя, имхо, можно обойтись без шаблонов, т.к. параметр T известен заранее.
1
 Аватар для AzaKendler
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
Записей в блоге: 15
10.07.2011, 21:31  [ТС]
Kastaneda, да это просто задание для изучающих язык, для таких как я, чтоб так сказать отрабатывали навыки.
и конешно указатель надо в параметры, так и задумывалось но что то запутался с typedef и как то задвинул это, сделал длиннее. а так полностью согласен с Валерием. Kastaneda - спасибо это пожалуй единственно верное решение так как гораздо удобнее.

Добавлено через 21 минуту
в общем то set_unexpected это уже указка и его можно пользовать, но я что то стал городить с typedef, в параметры ввел дополнительный тип, так как увидел что, set_unexpected возвращает unexpected_function, это меня смутило, а они видимо вполне спокойно приводятся друг к другу с unexpected_handler
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
11.07.2011, 04:17
Цитата Сообщение от AzaKendler Посмотреть сообщение
а они видимо вполне спокойно приводятся друг к другу
в общем то это один и тот же тип void(*)(), только за'typedef'ен.

Добавлено через 2 минуты
Цитата Сообщение от AzaKendler Посмотреть сообщение
set_unexpected возвращает unexpected_function
прототип с cplusplus.com
C++
1
unexpected_handler set_unexpected (unexpected_handler f) throw();
0
 Аватар для AzaKendler
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
Записей в блоге: 15
11.07.2011, 12:06  [ТС]
в 10й студии, при наведении курсора на set_unexpected всплывает подсказка
unexpected_function _cdecl set_unexpected (unexpected_function_NewPtFunс)

это меня и смутило
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
11.07.2011, 12:25
Ага, есть такое. А еще она спецификацию исключений игнорирует, кроме nothrow, не могу понять почему...
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
11.07.2011, 19:02
Цитата Сообщение от Kastaneda Посмотреть сообщение
Ага, есть такое. А еще она спецификацию исключений игнорирует, кроме nothrow, не могу понять почему...
Да реализовывать геморно. Да и как писал Герб Саттер - не слишком полезная конструкция...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.07.2011, 19:02
Помогаю со студенческими работами здесь

Страуструп и Графика
Начал читать Страуструпа. По настоянию автора подключил его заголовочные файлы и библиотеку FLTK. Но программа не работает: ...

Email(1) Страуструп
Необходима помощь, занимаюсь по Страуструпу. Смотрите 4 операцию! Задание: Предложите пользователю ввести возраст адресата и...

Страуструп или С++ за 21 дней?
Народ,подскажите,что лучше страуструп или Вильямс?мне кажется мне щас подойдет Вильямс,я думаю что щас нуждаюсь в основе...

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

namespace Страуструп 3-е издание
Добрый вечер народ) Читаю книгу Страуструпа 3-е издание там встретился такой фрагмент кода: namespace Stack { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru