设为首页 加入收藏

TOP

2.2.4 函数的重载
2013-10-07 15:20:14 来源: 作者: 【 】 浏览:68
Tags:2.2.4 函数 重载

2.2.4  函数的重载

我们希望在构造pt这个对象的同时,传递x坐标和y坐标的值。可以再定义一个构造函数,如例2-8所示。

例2-8

  1. #include <iostream.h> 
  2. class point  
  3. {  
  4. public:  
  5.      int x;  
  6.      int y;  
  7.      point()  
  8.      {  
  9.           x=0;  
  10.           y=0;  
  11.      }  
  12.      point(int a, int b)  
  13.      {  
  14.           x=a;  
  15.           y=b;  
  16.      }  
  17.      void output()  
  18.      {  
  19.           cout<<x<<endl<<y<<endl;  
  20.      }  
  21. };  
  22.  
  23.  
  24. void main()  
  25. {  
  26.      point pt(5,5);  
  27.      pt.output();  
  28. }  

在这个程序中,有两个构造函数,它们的函数名是一样的,只是参数的类型和个数不一样。这在C语言中是不允许的,而在C++(www.cppentry.com)中上述定义是合法的,这就是C++(www.cppentry.com)中函数的重载(overload)。当执行main函数中的point pt(5,5)这条语句时,C++(www.cppentry.com)编译器将根据参数的类型和参数的个数来确定执行哪一个构造函数,在这里即执行point(int a, int b)这个函数。

重载构成的条件:函数的参数类型、参数个数不同,才能构成函数的重载。分析以下两种情况,是否构成函数的重载。

第一种情况:(1)void output();

(2)int output();

第二种情况:(1)void output(int a,int b=5);

(2)void output(int a);

对于第一种情况,当我们在程序中调用output()函数时,读者认为应该调用的是哪一个函数呢?要注意:只有函数的返回类型不同是不能构成函数的重载的。

对于第二种情况,当我们在程序中调用output(5)时,应该调用的是哪一个函数呢?调用(1)的函数可以吗?当然是可以的,因为(1)的函数第二个参数有一个默认值,因此可以认为调用的是第一个函数;当然也可以是调用(2)的函数。由于调用有歧义,因此这种情况也不能构成函数的重载。在函数重载时,要注意函数带有默认参数的这种情况。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇2.2.5 this指针 下一篇2.2.7 虚函数与多态性、纯虚函数..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: