C++中构造函数默认参数使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chengqiuming/article/details/89738227

一 代码

#include <iostream>
using namespace std;
class Box{
public:
    Box(int h=2,int w=2,int l=2);//在声明构造函数时指定默认参数
    int volume();
private:
    int height,width,length;
};
Box::Box(int h,int w,int len){//在定义函数时可以不指定默认参数
    height=h;
    width=w;
    length=len;
}
int Box::volume(){
    return height*width*length;
}
int main(){
    Box box1(1);//不指定第2、3个实参
    cout<<"box1's volume: "<<box1.volume()<<endl;
    Box box2(1,3);// 不指定第3个实参
    cout<<"box2's volume: "<<box2.volume()<<endl;
    Box box3;
    cout<<"box3's volume:"<<box3.volume()<<endl;
    return 0;
}

二 运行

[root@localhost charpter02]# ./0210
box1's volume: 4
box2's volume: 6
box3's volume:8

三 说明

该实战中,定义了一个带默认参数的构造函数,是在声明时指定默认参数,而定义时则可以不指定默认参数。定义对象时,可以传0~3个参数,传了几个参数,就替换前面的几个参数,其余都使用默认参数。

使用默认参数的好处在于:调用构造函数时就算没有提供参数也不会出错,且对每一个对象能有相同的初始化状态。

不过,应该在声明构造函数默认值时指定默认参数值,而不能只在定义构造函数时指定默认参数值。如果构造函数中的参数全指定了默认值,则在定义对象时,可给一个实参或多个实参,也可不给实参。

一个类中如果定义了全是默认参数的构造函数后,就不能再定义重载构造函数了。

假设Box类中定义了3个构造函数

Box(int =10,int=3,int=5);
Box();
Box(int,int);

若有以下定义语句,则会出现问题

Box box1;              //是应该调用第1个构造函数还是应该调用第2个构造函数
Box box2(13,18);        //是应该调用第2个构造函数还是应该调用第3个构造函数

猜你喜欢

转载自blog.csdn.net/chengqiuming/article/details/89738227