两行调用构造函数实例化对象的代码如下:
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)。其触发的代码就是我上面提到的那两句。
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)。其触发的代码就是我上面提到的那两句。
引用,const对象,必须要用这种方式予以初始化。
他们所代表的语意是不同的。
这一句会触发CMoveFileTask的构造函数而实例化一个MoveFileTask的对象,并给其成员变量
m_lpszFTPFolder初始化。但我不明白其中CTask(hStop)一句实现了什么作用----是又实例化了CTask对象?还是将CMoveFileTask从CTask继承而来的成员进行初始化?
CMoveFileTask::CMoveFileTask(HANDLE hStop) :
CTask(hStop),
m_lpszFTPFolder(NULL)
{
}另外,顺便问一下,在new一个对象时,除了执行构造函数以外(假设构造函数就是向上面的空函数),是否还执行类中的其他函数呢?比如:Init()、Start()等等函数?
2、只执行构造函数,不执行其他。
里面的类作为外壳的一个成员变量
按照C++的语意,类在初始化的时候就是要将其中的成员变量初始化
因为这个变量其实是一个类的实例
所以必须要调用它自己的构造函数来初始化,而不能直接用赋值的方式初始化
所以上面的成员初始化表列CTask(hStop),看起来就如同调用构造函数一般,hStop就是构造函数的参数