Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1334608
  • 博文数量: 177
  • 博客积分: 3640
  • 博客等级: 中校
  • 技术积分: 1778
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-27 16:51
文章分类

全部博文(177)

文章存档

2014年(1)

2013年(10)

2012年(3)

2011年(163)

分类: LINUX

2011-05-26 08:38:17

对于有参数的构造函数,在定义对象时必须给构造函数传递参数。实际情况中,虽然有些构造函数有参数,但其参数是不变的,这就是默认参数的构造函数。此时构造函数的形式如下:

  1. 类名(函数名)(参数1=默认值,参数2=默认值,…) 

构造函数中的参数与普通函数的参数是一样的,所谓的默认参数即为该参数设置一个默认的取值。可以为全部或者部分参数设置默认值。

【示例4.11】 利用前面的point类,用带默认参数的构造函数计算(2,3)、(7,3)、(4,6)到原点的距离。

  1. #include"iostream.h"  
  2. #include"math.h"                //包含头文件  
  3. class point  
  4. {  
  5. private:  
  6.     int x;int y;  
  7. public:  
  8.     float distance()            //类的成员函数  
  9.     {  
  10.         return sqrt(x*x+y*y);  
  11.     }  
  12.     point(int a=2,int b=3)      //默认参数的构造函数  
  13.     {  
  14.         x=a;y=b;  
  15.     }  
  16. };  
  17. void main()  
  18. {  
  19.     point A;                    //全部使用默认值  
  20.     point B(7);                 //只取一个默认值  
  21.     point C(4,6);               //不取默认值  
  22.     cout<"   "<"  "<

输出结果如下:

  1. 3.60555   7.61577  7.2111 

分析:上面的函数中有一个构造函数,并且该构造函数有默认值。在主函数中如果定义对象时不给出参数,则使用默认参数。如果给出部分参数,则把前面的参数改变取值,而后面的参数仍取默认值。当给定参数与形式参数个数相同时,则全部使用实参。

说明:程序中如果定义了构造函数,无论它是否带有参数,系统不会再添加构造函数。因此,如果此时的构造函数带有参数,并且没有指定默认值,那么在创建对象时必须指定参数。

【示例4.12】 利用构造函数的默认参数计算(1,3)、(4,3)两个点到原点的距离。上面的各个点的纵坐标都是3,因此可以采用默认参数。代码如下:

  1. #include"iostream.h"  
  2. #include"math.h"  
  3. class point  
  4. {  
  5. private:  
  6.     int x;int y;  
  7. public:  
  8.     float distance()            //类的成员函数  
  9.     {  
  10.         return sqrt(x*x+y*y);  
  11.     }  
  12.     point(int a,int b=3)        //只要一个默认值的构造函数  
  13.     {  
  14.         x=a;y=b;  
  15.     }  
  16. };  
  17. void main()  
  18. {  
  19.     point A(1);                 //使用默认值  
  20.     point B(4);                 //使用默认值  
  21.     cout<"   "<

分析:上面的程序是部分参数使用默认值的例子。当使用部分默认参数时,应该把拥有默认参数的参数放在参数列表的最右边,此时传递实参时可以正确地得到参数。

注意:如果将默认参数设置在参数列表的左侧,例如point(int a=3,int b),此时系统会报错。

阅读(4525) | 评论(0) | 转发(0) |
0

上一篇:Qt Event

下一篇:QScrollArea

给主人留下些什么吧!~~