描述:
两行调用构造函数实例化对象的代码如下:
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 CTask
class CMoveFileTask : public CTask
功能说明:
从数据库中读取数据(CRecordTask),生成文件(CMakeFileTask),然后在一定时候后移走(CMoveFileTask)。其触发的代码就是我上面提到的那两句。
解决方案1:
就是的,哪也不复杂啊,随便找本C++的书上都会介绍啊.
解决方案2: 这种一个类里面又包含另一个类的结构,在OO上有一个专用名词,好像叫做layout
里面的类作为外壳的一个成员变量
按照C++的语意,类在初始化的时候就是要将其中的成员变量初始化
因为这个变量其实是一个类的实例
所以必须要调用它自己的构造函数来初始化,而不能直接用赋值的方式初始化
所以上面的成员初始化表列CTask(hStop),看起来就如同调用构造函数一般,hStop就是构造函数的参数
1、子类不继承父类的构造函数,如果没有CTask(hStop),则父类的构造函数不被调用,父类中实现的相关初始化不会执行,所以要得(只有一个子类对象,只是使用父类声明中实现的代码)。
2、只执行构造函数,不执行其他。
简言之,就是用括号中的值,去初始化该对象/变量,与赋值不同的是,这会触发构造函数。
引用,const对象,必须要用这种方式予以初始化。
他们所代表的语意是不同的。
成员初始化表列而已。