成员函数默认参数

来源:互联网 发布:淘宝尾款什么时候付 编辑:程序博客网 时间:2024/05/21 09:29
http://m.blog.csdn.net/blog/sailor_8318/3348360#如何在类成员函数中默认引用类成员?class CAbc;class CAbc{private:int m_abc;public:void fun0(int &p=NULL)//编译错误{printf("%d",p);}void fun1(const int &p=NULL)//编译通过{printf("%d",p);}void fun2(int &p=this->m_abc)//编译错误{printf("%d",p);}void fun3(const int &p=m_abc)//编译错误{printf("%d",p);}};引用必有初始值,且不能为Nullclass CAbc;class CAbc{        public:        int m_abc;        CAbc(){}        void set(int abc);        void fun( const int &p=m_abc) // const只是表示其为输入参数而已,可以去掉        {                printf("%d/n",p);        }};//提示:   error   C2648   将成员作为默认参数使用要求静态成员。一个类中,为什么不能将数据成员做为成员函数的默认参数?标准规定这么一个限制条件是有其理由的,非静态成员如果在成员函数被调用前没有被初始化,此时编译器无法确认函数参数的默认值是多少。而标准这样做就把错误的发现提前到编译期。解决办法是将缺省参数值是静态绑定在静态类型成员上面。以下代码通过了class CAbc;class CAbc{        public:        static int m_abc;        CAbc(){}        void set(int abc);        void fun( const int &p=m_abc) // const只是表示其为输入参数而已,可以去掉        {                printf("%d/n",p);        }};void CAbc::set(int abc){        m_abc=abc;}int CAbc::m_abc=1000;int main(int argc, char* argv[]){        CAbc a;        a.fun();        a.set(10);        a.fun();        return 0;}
0 0
原创粉丝点击