缺省值
- 在参数内添加默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。
- 如下所示,在set()函数的参数内添加默认值,就可以替代public内四个set函数
public:
void Set(int h=12;int m=30;int s=20;)
{
m_hour=h;
m_minute=m;
m_second=s;
}
/*class Clock
{
public:
void Set()
{
this->m_hour=12;//m_ :成员
this->m_minute=20;
this->m_second=30;
}
void Set(int h)
{
this->m_hour=h;
this->m_minute=20;
this->m_second=30;
}
void Set(int h,int m)
{
this->m_hour=h;
this->m_minute=m;
this->m_second=30;
}
void Set(int h,int m,int s)
{
this->m_hour=h;//m_ :成员
this->m_minute=m;
this->m_second=s;
}
*/
带默认值的函数注意:
下面这样写会报错
class A
{
public:
void fn(int i=0;int j=0;int k=0)
{
m_i=i;
m_j=j;
m_k=k;
}
void printf()
{
count<<m_i<<" "<<m_j<<" "m_k<<endl;
}
private:
int m_i;
int m_j;
int m_k;
};
void main()
{
A a,b,c,d;
a.fn();
b.fn(1);
c.fn(1,2);
d.fn(1,2,3);
a.printf();
b.printf();
c.printf();
d.printf();
}
- 报错:
- 因为一般情况下,尽量参数都带默认值,如果参数不带默认值,必须放在前面,有默认值的参数后面的参数必须都带默认值。
- 而默认参数在函数声明的时候写上,如果放在类外定义此函数,默认值不需要再定义。如下面这样书写也不对
class A
{
public:
void fn(int i=0;int j=0;int k=0);//声明
};
void AA:fn(int i=0;int j=0;int k=0)
{
m_i=i;//定义
m_j=j;
m_k=k;
}