17xie > VC++深入详解 > 2.2.4 函数的重载
背景:                 
[本书目录] [图书首页] [本书讨论区]  
链接地址:http://www.17xie.com/read-36290.html    注册17xie 一起来写书 实现您的出书梦想!

2.2.4  函数的重载

我们希望在构造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)这个函数。

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

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

2int output();

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

2void output(int a);

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

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


字数:1479    最后更新:8个月以前 [03-13 21:27]happyskynet 修改
本页编辑者:happyskynet  
[前一页]:2.2.3 析构函数  [后一页]:2.2.5 this指针
[在本页中加入书签] [收藏本书] [推荐本书]
  17xie论坛 > 本书讨论区 > 本页评论   (共0条)
发表评论

用户名称 匿名发表
评论内容
验证码

关于我们 | 版权声明 | 免责声明 | 诚聘英才 | 联系我们 | 合作伙伴 | 友情链接 | 广告合作 | 提交意见
Copyright © 2007 17xie.com 互联网协同写书平台 京ICP备08002671号