关于构造函数中类成员变量赋值和 构造函数传递指针?
定义一个POINT point;类型的变量 为什么构造函数初始化时只要point=0;就可以了?
难道在POINT类中重载了 "= "?
POINT m_point,point;
CClientDC dc(this);
CBrush brush(RGB(0,0,255));
dc.FillRect(CRect(m_point,point),&brush);
但是函数定义为这样 void FillRect(LPCRECT lpRect,CBrush* pBrush);
第一个参数是指向一个RECT结构的指针 为什么用这样的形式CRect(m_point,point)就可以传递一个指针了呢?
CRect(m_point,point)这是CRect类的构造函数啊 这和传递指针有什么关系?难道这样就能创建一个CRect临时对象?然后把地址赋给第一个参数?
[解决办法]
#1: POINT类应该没有重载 "= ",这种情况下c++会执行缺省动作: memory覆盖.因此,point中的内容都为0
#2: 首先,CRect(m_point,point)生成了一个CRect对象,然后编译器发现FillRect()的第一个参数是LPRect类型,这时编译器会从两方面着手解决问题:
(1) LPRect类有没有参数为CRect的构造函数
(2) CRect类有没有成员函数operator LPRect()
(1)-no, (2)-yes, 因此就执行(2)得到LPRect.
[解决办法]
CRect(m_point,point) 这样构造了一个 CRect 对象,
CRect 类型中定义了 LPCRECT 类型转换操作符,
所以, CRect 可以被自动的转换为LPCRECT ,
因此,dc.FillRect(CRect(m_point,point),&brush); 没有问题 ~
[解决办法]
POINT 应该是一个 struct,
对于 struct, 定义时候初始化可以采用类似的方式: POINT point={0,0};
但是赋值的时候是不允许 point={0,0} 这样的,只能逐个元素赋值。
请区分 初始化和赋值