C/C++笔试系列--如何利用成员变量作为成员函数的默认参数

来源:互联网 发布:淘宝管制刀具认定标准 编辑:程序博客网 时间:2024/05/16 02:11
 

经典C++笔试题解析7

--如何利用成员变量作为成员函数的默认参数

 

Sailor_forever sailing_9806@163.com 转载请注明

http://blog.csdn.net/sailor_8318/archive/2008/11/19/3337236.aspx

 

如何在类成员函数中默认引用类成员?

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);

}

};

引用必有初始值,且不能为Null

 

class 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;

}

 

原创粉丝点击