有如下的类定义
class Cwave{
public:
    Cwave();//缺省默认构造函数
    cwave(const char* pszfilename);//带参构造函数(文件构造)
    cwave(UINT uiresID,HMODULE hmod)//带参构造函数(资源构造)
public:
    bool create(const char* pszfilename);
private:
    Byte * m_pimagedata;
    dword m_dwimagelen;
    bool  m_bresource;
};
#endif在下面的成员函数为什么其后面要加上其私有数据成员呢?(而且其形式那么怪??)加上或者不加上这些数据成员有什么区别呢?Cwave::cwave():m_dwimagelen(0),m_bresource(false),m_pimagedata(NULL);//缺省默认构造函数
{
}Cwave::cwave(const char * pszfilename):m_dwimagelen(0),m_bresource(false),m_pimagedata(NULL);//带参构造函数。文件构造
{
create(pszfilename);
}Cwave::cwave(UINT uiresID,HMODULE hmod):m_dwimagelen(0),m_bresource(TRUE),m_pimagedata(NULL);//带参构造函数。资源构造
{
create(uiresID,hmod);
}

解决方案 »

  1.   

    还有,to duqiang2050(杜杜):   初始化的顺序实际上是根据成员变量在类本身定义的顺序决定的,而不是取决于你如何在初始化列表中的书写顺序。
      

  2.   

    是的,给你一个非用构造函数初始化列表的理由:class A
    {
    public:
    A(int i)
    {
    m_ia = i;
    }private:
    int m_ia;
    };class B
    {
    public:
    B(){} //no appropriate default constructor available// B():a(10)//right
    // {
    // }
    private:
    A a;
    };int main()
    {
    B b;
    return 0;
    }