MFC中的运算符重载
来源:互联网 发布:淘宝运费险 编辑:程序博客网 时间:2024/06/05 21:05
新建一个“基于对话框"的MFC程序,双击”确定“按钮为其增加消息响应函数,代码如下
void CTestDlg::OnBnClickedOk()
{
CRect rect;
GetClientRect(rect);
CString str;
str.Format(_T("width=%d, height=%d"), rect.Width(), rect.Height());
MessageBox(str);
}
这段代码有个问题不知道你想过没有?GetClientRect是CTestDlg从CWnd继承过来的成员函数,其原型为
void GetClientRect( LPRECT lpRect ) const;
传入的参数为指向CRect的指针,但我们传入的确是CRect对象,编译居然正确没有任何错误,且程序正常运行。
实际上这不是偶然,这是因为CRect类重载了LPRECT运算符,也就是如果在需要LPRECT的地方,我们传递的
是CRect,则编译器会调用LPRect运算符函数将CRect转换为LPRect(当然这种转换[或运算符重载]是Microsoft
给我们编写好的,如果没有这种重载编译器就会报错,因为类型不匹配)。
下面给一个自己写的例子,自己好好想想为什么?
class MyPoint;
typedef MyPoint* LPMyPoint;
class MyPoint
{
public:
void output()
{
AfxMessageBox(_T("hello"));
}
operator LPMyPoint()
{
return this;
}
};
void ShowMessage(LPMyPoint lpMyPoint)
{
lpMyPoint->output();
}
void CTestDlg::OnBnClickedOk()
{
MyPoint myPoint;
ShowMessage(myPoint);
}
void CTestDlg::OnBnClickedOk()
{
CRect rect;
GetClientRect(rect);
CString str;
str.Format(_T("width=%d, height=%d"), rect.Width(), rect.Height());
MessageBox(str);
}
这段代码有个问题不知道你想过没有?GetClientRect是CTestDlg从CWnd继承过来的成员函数,其原型为
void GetClientRect( LPRECT lpRect ) const;
传入的参数为指向CRect的指针,但我们传入的确是CRect对象,编译居然正确没有任何错误,且程序正常运行。
实际上这不是偶然,这是因为CRect类重载了LPRECT运算符,也就是如果在需要LPRECT的地方,我们传递的
是CRect,则编译器会调用LPRect运算符函数将CRect转换为LPRect(当然这种转换[或运算符重载]是Microsoft
给我们编写好的,如果没有这种重载编译器就会报错,因为类型不匹配)。
下面给一个自己写的例子,自己好好想想为什么?
class MyPoint;
typedef MyPoint* LPMyPoint;
class MyPoint
{
public:
void output()
{
AfxMessageBox(_T("hello"));
}
operator LPMyPoint()
{
return this;
}
};
void ShowMessage(LPMyPoint lpMyPoint)
{
lpMyPoint->output();
}
void CTestDlg::OnBnClickedOk()
{
MyPoint myPoint;
ShowMessage(myPoint);
}
- MFC中的运算符重载
- c++中的运算符重载
- c#中的运算符重载
- C#中的运算符重载
- C++中的运算符重载
- Lu中的运算符重载
- python中的运算符重载
- c++中的运算符重载
- C++中的运算符重载
- C++ 中的运算符重载
- C++中的运算符重载
- C++中的运算符重载
- c++中的运算符重载
- C++中的运算符重载
- C++中的重载运算符
- C++中的运算符重载
- C++ 中的运算符重载
- C++中的运算符重载
- tiny6410温度传感器详细开发步骤
- 公式解析器开源项目整理
- 第十三周项目二——多重继承引起的二争议
- HDU - Super Jumping! Jumping! Jumping!(dp)
- 菜鸟学习之webservice 测试工具 soapUI
- MFC中的运算符重载
- python 文件批量剪切
- omapl138 ubifs文件系统移植 之U-boot移植一
- 定制防火墙 应该如何选择硬件和系统
- 机器人操作系统构架
- 用户宜积极接纳创新数据库技术
- eclipse 导入myeclipse web项目
- 字符串匹配的KMP算法(部分匹配表:前缀---后缀)
- java----装饰类思想