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

转载自:http://blog.csdn.net/maojudong/article/details/8172672

构造函数中参数的值既可以通过实参传递,也可以指定为某些默认值,即如果用户不指定实参值,编译系统就使形参取默认值。在构造函数中也可以采用这样的方法来实现初始化。

例9.3的问题也可以使用包含默认参数的构造函数来处理。例9.4 将例9.3程序中的构造函数改用含默认值的参数,长、宽、高的默认值均为10。

在例9.3程序的基础上改写如下:
#include <iostream>
using namespace std;
class Box
{
   public :
   Box(int h=10,int w=10,int len=10); //在声明构造函数时指定默认参数
   int volume( );
   private :
   int height;
   int width;
   int 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; //没有给实参
   cout<<″The volume of box1 is ″<<box1.volume( )<<endl;
   Box box2(15); //只给定一个实参
   cout<<″The volume of box2 is ″<<box2.volume( )<<endl;
   Box box3(15,30); //只给定2个实参
   cout<<″The volume of box3 is ″<<box3.volume( )<<endl;
   Box box4(15,30,20); //给定3个实参
   cout<<″The volume of box4 is ″<<box4.volume( )<<endl;
   return 0;
}
程序运行结果为
The volume of box1 is 1000
The volume of box2 is 1500
The volume of box3 is 4500
The volume of box4 is 9000
程序中对构造函数的定义(第12-16行)也可以改写成参数初始化表的形式:
   Box::Box(int h,int w,int len):height(h),width(w),length(len){ }
可以看到: 在构造函数中使用默认参数是方便而有效的,它提供了建立对象时的多种选择,它的作用相当于好几个重载的构造函数。

它的好处是: 即使在调用构造函数时没有提供实参值,不仅不会出错,而且还确保按照默认的参数值对对象进行初始化。尤其在希望对每一个对象都有同样的初始化状况时用这种方法更为方便。

关于构造函数默认值的几点说明:

  1. 应该在声明构造函数时指定默认值,而不能只在定义构造函数时指定默认值。
  2. 程序第5行在声明构造函数时,形参名可以省略。
  3. 如果构造函数的全部参数都指定了默认值,则在定义对象时可以给一个或几个实参,也可以不给出实参。
  4. 在一个类中定义了全部是默认参数的构造函数后,不能再定义重载构造函数。



  注意1:
   定义对象的时候,不能像下面调用默认的构造函数,编译器会理解为相当于声明了一个返回值为 Box对象的函数  
   Box box0();     
   应该按照这种方法进行调用无参的构造函数
   Box box1; //调用无参的构造函数
   
   普通的函数调用 如A a;   a.func1()  ;则需要带有小括号来调用无参数的函数


   注意2:
   定义了缺省参数的函数后(包括构造函数和成员函数,普通函数),就不能才定结构类似的重载函数了。
如定义了缺省构造函数

   Box(int h=10,int w=10,int len=10); //在声明构造函数时指定默认参数

   //又定义了无参数的构造函数
   Box()
   {
      cout<<"Construcor calling  Box()"<<endl;
   }

则 Box  a;  //定义对象的时候可能调用无参的构造函数,也有可能调用Box(int h=10,int w=10,int len=10); 的缺省形式。产生了二义性,编译器直接报错

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++中,构造函数参数列表用于指定在创建类对象时需要提供的参数构造函数参数位于构造函数的声明和定义中的括号内,用逗号分隔每个参数构造函数参数列表的使用可以有以下几种情况: 1. 默认构造函数:如果没有在类中定义任何构造函数,则编译器会自动生成一个默认构造函数默认构造函数不接受任何参数,因此参数列表为空。 ```cpp class MyClass { public: MyClass() { // 默认构造函数的定义 } }; ``` 2. 带参数构造函数:可以在构造函数参数列表中指定一个或多个参数,以接受在创建对象时传递给构造函数的值。 ```cpp class MyClass { public: MyClass(int value) { // 带一个整数类型参数构造函数的定义 } MyClass(int value1, int value2) { // 带两个整数类型参数构造函数的定义 } }; ``` 3. 初始化成员变量:在构造函数参数列表中,可以使用成员初始化列表来初始化类的成员变量。 ```cpp class MyClass { private: int myValue; public: MyClass(int value) : myValue(value) { // 使用成员初始化列表初始化 myValue 成员变量 } }; ``` 在上述示中,构造函数 `MyClass(int value)` 使用成员初始化列表将传入的 `value` 参数赋值给成员变量 `myValue`。 通过构造函数参数列表,可以在创建对象时传递初始值,并用于对类的成员变量进行初始化。这样可以确保对象在创建时具有正确的初始状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值