Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Инициализация членов производного кл. из конструктора базового кл. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ try catch для int; http://www.cyberforum.ru/cpp-beginners/thread561721.html
Как работает try?? ни как не могу понять. как сделать что бы при вводе текста в переменную int выдавал ошибку а не вылетала.. Добавлено через 1 минуту struct { int cod; int sent; } file;...
C++ Как записать несколько массивов, каждый в свой файл? Я недавно спрашивал здесь, как записать в файл. Мне подсказали. Вот такой вариант работает: #include <iostream> using namespace std; #include <fstream> #include <conio.h> // чтобы... http://www.cyberforum.ru/cpp-beginners/thread561715.html
C++ Изменить приоритет
Нужно написать свой диспетчер задач. Возникла проблема при изменение приоритетов процессов DWORD priorety; HANDLE hProcess; hProcess = OpenProcess(PROCESS_SET_INFORMATION, FALSE,...
C++ std::map не компилируется
Всем здравствуйте. Возникла проблема при попытке использования std::map в visual studio 2010. при подключении файла <map> и объявлении собственно экземпляра класса компилятор тут же начинает...
C++ Не выполняется замена в строке http://www.cyberforum.ru/cpp-beginners/thread561695.html
Задача стоит такая: "Напишите программу, которая шифрует сообщение с помощью rot13(каждая буква заменяется буквой, которая в английском алфавите стоит на 13 букв дальше, например a - n)" Написал...
C++ Работа с IDE Скажіть чому коли я запускаю програму нажимаючи F5 то дані я можу ввести,але результат не виводить і вікно зразу вибиває.....а коли нажимаю ctrl+F5 то не вибиває вікно вкінці і виводить результат!!!... подробнее

Показать сообщение отдельно
Pavel.fromBy
13 / 13 / 1
Регистрация: 31.12.2011
Сообщений: 83
29.04.2012, 20:36  [ТС]
grizlik78, спасибо.
Ниже я приведу код, где это используется "со смыслом" . Прошу прощения, что это в ветке C++, но вопрос я уже тут задал, да и задавал по консольке.
Ниже код Win32 API. Преподаватель в универе сказал использовать контекст устройства с этим кодом. Это оправдывается тем, что если выбросить исключение до освобождения контекста устройства, то память останется занятой. Код, который приведен ниже, позволяет обойти эту вещь, ибо при выбросе исключения вызываются деструкторы объектов, объявленных до его возникновения (Опять может некорректно написал...).


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
//---------------------------------------------------------------------------
 
#ifndef KHdcH
#define KHdcH
 
#define STRICT
#include <windows.h>
#include <windowsx.h>
 
//---------------------------------------------------------------------------
 
template <typename Policy>  class Khdc;
 
class plcGetDC
{public:   
  inline plcGetDC(HWND ahwnd);
 
 protected:
  ~plcGetDC();
 
};
//------------------------------------------------------------------------------
 
class plcBeginPaint
{public:
  inline plcBeginPaint(HWND ahwnd);
 
 protected:
  ~plcBeginPaint();
 
 private:
  PAINTSTRUCT ps;
};
//------------------------------------------------------------------------------
 
template <typename Policy>
class Khdc: public Policy
{
  typedef Policy KPolicyType;
 
  friend KPolicyType;
 
 public:
  Khdc (HWND hwnd): Policy(hwnd) { }
  ~Khdc() {  }
 
  operator HDC& ()  { return fHdc; }
 
 private:
  HWND fHwnd;
   HDC fHdc;
};
 
//------------------------ inline implementation -------------------------------
 
  typedef Khdc<plcBeginPaint>   KBeginPaint;
  typedef Khdc<plcGetDC>   KGetDC;
 
//---------------------------- plcGetDC ----------------------------------------
inline
plcGetDC::plcGetDC(HWND ahwnd)
    {reinterpret_cast<Khdc<plcGetDC> *>(this)->fHwnd = ahwnd;
     reinterpret_cast<Khdc<plcGetDC> *>(this)->fHdc = GetDC(ahwnd);
    }
 
inline
plcGetDC::~plcGetDC()
  {Khdc<plcGetDC> *const& This = reinterpret_cast<Khdc<plcGetDC> *const&>(this);
   //ReleaseDC( reinterpret_cast<Khdc<plcGetDC> *>(this)->fHwnd, reinterpret_cast<Khdc<plcGetDC> *>(this)->fHdc);
   ReleaseDC( This->fHwnd, This->fHdc);
  }
 
//---------------------------- plcBeginPaint -----------------------------------
inline
plcBeginPaint::plcBeginPaint(HWND ahwnd)
    {((Khdc<plcBeginPaint> *)this)->fHwnd = ahwnd;
     ((Khdc<plcBeginPaint> *)this)->fHdc = BeginPaint(ahwnd, &ps);
    }
 
inline
plcBeginPaint::~plcBeginPaint() { EndPaint(((Khdc<plcBeginPaint> *)this)->fHwnd, &ps); }
#endif
Преподаватель грамотный, вряд ли бы просто так стал юзать этот "хак".
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru