• 您的位置我爱Aspx >> VC.Net >> 非议MFC(二)逻辑上的不完备
  • 非议MFC(二)逻辑上的不完备

  • 作者:aspxer  来源:internet  日期:2007-5-21 23:49:38  关键字:
  • 补上这些缺失的函数不过是举手之劳,“不因善小而不为”这句话不应该只挂在嘴上!

    2.前后不一致

    <AFXWIN.H>

    class CPoint : public tagPOINT

    {

    CRect operator+(const RECT* lpRect) const; 1]

    };

    typedef const RECT* LPCRECT;

    class CRect : public tagRECT

    {

    CRect operator+(LPCRECT lpRect) const; 2]

    void operator+=(LPCRECT lpRect); 3]

    void operator&=(const RECT& rect); 4]

    };

    由于LPCRECT的类型定义放在中间,[1][2]的形参采取了形式不同但意义相同的声明方式。

    [3][4]是相似的运算符重载,却使用了不同的形参传递方式。

    每个人可以有自己的代码风格,但在同一个文件中,或者至少在同一个类中,总应该使用统一的风格吧!

    3.妨碍语法完整性

    <AFXWIN.H>

    class CRect : public tagRECT

    {

    void operator=(const RECT& srcRect);

    };

    众所周知,在C和C++中,任何一个表达式的本身都是有值的,例如:a=100就是一个表达式,它的值是100。有了这个逻辑前提,链式表达式才能合理存在。在b=a=100;中,准确地说,是把a=100这个表达式的值100赋值给b。

    而CRect类中,赋值运算符的返回类型被错误地设定成void,于是CRect对象之间的赋值表达式没有了值,链式表达式也失效了。

    我对这篇文章有话说?
  • 广告位招租,广告代号:content_468_15
  • 上一篇:从WEB服务器下载文件的简单方法。
    下一篇:实战DeviceIoControl 之一:通过API访问设备驱动程序
  • 相关文章