|
1.4 运算符重载在MFC中的应用举例
有这样一些类,它们的抽象语义包含数学运算的特性,这样的类被称为值类型。典型的例子是那些数学对象的封装类,如MFC的CPoint(点)、CSize(坐标偏移量)、CRect(矩形)等。另外,时间类(CTime)和字符串类(CString)等也有数学运算的特性,例如计算两个时间点的间隔,字符串之间的大小比较等。实现这些类的运算功能,最简洁最直观的方法莫过于重载运算符。下面列举几个MFC定义的数值类的运算符重载函数。 CPoint类
//比较两个点是否相等 BOOL operator==(POINT point) const; BOOL operator!=(POINT point) const; //偏移点的计算 void operator+=(SIZE size); void operator-=(SIZE size); void operator+=(POINT point); void operator-=(POINT point); CPoint operator+(SIZE size) const; CPoint operator-(SIZE size) const; CPoint operator-() const; CPoint operator+(POINT point) const; //计算两个点之间的坐标偏移量 CSize operator-(POINT point) const; //偏移矩形的计算 CRect operator+(const RECT* lpRect) const; CRect operator-(const RECT* lpRect) const; | CTime类
CTimeSpan operator-(CTime time) const;//计算两个时间点的间隔 CTime operator-(CTimeSpan timeSpan) const;//计算相差指定间隔的另一个时间点 CTime operator+(CTimeSpan timeSpan) const; const CTime& operator+=(CTimeSpan timeSpan); const CTime& operator-=(CTimeSpan timeSpan); BOOL operator==(CTime time) const;//比较两个时间点 BOOL operator!=(CTime time) const; BOOL operator<(CTime time) const; BOOL operator>(CTime time) const; BOOL operator<=(CTime time) const; BOOL operator>=(CTime time) const; | CString类(仅列举友元函数)
friend CString AFXAPI operator+(const CString& string1, const CString& string2);//连接两个字符串 friend CString AFXAPI operator+(const CString& string, LPCTSTR lpsz); friend CString AFXAPI operator+(LPCTSTR lpsz, const CString& string); friend CString AFXAPI operator+(const CString& string, TCHAR ch);//为字符串追加字符 friend CString AFXAPI operator+(TCHAR ch, const CString& string);
| 除了“+”、“-”、“*”、“/”以及比较操作等基本运算符外,插入运算符“<<”和提取运算符“>>”的重载也在MFC中频繁使用。例如,在类CDumpContext和CArchive中定义了大量的“<<”或“>>”运算符的重载版本。CDumpContext类重载各种数据类型的“<<”运算符,将这些数据(包括对象)输出到VC++(www.cppentry.com)编译器的调试窗口。文档类CArchive重载“<<”和“>>”运算符,分别用于在文件中存储对象状态和从文件中恢复对象状态。
【责任编辑: 夏书 TEL:(010)68476606】
|