为什么在派生类的函数中还要加入相同的基类函数,例如在一个名为ROUND的工程中(基于对话框)
    BOOL CRoundDlg ::OnInitDialog()
     {   
        CDialog::OnInitDialog();
         .........
         .........;
      }
      在调试过程中,去掉第一条语句后仍然通过,我想问有这个必要加基类的函数吗?况且不传入任何参数。

解决方案 »

  1.   

    做一些基类的初始化工作
    是一中风格
    什么也不做也要加
    你不知道MFC做了什么习惯了就好了!
      

  2.   

    这是有原因的,由于MFC中的默认消息处理函数基本上都是虚函数,因此一旦重载,则原函数就不执行了,所以,在子类中有必要执行父类的函数。不传入任何参数不等于它就什么都没做,不是吗?假设你派生了一个自己的Dialog类,这个类有自己的OnInitial函数,你从它再派生一个Dialog类,却不执行父类的OnInitial函数,显然会出错。MFC自身也一样。你没有执行默认的CDialog::OnInitDialog();肯定会有问题,当你在这个对话框中使用序列化或者线程等等特性的时候,你就会发现会有一些异常了。