hur.cn - 华软网

 热门搜索

求教VC++,函数参数的重载是怎么实现的

  作者:未知    来源:网络    更新时间:2011/4/15
小弟现在是java程序员,最近在学习VC,但在学习中遇到这样的问题,在MFC基础类库CDC中有这样一个函数

CDC::FillRect,

函数的原型是这样 void FillRect( LPCRECT lpRect, CBrush* pBrush );

其中lpRect这个参数是这样的,
Pointer to a RECT structure that contains the logical coordinates of the rectangle to fill. You can also pass a CRect object for this parameter. 

也就是说参数你能够传送RECT这样一个结构体指针,或一个CRect这个类的一个对象

由于小弟之前一直在用的是java,在java中函数的重载要么是参数的个数或类型不同,

然后我有在源码中查了一下LPCRECT定义 
typedef const RECT* LPCRECT; 定义的确是一个结构体的指针。

既然该参数需要的是结构的指针,那么为什么传送CRect这个类的对象也能够呢,

虽然结构体是特殊的类,但这也说不通啊,即使都是类,也是两种数据类型,为什么传这两种呢,

而且在MFC中这样的函数还很多,在线等结果!!!!

---华软 网友回答---
看看MSDN,由于CRect重载了LPCRECT 

CRect::operator LPCRECT 
operator LPCRECT( ) const;

Remarks

Converts a CRect to an LPCRECT. When you use this function, you don't need the address-of (&) operator. This operator will be automatically used when you pass a CRect object to a function that expects an LPCRECT.

---华软网友回复---
C++能够对类定义类型转换成员函数,这样在需要的时候能够执行深度为一的转换      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。