有如下一个函数:
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本身已写义好的结构,我自己再写一个,改动了合适吗?请高人指点在结构体作为函数参数时如何赋默认值的方法

解决方案 »

  1.   

    给你的结构体重载一个“=”运算符就可以了
    POINT之所有能这么用,也是因为它重载了"="运算符
      

  2.   

    楼上的,你先看清楚啊,我不想修改MFC原有的东西,再者POINT是很简单的一个结构体,并没有重载"="操作
    其定义如下:
    typedef struct tagPOINT
    {
        LONG  x;
        LONG  y;
    } POINT, *PPOINT, NEAR *NPPOINT, FAR *LPPOINT;
      

  3.   

    你可以MFC里,可以如下用:例如:
    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,这个无需解释了
      

  4.   

        如果非要给结构体写一个构造函数的话,我觉得还是CLASS来得直接, 本想直接用POINT结构,而不是CPoint类,是考虑到这个绘图涵数在鼠标移动时要不停的调用,如果目标比较多的话,经过N次的调用总是会慢上那么一点的.
        感谢各位的帮助,如果只能这样,就结贴吧
      

  5.   

    随便一个消息,Windows内部都要调用至少几十个函数,CPoint的构造时间,可以忽略