我爱Aspx >> VC.Net >> 非议MFC(三)库代码的质量问题{
void operator=(const RECT& srcRect);
void operator+=(LPCRECT lpRect);
};
自定义类型不要毫无价值的与内建类型不兼容(《Effective C++》语)。operator=()应该返回CRect &,这样做还可以支持链式赋值。同理operator+=()也应该返回CRect &。
5.没有尽力保证安全性
<AFXWIN.H>
class CRect : public tagRECT
{
CRect operator+(LPCRECT lpRect) const;
};
operator+()应该返回const CRect,这样做可以禁止形如(a+b)=c;的病态语句,同时也保持了与内建类型的行为一致。
6.没有尽力提高可用性和可靠性
<AFXWIN.H>
class CDC : public CObject
{
BOOL BitBlt(int x, int y, int nWidth, int nHeight, CDC* pSrcDC,
int xSrc, int ySrc, DWORD dwRop);
};
做个简单的类比:
<STRING.H>
size_t __cdecl strlen(const char *);
形参为什么要声明为const char *?因为,其一,const char *既可以接受常量字符串又可以接受非常量字符串,而char *只能接受非常量字符串。其二,const可以保证函数体不更改原字符串这一契约。
所以BitBlt()的声明中,参数pSrcDC是原设备环境,不会改变,应该声明为const CDC *。
请参考上一篇《非议MFC(二)逻辑上的不完备》
【我对这篇文章有话说?】
从WEB服务器下载文件的简单方法。[05-21]
非议MFC(二)逻辑上的不完备[05-21]
实战DeviceIoControl 之一:通过..[05-21]
Windows中文输入法的实现[05-21]
用Delphi 6开发ASP上传组件详解[05-21]
”新快乐时光“再解[05-21]
Notes中有关C++API的注意事项[05-21]
Domino SMTP设置[05-21]
游戏修改器[05-21]
windows API简介--用户接口(系列..[05-21]