C++多态与虚拟:函数重载(Function Overloading)

  重载(Overloading):所谓重载是指不同的函数实体共用一个函数名称。例如以下代码所提到的CPoint之中,有两个member functions的名称同为x():

1 class CPoint{
2 
3 public:
4     float x();
5     void x(float xval);
6 
7 };

    其两个member functions实现代码如下:

1 float CPoint::x(){return x;}
2 void  CPoint::x(float xval){_x=xval;}

  函数名称相同,但参数不同(个数不同,型别也不同),实现代码也不相同。C++之所以有function overloading的机制,是为了解决因为数据类型不同而需要设计多个算法相同,但函数名不同的函数代码的问题。举个例子,加法就是加法,如果为了int、float、double、long....各设计出对应的AddInt()、AddFloat()、AddDouble()、AddLong()...等加法函数,我们会觉得很烦锁,不漂亮。如果能够把它们全部都叫做Add(),而我们不管对哪种数据类型做加法运算,都呼叫Add()就好,那么就运算层面来看就清爽多了。至于底层机制,则由编译器根据Add()所获得的参数型别,决定真正该唤起哪一个Add()函数实体。于是,以加法为例,我们可以设计以下四个同名函数:

1 int     Add(int a,int,b);
2 long    Add(long a,long b);
3 double  Add(double a, double b); 
4 float   Add(float a,float b);

  并这样使用之:

1      int    i=Add(3,5);
2      long   l=Add(3L,5L);
3      double d=Add(3.1415926,5.1615926);
4      float  f=Add(3.14,5.14); 

  Function overloading 适用于class member functions (如先前的CPoint::x()),也适用于一般的global functions(如上术的Add()).

       Function overloading 无法适用于函数名称相同,参数也完全相同,只有返回值不同的情况。这种情况将无法通过编译,会出现报错提示:

  error C2556: 'Add' : overloaded functions only differ by return type

  我们已经看到了,所谓的function overloading 只不过是让诸多的函数实体可以采用相同的函数名称,事实上你还是要编写好几份不同(但逻辑十分类式)的函数实现代码。为了能够解决因为数据类型不同而需要设计多个算法相同,但函数名不同的函数代码的问题,比较好的做法是把参数看作只有一种类型。C++ Template 可以办到这一点,我们将在往后的文章来谈这个非常棒的主题。



posted on   阮春义  阅读(151)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

统计

点击右上角即可分享
微信分享提示