c++中的函数重载

原创 2015年08月02日 22:34:20

c++中的函数重载

  • 什么是函数重载
    重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,这组函数被称为重载函数。

  • 函数重载的作用
    重载函数常用来实现功能类似而所处理的数据类型不同的问题,能减少函数名的数量,提高程序的可读性。

  • 重载函数的构成说明
    定义一个类,添加一系列函数名相同的函数,但参数形式各有不同,测试一下能否构成重载。

#include <iostream>
using namespace std;

class Base
{
    public:
        void func(int a){cout << "this is "<< a <<endl;}
        void func(string a){cout << "this is " << a <<endl;}    
        void func(int a,int b){cout << "this is "<< a <<endl;}
        void func(int a,string b){cout << "this is "<< a <<endl;}


        //错误的重载1
        int  func(int a,int b){cout << "this is "<< a <<endl;}  
        //错误的重载2
        void  func(const int a,int b){cout << "this is "<< a <<endl;}
        //错误的重载3
        void func(int b,int a){cout << "this is "<< a <<endl;}          
};

int main()
{
    Base b;
    b.func(22);
    b.func("test");

    return 0;
}                                                        

  以上程序执行编译会报错:

‘void Base::func(int)’ cannot be overloaded ...

  即函数不能构成重载,原因分别为:

  • 返回值不同,不能构成函数重载。
    对应错误1:想想也是,执行函数调用时,只知道传入的参数,是无法预知要返回什么类型的值的,所以自然不知道该调用哪一个函数。

  • 形参是const修饰的常值不能构成函数重载。
    对应错误2:说明编译时二者对应的符号是一致的。
    参数是int a和 int & a 不能构成重载;

注意,如果形参是引用或指针是可以构成重载的。即下面的情况:

class Base
{
    public:
        void func(int &a){cout << "this is "<< a <<endl;}
        void func(const int &a){cout << "this is "<< a <<endl;}
}
  • 参数类型相同,只是命名不同,不能构成重载。
class Base
{
    public:
        void func(int a){cout << "this is "<< a <<endl;}
        void func(int b){cout << "this is "<< b <<endl;}
}
  • 备注

  重载是允许有多个同名的函数,这些函数的参数列表不同,即参数个数不同,或者类型不同,或者两者都不同。编译器会根据这些函数的不同列表,将同名的函数的名称做修饰,从而生成一些不同名称的预处理函数,来实现同名函数调用时的重载。

  函数重载是c++比较重要的概念,涉及比较偏门的使用场景,比如参数有const修饰,就会引来比较蛋疼的疑惑,这里整理的还不够充分,后期将逐步进行整理和完善。

版权声明:本文为csdn博主[applebite](http://blog.csdn.net/applebite) 原创文章,转载请注明出处,侵权必究。 微信添加公众号:qi_chuang 或 猎奇创新平台

C++ 函数重载 详解

在实际开发中,有时候我们需要实现几个功能类似的函数,只是有些细节不同。例如希望交换两个变量的值,这两个变量有多种类型,可以是 int、float、char、bool 等,我们需要通过参数把变量的地址传...
  • zhanghow
  • zhanghow
  • 2016年12月12日 21:20
  • 12596

c++函数重载和函数模板

上学期学了C++,可是忘得差不多了 一、函数重载 1、函数重载挺简单的,按我的理解就是相同功能的函数可以用相同的名字,通俗点就是中文里的我能做什么,比如做饭,做菜,虽然做的东西不一样,但是...
  • u011282704
  • u011282704
  • 2014年09月24日 00:16
  • 788

C++ 函数模板(十四)--template 泛型函数模板、通用函数、重载模板

#include #include using namespace std; //函数模板,typename 等价于 class template void test(AnyType &a, A...
  • Jason_chen13
  • Jason_chen13
  • 2016年09月07日 12:01
  • 735

C++函数重载(3) - 函数重载中的const关键字

const可用于重载成员函数 参考下面程序的输出: #include using namespace std; class Test { protected: int x; p...
  • shltsh
  • shltsh
  • 2015年05月24日 00:50
  • 1633

C++函数重载(2) - 不能被重载的函数

C++中,符合下面这些情况的函数不能被重载.
  • shltsh
  • shltsh
  • 2015年05月23日 23:26
  • 1287

【C++拾遗】 C++函数重载、重写、重定义的区别

函数重载(overload) 函数重载是指在一个类中声明多个名称相同但参数列表不同的函数,这些的参数可能个数或顺序,类型不同,但是不能靠返回类型来判断。特征是: (1)相同的范围(在同一个作用域中);...
  • Xiejingfa
  • Xiejingfa
  • 2015年09月16日 17:00
  • 4580

C++学习笔记22,普通函数重载(1)

转载请注明出处: 该博文仅用于交流学习,请慎用于任何商业用途,本博主保留对该博文的一切权利。 博主博客:http://blog.csdn.net/qq844352155 什么是方法重载? 方法重载也...
  • guang_jing
  • guang_jing
  • 2014年06月16日 11:12
  • 1437

C++学习笔记之 函数重载和函数指针在一起

笔记: 当使用重载函数名对函数指针进行赋值时,根据重载规则挑选与指针参数列表一致的候选者。严格匹配候选者的函数类型与函数指针的函数类型。 int func(int x){ return x; } i...
  • patkritLee
  • patkritLee
  • 2016年02月18日 20:54
  • 697

C++重载函数与重载运算符

C++ 重载运算符和重载函数 C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声...
  • qq_28796345
  • qq_28796345
  • 2016年04月29日 16:30
  • 733

C++中重载和覆盖的区别

一. 重载1.
  • cgl1079743846
  • cgl1079743846
  • 2014年05月28日 11:29
  • 7648
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c++中的函数重载
举报原因:
原因补充:

(最多只允许输入30个字)