初始化C++类成员和在你的MFC应用中加入位置栏

http://tech.ddvip.com   2007年03月30日    社区交流

本文详细介绍初始化C++类成员和在你的MFC应用中加入位置栏

  或者memset(this,0,sizeof(this));

  注意第二个片断绝对是非面向对象的。

  当我考虑初始化列表的问题时,有一个奇怪的特性我应该警告你,它是关于C++初始化类成员的,它们是按照声明的顺序初始化的,而不是按照出现在初始化列表中的顺序。

  class CMyClass {
  CMyClass(int x, int y);
  int m_x;
  int m_y;
  };
  CMyClass::CMyClass(int i) : m_y(i), m_x(m_y)
  {
  }

  你可能以为上面的代码将会首先做m_y=I,然后做m_x=m_y,最后它们有相同的值。但是编译器先初始化m_x,然后是m_y,,因为它们是按这样的顺序声明的。结果是m_x将有一个不可预测的值。我的例子设计来说明这一点,然而这种bug会更加自然的出现。有两种方法避免它,一个是总是按照你希望它们被初始化的顺序声明成员,第二个是,如果你决定使用初始化列表,总是按照它们声明的顺序罗列这些成员。这将有助于消除混淆。

  问题

  我刚刚在几台机器上安装了Windows® 2000 Release Candidate 1,不知道怎样在我的MFC应用中得到具有新的Outlook风格栏目的Open对话框(见图1)。

  

  Figure 1 The New Open Dialog

  我能否只设置一个标志,或者我是否需要一个新的头文件和一个新的公共对话框的DDL?我注意到一些旧的应用程序如Notepad好像可以得到新的Open对话框而无须重新编译,但它们不是MFC应用。理想情况,我希望在Windows 9x 和Windows NT®下得到一个使用旧对话框的应用,而在Windows 2000下使用新的对话框。

  Warren Stevens

作者:Paul DiLascia    责编:豆豆技术应用

正在加载评论...