• 您的位置我爱Aspx >> VC.Net >> 非议MFC(三)库代码的质量问题
  • 非议MFC(三)库代码的质量问题

  • 作者:aspxer  来源:internet  日期:2007-5-21 23:49:39  关键字:
  • {

    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(二)逻辑上的不完备》

    我对这篇文章有话说?
  • 广告位招租,广告代号:content_468_15
  • 上一篇:实战DeviceIoControl 之二:获取软盘/硬盘/光盘的参数
    下一篇:从WEB服务器下载文件的简单方法。
  • 相关文章