构造函数(惑)

本文深入探讨了复制构造函数的作用及其在类设计中的必要性,特别是对于包含指针和使用new关键字的类。同时阐述了赋值操作符与析构函数的重要性,强调了它们作为类关键组成部分的不可分割性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

复制构造函数是含有一个传引用调用参数的构造函数,具有与类相同的类型,这个参数必须是一个传引用调用参数,通常参数也是一个常量参数,也就是说要在它前面加一个参数修饰符const 。只要某个函数返回类类型的一个值,就会自动调用那个类的复制构造函数。

但凡使用了指针和操作符new的类,都应该有个复制构造函数。

有充分的理由不继承构造函数,析构函数,以及赋值操作符。为了正确执行任务,它们需要基类不能提供的信息,为了正确执行,必须知道派生类中引入的新成员变量。而这些信息是基类无法提供的。



复制构造函数,=操作符以及析构函数成为big  three 专家认为,如果需要定义其中一个,就必须定义全部三个,缺少任何一个编译器都会帮助创建它,只是可能达不到预期效果,

class AFX_EXT_CLASS CHMConfigFile { public: CHMConfigFile(); CHMConfigFile(char* szFilename); // 措版肺(相对路径) virtual ~CHMConfigFile(); BOOL SetFileName(char* szFilename); BOOL WriteToFile(); BOOL WriteToFileRMM(); void SetRewriteMode(BOOL bRewrite) { m_bRewrite = bRewrite; } BOOL GetRewriteMode() { return m_bRewrite; } ////////////////////////////////////////////////////////////////////////// int GetItemValue(char* szName, CString& strValue, char* strDefault = NULL); int GetItemValue(char* szName, int& nValue, int nDefault = 0); int GetItemValue(char* szName, unsigned short &nValue, unsigned short sDefault = 0); int GetItemValue(char* szName, double& dValue, double dDefault = 0.0); int GetItemValue(int nIdx, char* szName, CString& strValue, char* strDefault = NULL); int GetItemValue(int nIdx, char* szName, int& nValue, int nDefault = 0); int GetItemValue(int nIdx, char* szName, unsigned short &nValue, unsigned short sDefault = 0); int GetItemValue(int nIdx, char* szName, double& dValue, double dDefault = 0.0); ////////////////////////////////////////////////////////////////////////// BOOL SetItemValue(char* szName, char* szvalue); BOOL SetParamItemValue(char* szName, char* szvalue); BOOL SetItemValue(char* szName, int& nValue); BOOL SetItemValue(char* szName, unsigned short &nValue); BOOL SetItemValue(char* szName, double& dValue); BOOL SetItemValue(int nIdx, char* szName, char* szvalue); BOOL SetItemValue(int nIdx, char* szName, int& nValue); BOOL SetItemValue(int nIdx, char* szName, unsigned short &nValue); BOOL SetItemValue(int nIdx, char* szName, double& dValue); void RemoveAllItem(); BOOL RemoveItem(char* szName); BOOL RemoveItem(int nIdx, char* szName); // OhByungGil Modify -> LogFile Write void SetLogMode(BOOL bMode) { m_bLogMode = bMode; } BOOL GetLogMode() { return m_bLogMode; } void SetLogFilePath(CString strLogFilePath) { m_strLogFileName = strLogFilePath;} CString GetLogFilePath() { return m_strLogFileName; } void WriteLog( char* szName, char* szvalue ); void WriteLog( char* szName, int& nValue ); void WriteLog( char* szName, unsigned short &nValue ); void WriteLog( char* szName, double& dValue ); protected: BOOL WriteToLogFile(CString& strContents); private: CString m_strFileName; CObList m_ItemList; int m_nItemCount; BOOL m_bRewrite; CString m_strLogFileName; // OhByungGil 100531 BOOL m_bLogMode; CRITICAL_SECTION m_cs; };
03-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值