先来了解默认参数是什么吧!
默认参数是指在定义或声明函数时,为参数指定默认值,在调用函数时,可以传递参数,也可以不传递参数;如果没有传递参数,则在函数中使用默认参数的默认值!
对于默认参数不要单纯的错误的理解为就是函数的参数带有一个默认值,其实他强调的不仅是参数的默认的值还有如果没有传递参数可以使用默认的参数;也就是说你调用函数时可以不带参数,却仍然能正常运行(这是用的就是默认参数的默认值);因为编译器会自动调用默认参数。
最典型的就是在带默认参数的构造函数:
比如说你定义了一个class A;A有两个private数据成员int a;和int b;如果不是用默认的构造函数的话代码如下:
A(); //不带参数的构造函数 A(inta,int b);//带参数的构造函数 |
如果你在新建对象时,如初始化
A a1; //初始化调用A(); A a2(3,4); //赋值调用A(int a,int b); |
而如果使用带默认参数的构造函数时就不需要不带参数的构造函数了;如下:
A(int a=0,int b=0); |
则不需要在写出不带参数的构造函数了;因为你如果这样定义对象:
A a1; //调用的还是A(inta=0,int b=0)因为编译器就不再产生默认的构造函数A();而是直接调用A(int a=0,int b=0) //因为没有实参的构造函数,是默认构造函数,参数指定了默认值的构造函数也是默认构造函数,一个类只能有一个默认构造函数 |
这里要说明的是一个类在写了默认构造函数之后就不会自动生成默认的构造函数,如果你写的是带默认参数的构造函数,则其实已经有了默认构造函数,如果在定义一个就会出现在A()就会出错了!看看下面的代码吧!
例如:
#include<iostream> #include<string> using namespace std; class A { public: A() A(){data2=0;data2=0;} A(int a=0,int b=0){data1=a;data2=b;} void display(); private: int data1; int data2; }; void A::display() { cout<<data1<<endl; cout<<data2<<endl; } void main() { A a1; A a2(1,2); a1.display(); a2.display(); } |