我爱Aspx >> VC.Net >> 非议MFC(三)库代码的质量问题非议MFC(三)库代码的质量问题
sp; 非议MFC(三)库代码的质量问题
关键字:C++,MFC,RECT,CRect,POINT,CPoint,质量
说明:程序片断仅包括理解所必需的代码,其余省略。
每个人的代码都不可能完全排除质量隐患,但MFC作为库代码,对其质量怎么苛求都不会过分。
1.只顾效率
<WINDEF.H>
typedef struct tagRECT
{
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT, *PRECT, NEAR *NPRECT, FAR *LPRECT;
<AFXWIN.H>
class CRect : public tagRECT
{
CPoint& TopLeft();
CPoint& BottomRight();
};
<AFXWIN1.INL>
_AFXWIN_INLINE CPoint& CRect::TopLeft()
{ return *((CPoint*)this); } 1]
_AFXWIN_INLINE CPoint& CRect::BottomRight()
{ return *((CPoint*)this+1); } 2]
TopLeft()通过返回CPoint &同时提供Set和Get功能,并且,返回CPoint &比返回CPoint效率高。但是,函数的实现必须依赖指针的跨越性转换(即从CRect *转换成完全不相干的CPoint *),另外,还要假设编译器是顺序存放各数据成员。随意转换指针类型,不安全;依赖编译器实现,不可移植;以后扩展时可维护性降低(如增加数据成员),还有可能导致错误(如引入虚函数时,有的编译器将虚表放在对象存储地址的前部)。
【我对这篇文章有话说?】
从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]