none
高手请帮忙解释一下 参数缺省值 !!! 是怎么用的??什么意思?? RRS feed

答案

  • 没什么,所谓使用缺省值,就是为了函数调用方便。 函数声明时给参数赋一个默认值。最典型的,你可以看看CDialog。

    class XXXDlg : public CDialog
    {
        // Construction
    public:
        XXXDlg(CWnd* pParent = NULL);    // standard constructor
        // 这个XXXDlg类的构造函数,有一个参数 CWnd* pParent 用来在构造时传入父窗体的指针,此时赋值为NULL,说明默认没有父窗体
    }

    实现:
    XXXDlg::XXXDlg(CWnd* pParent /*=NULL*/)   // 在实现时,不要再对参数赋值了,否则会导致编译器报错
        : CDialog(CAdminActionDlg::IDD, pParent)
    {
        m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }

    • 已标记为答案 adam90 2010年1月9日 1:38
    2010年1月7日 7:33
    版主
  • 怎么用和好处都被Michael说了。
    我说一下注意吧
    1 一个函数中可以声明多个默认参数,但是这些参数需要在函数参数的尾部。
    比如:
    void Func(int a, int b, int c =0, int d = 1);
    void Func(int a, int b =0, int c, int d);
    是没有意义的。在调用该函数的时候,你无法使用默认参数b的值,而只给出a,c,d
    2 参数的默认值是静态继承的。也就是说不要尝试在声明派生类继承的虚函数时,修改参数的默认值。
    例如:
    class A
    {
        public:

        virtual void Func(int a = 0){};
    };
    class B
    {
        public:
        void Func(int a = 1){};
    };

    在调用时:
    A* pA = new B;
    pA->Func();

    这时参数a的值为0而不是1。


    麻烦把正确答案设为解答。
    • 已标记为答案 adam90 2010年1月9日 1:38
    2010年1月7日 8:08
    版主

全部回复

  • 没什么,所谓使用缺省值,就是为了函数调用方便。 函数声明时给参数赋一个默认值。最典型的,你可以看看CDialog。

    class XXXDlg : public CDialog
    {
        // Construction
    public:
        XXXDlg(CWnd* pParent = NULL);    // standard constructor
        // 这个XXXDlg类的构造函数,有一个参数 CWnd* pParent 用来在构造时传入父窗体的指针,此时赋值为NULL,说明默认没有父窗体
    }

    实现:
    XXXDlg::XXXDlg(CWnd* pParent /*=NULL*/)   // 在实现时,不要再对参数赋值了,否则会导致编译器报错
        : CDialog(CAdminActionDlg::IDD, pParent)
    {
        m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }

    • 已标记为答案 adam90 2010年1月9日 1:38
    2010年1月7日 7:33
    版主
  • 怎么用和好处都被Michael说了。
    我说一下注意吧
    1 一个函数中可以声明多个默认参数,但是这些参数需要在函数参数的尾部。
    比如:
    void Func(int a, int b, int c =0, int d = 1);
    void Func(int a, int b =0, int c, int d);
    是没有意义的。在调用该函数的时候,你无法使用默认参数b的值,而只给出a,c,d
    2 参数的默认值是静态继承的。也就是说不要尝试在声明派生类继承的虚函数时,修改参数的默认值。
    例如:
    class A
    {
        public:

        virtual void Func(int a = 0){};
    };
    class B
    {
        public:
        void Func(int a = 1){};
    };

    在调用时:
    A* pA = new B;
    pA->Func();

    这时参数a的值为0而不是1。


    麻烦把正确答案设为解答。
    • 已标记为答案 adam90 2010年1月9日 1:38
    2010年1月7日 8:08
    版主