zoukankan      html  css  js  c++  java
  • C++函数重载遇到了函数默认参数情况

    一、C++中的函数重载

    什么是函数重载?

    我的理解是:

    (1)用一个函数名定义不同的函数;

    (2)函数名和不同参数搭配时函数会有不同的含义;

    举例说明:

     1 #include <stdio.h>
     2 #include <string.h>
     3 
     4 int func(int x)
     5 {
     6     return x;
     7 }
     8 
     9 int func(int a, int b)
    10 {
    11     return a+b;
    12 }
    13 
    14 int func(const char* s)
    15 {
    16     return strlen(s);
    17 }
    18 
    19 int main(int argc,char* argv[])
    20 {
    21     printf("func(3)            = %d
    ",func(3));
    22     printf("func(5,6)          = %d
    ",func(5,6));
    23     printf("func("file cpp") = %d
    ",func("file cpp"));
    24     
    25     return 0;
    26 }

    运行结果:

     

     分析:

    函数的重载在使用时,会根据传入的参数去选择执行对应的函数

    总结:函数重载至少要满足下面的一个条件

    (1)参数个数不同
    (2)参数类型不同
    (3)参数顺序不同
     
    二、C++中的函数默认参数
    举例说明
     1 #include <stdio.h>
     2 
     3 int func(int a, int b = 0)
     4 {
     5     return (a+b);
     6 }
     7 
     8 int main(int argc,char* argv[])
     9 {
    10     printf("func(3)  = %d
    ",func(3));
    11     printf("func(3,2)= %d
    ",func(3,2));
    12 
    13     return 0;
    14 }

    运行结果:

     
    二、当函数重载与默认参数同时出现时
    在刚刚开始学习的时候,分开学习函数重载和默认参数,两种情况都理解了。但是,突然想到如果这两个同时出现会会出现一个什么样的结果呢?
    实例代码:
     1 #include <stdio.h>
     2 
     3 int func(int a)
     4 {
     5     return (a);
     6 }
     7 
     8 int func(int a, int b = 0)
     9 {
    10     return (a+b);
    11 }
    12 
    13 int main(int argc,char* argv[])
    14 {
    15     printf("func(3)  = %d
    ",func(3));
    16     printf("func(3,2)= %d
    ",func(3,2));
    17     printf("test for temp.cpp
    ");
    18     return 0;
    19 }

    写完了后,就在想代码执行后,到底会调用哪一个函数呢?

    结果:

    编译出错,错误信息:error: call of overloaded ‘func(int)’ is ambiguous printf("func(3)  = %d ",func(3));
     
    分析:
    在C++的编译器中,如果出现了函数重载和函数带有默认参数时,编译是会出错的。
     
    总结:
    由于C++的语言特性,与C相比多了很多的特性,但是在这些的特性中又会存在一个相互冲突的部分,函数重载与函数默认参数就是其中一个。
  • 相关阅读:
    ArcGIS学习记录—union、merge及append的区别
    ArcGIS学习记录—属性表的编辑与修改
    ASP.NET应用程序和ASP.NET网站所共有的文件: App_Browsers 等
    C# 文件夹操作
    远程重启服务器
    SQL省市区三级表结构
    c#提出中文首字母
    javascript遍历Json对象个数
    原生javascript添加引用js文件
    简单的div蒙层
  • 原文地址:https://www.cnblogs.com/zou107/p/5730784.html
Copyright © 2011-2022 走看看