我爱Aspx >> VC.Net >> 非议MFC(三)库代码的质量问题2.不顾效率
<AFXWIN.H>
class CRect : public tagRECT
{
BOOL PtInRect(POINT point) const;
};
因为POINT结构体大于32位地址长度,形参使用值传递效率不高,应该改为引用。
软件的设计应该保持统一的取舍原则,如果说在上一点中,不惜采用那么极端的方式来提高效率,那么这里明显可以合理提高效率的地方为什么要放过呢?
3.算法不严谨
<AFXWIN.H>
class CRect : public tagRECT
{
BOOL IsRectEmpty() const;
};
IsRectEmpty()函数的功能是当矩形面积为空时返回1;当矩形面积为不空时返回0。
给出如下测试代码:
CRect rct(100,100,0,0);
BOOL b=rct.IsRectEmpty();
运行后b的值居然是1!?
有些CRect的成员函数如:IntersectRect()、UnionRect()等只有先调用NormalizeRect()才能确保获得正确结果。但IsRectEmpty()完全没必要依赖NormalizeRect(),例如可以这样实现:
BOOL CRect::IsRectEmpty() const
{
return (left==right&&up==bottom ? 1 : 0);
}
推测起来,MFC中的实现可能是:若矩形的right<=left或bottom<=up则返回1。
4.无故破坏约定俗成的规则
<AFXWIN.H>
class CRect : public tagRECT
【我对这篇文章有话说?】
从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]