c++ mfc virtual call concept
От: jyuyjiyuijyu  
Дата: 11.09.11 20:52
Оценка:
Всем привет
в классе CDialog есть виртуальная функция OnInitDialog
при чем при ее переопределении в производных классах ее надо вызывать явно
все равно она там выполняет разный stuff в том числе вызывает DoDataExchange
если ее забыть вызвать ничего не будет работать
virtual BOOL OnInitDialog()
{
    ... // тут забыли __super::OnInitDialog
    ... // а тут уже путь точно не к успеху
}

я попался на этой ошибке я определил
virtual void DoDataExchange(CDataExchange* pDX)
{
    ...
}

чтобы связать контролы CxxCtrl с элеменати управления (static,button,..)
но не вызвал OnInitDialog базового класса из своей OnInitDialog и ничего не работало
НАКОНЕЦ ТО ВОПРОС: почему так сделано ?
можно же было в месте где вызывается виртуальная OnInitDialog
вызывать вместо нее не виртуальную функцию например Dummy она бы
выполняла нужный код
(который сейчас находится в virtual BOOL CDialog::OnInitDialog())
а virtual BOOL CDialog::OnInitDialog сделать пустой заглушкой на случай
если мы не определили свою OnInitDialog а потом Dummy делала бы
(после того как все проинитит) виртуальный вызов нашей OnInitDialog
а если ее нет то вызывалась бы ее пустая заглушка
вот и весь вопрос... почему так нельзя было сделать...?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.