下面是我犯的一个错误,与大家共享教训

 

 

下面是我犯的一个错误,与大家共享教训:

 

MFC的文件类Cfile没有提供通写(WriteThrough)功能,所以就重载了CFile,目的是重新实现基类虚函数Open,派生类CwriteThroughFile,定义如下:

 

class _NCLIB_EXP CWriteThroughFile : public CFile

{

public:

// Constructors

       CWriteThroughFile()

              {}

       CWriteThroughFile(int hFile)

              : CFile(hFile) {}

       CWriteThroughFile(LPCTSTR lpszFileName, UINT nOpenFlags)

              : CFile(lpszFileName, nOpenFlags) {}

 

       virtual BOOL Open(LPCTSTR lpszFileName, UINT nOpenFlags,

              CFileException* pError = NULL);

};

 

应用该类的代码:

       try

       {

              CWriteThroughFile _file(pszDatFileName_, CFile::modeNoTruncate | CFile::modeCreate | CFile::modeReadWrite | CFile::shareDenyWrite);

             

       }

       }

       catch (CFileException* pe_)

       {

             

       }

 

但是错误是:这个CwriteThroughFile的对象_file在打开文件时候,并没有调用虚函数CwriteThroughFile::Open,而是调用了基类的Open函数。

 

教训:

1           我没有仔细测试,是造成错误的直接原因,如果能够单步跟踪一下,一定能够发现问题。
所以无论写多么简单的代码都必须至少单步跟踪一边,不能想当然。这方面已经有很多教训了。

2           这个例子充分说明了在构造函数中调用虚函数的害处。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值