函数重载 订阅
重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个函数完成不同的功能。这就是重载函数。重载函数常用来实现功能类似而所处理的数据类型不同的问题。不能只有函数返回值类型不同。 展开全文
重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个函数完成不同的功能。这就是重载函数。重载函数常用来实现功能类似而所处理的数据类型不同的问题。不能只有函数返回值类型不同。
信息
外文名
overloaded function
程序类型
C++
中文名
重载函数
属    性
特殊函数
重载函数说明
两个重载函数必须在下列一个或两个方面有所区别:1、函数的参数个数不同。2、函数的参数类型不同或者参数类型顺序不同,C++的这种编程机制给编程者极大的方便,不需要为功能相似、参数不同的函数选用不同的函数名,也增强了程序的可读性。C++运算符重载的相关规定如下:(1)不能改变运算符的优先级;(2)不能改变运算符的结合型;(3)默认参数不能和重载的运算符一起使用;(4)不能改变运算符的操作数的个数;(5)不能创建新的运算符,只有已有运算符可以被重载;(6)运算符作用于C++内部提供的数据类型时,原来含义保持不变。
收起全文
精华内容
下载资源
问答
  • 函数重载

    千次阅读 2019-06-07 16:12:34
    自然语言中,一个词可以有多重含义,人们可以通过上下文来判断...函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 顺序)必须不同 #...

    自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真实的含义,即该词被重载了。
    比如:以前有一个笑话,国有两个体育项目大家根本不用看,也不用担心。一个是乒乓球,一个是男足。前
    者是“谁也赢不了!”,后者是“谁也赢不了!”

    函数重载概念:
    函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 顺序)必须不同
    #include
    using namespace std;

    int Add(int left, int right) {
    return left + right;
    }

    double Add(double left, double right) {
    return left + right;
    }

    int Add(int left, double right) {
    return left + right;
    }

    int main() {
    Add(1, 2);
    Add(1.0, 2.0);
    Add(1, 2.0);
    return 0;
    }
    在这里插入图片描述我们都知道C++兼容C语言 那么C语言支持函数重载吗?下面我们来试一下
    #include<stdio.h>

    int Add(int left, int right)
    {
    return left + right;
    }

    double Add(double left, double right)
    {
    return left + right;
    }

    int Add(int left, double right)
    {
    return left + right;
    }

    int main() {
    printf("%d\n", Add(1, 2));
    printf("%d\n", Add(1.0, 2.0));
    printf("%d\n", Add(1, 2.0));
    return 0;
    }
    在这里插入图片描述答案是不可以
    那么问题来了 为什么C++可以而C语言不可以 C语言又为什么不可以 C++为什么可以呢?

    首先我们来看为什么C语言不可以:

    #include<stdio.h>

    int Add(int left, int right);
    //{
    // return left + right;
    //}

    //double Add(double left, double right);
    //{
    // return left + right;
    //}

    //int Add(int left, double right);
    //{
    // return left + right;
    //}

    int main() {
    printf("%d\n", Add(1, 2));
    return 0;
    }
    在这里插入图片描述我们可以看到C语言当中调用函数会把函数名字修改成前面加_(Add修改成_Add);
    而当同时有两个函数名字都是Add时,编译器就会无法判断你调用的是哪个函数就会报错

    为什么C++可以
    #include
    using namespace std;

    int Add(int left, int right);
    //{
    // return left + right;
    //}

    double Add(double left, double right);
    //{
    // return left + right;
    //}

    int Add(int left, double right);
    //{
    // return left + right;
    //}

    int main() {
    cout << Add(1, 2) << “\n” << endl;
    cout << Add(1.0, 2.0) << “\n” << endl;
    cout << Add(1, 2.0) << “\n” << endl;
    return 0;
    }
    在这里插入图片描述而在C++中,函数的名字被修改成了(?Add@@YAHHH@Z),而HHH这三个字母分别是函数的返回值类型,第一个参数的类型,第二个参数的类型,所以即使函数名字一样,但是是要参数类型或者函数返回值类型不一样,那么C++就会把你当成两个名字不同的函数来区分。

    展开全文
  • C++支持函数重载,C语言不支持函数重载的原因? 函数重载:在同一作用域内,一组具有不同参数列表的同名函数。通常情况,这组函数具有相似的功能,函数重载有效解决了只由于参数类型不同而造成的函数名数量膨胀问题...

     

    C++支持函数重载,C语言不支持函数重载的原因?

    函数重载:在同一作用域内,一组具有不同参数列表的同名函数。通常情况,这组函数具有相似的功能,函数重载有效解决了只由于参数类型不同而造成的函数名数量膨胀问题。

    而C++支持函数重载,C不支持函数重载的原因是:C++在编译过程中对函数的重命名规则是:函数名+参数类型(有时候还有作用域、返回类型),因此使得重载函数在重命名后函数名具有唯一性,而C语言在编译过程中的命名规则是:_函数名,这将使得函数名没有唯一性,无法区分,因此C++支持函数重载,C不支持函数重载。

    需要注意的是:参数本身是不是const对函数重载没有影响,影响的参数指向的类型。

    如以下这两对都不是函数重载:

    A:int cal(int a, int b); int cal(int const a, int const b);

    B:int cal(int* a, int*b);int cal(int* const a, int* const b);

    而以下这一对是函数重载:

    A:int cal(int* a,int* b);int cal(const int* a, const int* b)

     
     
     
    展开全文
  • kotlin 构造函数重载 构造函数重载 (Constructor Overloading) A Kotlin class has a primary constructor and one or more secondary constructors. When a class has more than one constructor, it will be known...

    kotlin 构造函数重载

    构造函数重载 (Constructor Overloading)

    A Kotlin class has a primary constructor and one or more secondary constructors. When a class has more than one constructor, it will be known as constructor overloading.

    Kotlin类具有一个主构造函数和一个或多个辅助构造函数。 当一个类具有多个构造函数时,将称为构造函数重载。

    Kotlin中用于构造函数重载的程序 (Program for constructor overloading in Kotlin)

    package com.includehelp
    
    //declare Class with Parameterized primary constructor
    class ConstructorOverloading(len:Int){
    
        //Init block, executed when class is instantiated, 
        //before secondary constructor body execution
        init {
            println("Init Block  : $len")
        }
    
        //Secondary Constructor, 
        //delegate primary constructor with 'this' keyword
        constructor() : this(10) {
            println("Secondary Constructor No Parameter")
        }
    
        //Parameterized Secondary Constructor, 
        //delegate primary constructor with 'this' keyword
        constructor(name:String):this(name.length){
            println("Secondary Constructor with One Parameter  : $name")
        }
    
        //Parameterized Secondary Constructor with two parameter,
        //call same class non Parameterized secondary constructor 
        //using 'this()'
        constructor(a:Int, b:Int) : this() {
            println("Secondary Constructor With Two Parameter [$a, $b]")
        }
    }
    
    
    //Main Function, Entry Point of Program
    fun main(args:Array<String>){
    
        //Create instance of class , with Primary Constructor
        ConstructorOverloading(100)
    
        //Create instance of class, 
        //with no argument secondary constructor
        ConstructorOverloading()
    
        //Create instance of class, 
        //with one argument secondary constructor
        ConstructorOverloading("India")
    
        //Create instance of class, 
        //with two argument secondary constructor
        ConstructorOverloading(10,20)
    }
    
    

    Output:

    输出:

    Init Block  : 100
    Init Block  : 10
    Secondary Constructor No Parameter
    Init Block  : 5
    Secondary Constructor with One Parameter  : India
    Init Block  : 10
    Secondary Constructor No Parameter
    Secondary Constructor With Two Parameter [10, 20]
    
    
    

    翻译自: https://www.includehelp.com/kotlin/example-of-constructor-overloading.aspx

    kotlin 构造函数重载

    展开全文
  • C++函数重载

    2021-03-31 12:37:10
    函数重载概述 定义:函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数 作用:减少函数名数量,提高复用性 函数重载的条件 1.同一作用域下 2.函数名称相同 3.函数...

    函数重载概述

    定义:函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数
    作用:减少函数名数量,提高复用性

    函数重载的条件

    1.同一作用域下
    2.函数名称相同
    3.函数参数类型不同,或者个数不同,或者顺序不同
    注意:函数返回值不同不能当做重载条件
    示例:

    #include<iostream>
    using namespace std;
    void test()
    {
    	cout << "1.调用test()" << endl;
    }
    void test(int a)
    {
    	cout << "2.调用test(int)" << endl;
    }
    void test(double a)
    {
    	cout << "3.调用test(double)" << endl;
    }
    void test(int a,double b)
    {
    	cout << "4.调用test(int,double)" << endl;
    }
    void test(double a, int b)
    {
    	cout << "5.调用test(double,int)" << endl;
    }
    int main()
    {
    	test();//调用无参数的1
    	test(1);//调用参数类型为int的2
    	test(1.00);//调用参数类型double的3
    	test(1, 1.00);// 调用参数类型int,double的4
    	test(1.00, 1);// 调用参数类型double,int的5
    
    
    	return 0;
    }
    

    运行结果:
    在这里插入图片描述
    这五个test函数都处在全局作用域下,所以作用域相同。函数名都为test,所以函数名相同。不同的是参数类型不同(例如test函数2,3),参数个数不同(例如test函数1,2),参数顺序不同(例如test函数4,5)。这就满足了函数重载的条件。

    函数重载的注意事项

    1.引用作为重载条件

    #include<iostream>
    using namespace std;
    //函数参数类型不同可以发生重载
    void test(int &a)
    {
    	cout << "调用test(int &a)" << endl;//如果传入100,那么等价于int &a=100。但引用必须为合法内存空间(栈区或堆区),而100位于常量区。
    }
    int test(const int &a)
    {
    	cout << "调用test(const int &a)" << endl;//当传入100时,const int &a=100;加入const编译器会优化,创建一个临时的数据让a指向它。
    }
    int main()
    {
    	int a = 100;
    	test(a);//传入a为变量,优先调用无const的函数
    	test(100);//常量引用接收常量
    	return 0;
    }
    

    2.当函数重载有默认函数时

    #include<iostream>
    using namespace std;
    void test(int a,int b=20)//当传入10时,将10赋值给a,b为默认值20.
    {
    	cout << "调用test(int a,int b=10)" << endl;
    }
    void test(int a)
    {
    	cout << "调用test(int a)" << endl;
    }
    int main()
    {
    	//test(10);传入为10时,两个函数都能调用,产生二义性,系统报错。
    	test(20, 10);//当传入20,10时,将20赋值给a,10赋值给b,调用函数test(int a,int b=20)
    	return 0;
    }
    
    展开全文
  • 1.对双目运算符而言,成员函数重载运算符的函数参数表中只有一个参数,而用友元函数重载运算符函数参数表中含有两个参数。  对单木运算符来说,成员函数重载运算符的函数参数表中没有参数,而用友元函数重载运算符...
  • C++函数重载系列第6篇,main函数能否重载?
  • 函数重载和const形参的函数重载

    千次阅读 2014-09-04 22:09:34
    1、函数重载和重复声明的区别 如果两个函数声明的返回类型和形参表完全匹配,则将第二个函数声明视为第一个的重复声明。如果两个函数的形参表完全相同,但返回类型不同,则第二个声明是错误的: Record ...
  • C语言实现函数重载

    千次阅读 2020-07-03 13:48:18
    文章目录C语言实现函数重载一、C++是如何实现函数重载的二、C++函数的命名规则三、C语言实现函数重载1.可变参数2.函数指针实现参数的重载3.实现参数类型的重载4.完整版 一、C++是如何实现函数重载的 C++ 实现函数...
  • C++函数重载系列第3篇,const关键字详解
  • python中实现函数重载

    千次阅读 2020-05-23 16:28:45
    python中实现函数重载 函数重载指对一个同名的函数,可以传不同类型的参数,然后进行不同的操作。python默认不支持函数重载,因为下边的同名函数会覆盖上边的函数,但是我们可以借助functools中singledispatch实现...
  • MATLAB函数重载

    2019-06-26 17:24:39
    函数重载 在 MATLAB 中,函数重载不能像 C++ 一样通过不同的参数类型进行重载,而要在函数体内实现。 简单的说就是“伪重载”,用 if 判断,当输入为什么时怎么样。 nargin nargin 为调用函数时输入的参数...
  • 先写测试代码 #include&lt;iostream&gt; using namespace std; int add(int a, int b); char add(char a, char b); int main() { int c=add(1, 2);...首先看c++中的函数重载 函数重载的概念:C++允许...
  • 函数重载中,多个函数可以具有相同的方法名但参数的数量或类型不同。但是在函数重写的情况下,多个函数将具有相同的方法名和参数数量。 函数重载函数重载包含相同的函数名称,该函数根据参数的数量和类型执行...
  • 函数重载总结

    2016-05-06 13:13:27
    函数重载 函数重载的定义是:在相同的作用域中,如果函数具有相同名字而仅仅是形参表不同,此时成为函数重载。注意函数重载不能基于不同的返回值类型进行重载。 注意函数重载中的“形参表”不同,是指本质不同,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 56,669
精华内容 22,667
关键字:

函数重载