VC++深入详解:函数的重载 (转)


我们希望在构造pt这个对象的同时,传递x坐标和y坐标的值。可以再定义一个构造函数,如例2-8所示。
  例2-8
  #include <iostream.h>
  class point
  {
  public:
  int x;
  int y;
  point()
  {
  x=0;
  y=0;
  }
  point(int a, int b)
  {
  x=a;
  y=b;
  }
  void output()
  {
  cout<<x<<endl<<y<<endl;
  }
  };
  void main()
  {
  point pt(5,5);
  pt.output();
  }
  在这个程序中,有两个构造函数,它们的函数名是一样的,只是参数的类型和个数不一样。这在C语言中是不允许的,而在C++中上述定义是合法的,这就是C++中函数的重载(overload)。当执行main函数中的point pt(5,5)这条语句时,C++编译器将根据参数的类型和参数的个数来确定执行哪一个构造函数,在这里即执行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)的函数。由于调用有歧义,因此这种情况也不能构成函数的重载。

在函数重载时,要注意函数带有默认参数的这种情况。

http://jinshagame.blog.163.com/blog/static/208402213201261732313472/

优质内容筛选与推荐>>
1、ACM: NBUT 1646 Internet of Lights and Switches - 二进制+map+vector
2、[LeetCode]52. Bulls and Cows猜数字游戏
3、诡异案例系列: 无法启动的系统服务
4、飞得更高(四)皮包公司
5、2-date命令


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号