zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    golang GC(二 定位)
    MySQL的安装与配置——详细教程
    js实现关闭浏览器
    解决mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)
    如何将将本地电脑部署成服务器
    Mysql统计每年每个月的数据——详细教程
    博客、笔记
    JAVAWEB实现修改功能
    JAVAWEB实现添加功能
    JavaWeb实现删除功能
  • 原文地址:https://www.cnblogs.com/vranger/p/3093848.html
Copyright © 2011-2022 走看看