有以下构造函数:
CEx04aView::CEx04aView() : m_rectEllipse(0, 0, 200, 200)
{
m_nColor = GRAY_BRUSH;
}不知: m_rectEllipse(0, 0, 200, 200)代表什么意思,为何可以写到函数体之外,有什么依据,谢谢

解决方案 »

  1.   

    m_rectEllipse是CRect型变量,0,0表示矩形区域的左上角点的x,y坐标,200,200表示矩形区域的右下角点的x,y坐标,
      

  2.   

    m_rectEllipse(0, 0, 200, 200)
    写在函数体内是否可以呢?谢谢
      

  3.   

    m_rectEllipse(0, 0, 200, 200)
    写在函数体内和CEx04aView::CEx04aView() : m_rectEllipse(0, 0, 200, 200)等价
      

  4.   

    成员初始化表列。引用和const成员只能这样初始化而不能赋值。
      

  5.   

    成员初始化表列。
    另外有一种和它形式相同的情况:给基类构造函数传递参数。如:
    Derived::Derived(int a, int b) : Base(a)//基类只要一个参数
    {
     ...
    }
      

  6.   

    举个例子,比如你定义了如下一个类:
    class test
    {
    CRect rect;
    int i;
    long l;
    float f;
    int array[3];
    double d;
    test();
    };test::test():rect(0,0,100,100),i(10),l(20),f(24.5),d(3.14159265)
    {
    //把类中的数据成员的初始化的值写在外面,这是函数初始化的一种方法
    //这种写法要注意参数的顺序要和类中定义时的顺序一样,且一一对应
    //有些数据成员的值难以写在外面时也可以在这里面补充,如array[]数组一类
    array[0]=0;
    array[1]=1;
    array[2]=2;
    }上面的构造函数的写法及作用和下面的写法完全等同:
    test::test()
    {
    rect=CRect::CRect(0,0,100,100);
    i=10;
    l=20;
    f=24.5;
    array[0]=0;
    array[1]=1;
    array[2]=2;
    d=3.14159265;
    }
      

  7.   

    m_rectEllipse(0, 0, 200, 200)
    写在函数体内是否可以呢?
    --------------------------------------------------------
    可以,在函数体内可写成如下形式:
    m_rectEllipse=CRect::CRect(0,0,200,200);
      

  8.   

    实际上是调用了成员的构造函数,Snow_Ice11111(雪上加冰) 的办法是首先创建一个临时CRect变量,再赋值