两行调用构造函数实例化对象的代码如下:
CMoveFileTask* pMoveFileTask = new CMoveFileTask(m_hStop);
new CFaxTask(m_hStop, pMoveFileTask)但我看不明白这两句代码能起什么作用?因为其构造函数的意思和句法我也看不懂:
请哪位大侠给解释一下?
1:
CMoveFileTask::CMoveFileTask(HANDLE hStop) :
CTask(hStop),
m_lpszFTPFolder(NULL)
{
}2:
CRecordTask::CRecordTask(HANDLE hStop, CMoveFileTask* pMoveFileTask) :
CMakeFileTask(hStop, pMoveFileTask),
m_dwWrongItemTimeLine(0),
m_dwCheckPoint(0),
m_lpszCurTable(NULL)
{
}3:
CFaxTask::CFaxTask(HANDLE hStop, CMoveFileTask* pMoveFileTask) : CRecordTask(hStop, pMoveFileTask)
{
}说明:这套代码看得我头晕。其中类的结构很复杂。现简单说明其头文件中class的定义:
class CFaxTask : public CRecordTask
class CRecordTask : public CMakeFileTask
class CMakeFileTask : public CTaskclass CMoveFileTask : public CTask功能说明:
从数据库中读取数据(CRecordTask),生成文件(CMakeFileTask),然后在一定时候后移走(CMoveFileTask)。其触发的代码就是我上面提到的那两句。

解决方案 »

  1.   

    简言之,就是用括号中的值,去初始化该对象/变量,与赋值不同的是,这会触发构造函数。
    引用,const对象,必须要用这种方式予以初始化。
    他们所代表的语意是不同的。
      

  2.   

    谢谢楼上的回答。但我还是比较困惑。比如说就以第一句:CMoveFileTask* pMoveFileTask = new CMoveFileTask(m_hStop);为例,
    这一句会触发CMoveFileTask的构造函数而实例化一个MoveFileTask的对象,并给其成员变量
    m_lpszFTPFolder初始化。但我不明白其中CTask(hStop)一句实现了什么作用----是又实例化了CTask对象?还是将CMoveFileTask从CTask继承而来的成员进行初始化?
    CMoveFileTask::CMoveFileTask(HANDLE hStop) :
    CTask(hStop),
    m_lpszFTPFolder(NULL)
    {
    }另外,顺便问一下,在new一个对象时,除了执行构造函数以外(假设构造函数就是向上面的空函数),是否还执行类中的其他函数呢?比如:Init()、Start()等等函数?
      

  3.   

    1、子类不继承父类的构造函数,如果没有CTask(hStop),则父类的构造函数不被调用,父类中实现的相关初始化不会执行,所以要得(只有一个子类对象,只是使用父类声明中实现的代码)。
    2、只执行构造函数,不执行其他。
      

  4.   

    这种一个类里面又包含另一个类的结构,在OO上有一个专用名词,好像叫做layout
    里面的类作为外壳的一个成员变量
    按照C++的语意,类在初始化的时候就是要将其中的成员变量初始化
    因为这个变量其实是一个类的实例
    所以必须要调用它自己的构造函数来初始化,而不能直接用赋值的方式初始化
    所以上面的成员初始化表列CTask(hStop),看起来就如同调用构造函数一般,hStop就是构造函数的参数