有如下一个函数:
void DrawShape(CDC* pDC, POINT origin);
我想给第二个参数POINT赋上默认值,写成这样:
void DrawShape(CDC* pDC, POINT origin = {0,0});
编译不能通过,不得于用了个曲线救国的方法,如下:
void DrawShape(CDC* pDC, POINT origin = CPoint(0,0));
这样是可以的,但是推广开来,并不是所有的结构体xx有有一个对应的Cxx类,就算有,不一定其构造函数适合赋值用.当然有人得说了,你可以自己再写一个吗.问题是像POINT这样MFC本身已写义好的结构,我自己再写一个,改动了合适吗?请高人指点在结构体作为函数参数时如何赋默认值的方法
void DrawShape(CDC* pDC, POINT origin);
我想给第二个参数POINT赋上默认值,写成这样:
void DrawShape(CDC* pDC, POINT origin = {0,0});
编译不能通过,不得于用了个曲线救国的方法,如下:
void DrawShape(CDC* pDC, POINT origin = CPoint(0,0));
这样是可以的,但是推广开来,并不是所有的结构体xx有有一个对应的Cxx类,就算有,不一定其构造函数适合赋值用.当然有人得说了,你可以自己再写一个吗.问题是像POINT这样MFC本身已写义好的结构,我自己再写一个,改动了合适吗?请高人指点在结构体作为函数参数时如何赋默认值的方法
POINT之所有能这么用,也是因为它重载了"="运算符
其定义如下:
typedef struct tagPOINT
{
LONG x;
LONG y;
} POINT, *PPOINT, NEAR *NPPOINT, FAR *LPPOINT;
InvalidateRect(CRect(10,10,50,50));
dc.MoveTo(CPoint(10,11));
dc.SelectObject(&CBrush(RGB(255,0,0)));InvalidateRect(CRect(10,10,50,50));
第一个参数类型为:LPCRECT lpRect,这是一个指向Rect的指针
而CRect重载了operator LPCRECT,故能隐式转换dc.MoveTo(CPoint(10,11));
第一个参数类型为:POINT point
而CPoint重载了: BOOL operator==(POINT point) const;故能隐式转换dc.SelectObject(&CBrush(RGB(255,0,0)));
要求类型为*CBrush,这个无需解释了
感谢各位的帮助,如果只能这样,就结贴吧