zoukankan      html  css  js  c++  java
  • 3.4函数重载和默认参数

    区别一是参数类型不同,二是参数个数不同

    仅有函数返回值不同也是区分不了重载函数的

     1 #include <iostream>
     2 using namespace std;
     3 
     4 void go(int i, double db)//参数的个数,参数的类型不同,顺序不同,与返回值无关
     5 {
     6 
     7 }
     8 
     9 void go(double db, int i)
    10 {
    11 
    12 }
    13 
    14 void main()
    15 {
    16 
    17     system("pause");
    18 }

    //定义函数指针并初始化

     1 #include <iostream>
     2 using namespace std;
     3 
     4 void go(int a)//参数的个数,参数的类型不同,顺序不同,与返回值无关
     5 {
     6     std::cout << a;
     7 }
     8 
     9 void go(double a)
    10 {
    11     std::cout << a;
    12 }
    13 
    14 void go(double a, int b)
    15 {
    16     std::cout << a << b;
    17 }
    18 
    19 void go(int a, double b)
    20 {
    21     std::cout << a << b;
    22 }
    23 
    24 void main()
    25 {
    26     void(*pgo1)(int a) = go;//定义函数指针并初始化
    27 
    28     void(*pgo2)(double db) = go;
    29 
    30     void(*pgo3)(double a, int b) = go;
    31 
    32     void(*pgo4)(int a, double b) = go;
    33 
    34     printf("%p
    ", pgo1);
    35 
    36     printf("%p
    ", pgo2);
    37 
    38     printf("%p
    ", pgo3);
    39 
    40     printf("%p
    ", pgo4);
    41 
    42     system("pause");
    43 }

    //默认参数可以多于1个,但必须放在参数序列的后部

    //默认参数必须放在右边

    //默认参数中间不允许出现不默认的

     1 #include <iostream>
     2 using namespace std;
     3 
     4 //默认参数必须放在右边
     5 //默认参数中间不允许出现不默认的
     6 void print(int c, int a = 1, int b = 3)//默认参数可以多于1个,但必须放在参数序列的后部
     7 {
     8     std::cout << a << " " << b << " " << c << std::endl;
     9 }
    10 
    11 void main()
    12 {
    13     print(1);
    14 
    15     system("pause");
    16 }

    //error C2668: “print”: 对重载函数的调用不明确

     1 #include <iostream>
     2 using namespace std;
     3 
     4 void print(int c, int a = 1, int b = 3)
     5 {
     6     std::cout << a << " " << b << " " << c << std::endl;
     7 }
     8 
     9 //error C2668: “print”: 对重载函数的调用不明确
    10 
    11 void print(int c)
    12 {
    13 
    14 }
    15 
    16 void main()
    17 {
    18     print(1);
    19 
    20     system("pause");
    21 }

    解决办法:使用命名空间,或者函数指针

    函数指针没有默认参数

    //函数指针没有默认参数,必须全部输入数据

    //函数重载与函数默认参数冲突,需要输入的参数类型不一样,个数不一样,顺序不一样,不会发生错误,否则一定报错

     1 #include <iostream>
     2 using namespace std;
     3 
     4 void print(int c, int a = 1, int b = 3)
     5 {
     6     std::cout << a << " " << b << " " << c << std::endl;
     7 }
     8 
     9 //error C2668: “print”: 对重载函数的调用不明确
    10 
    11 void print(int c)
    12 {
    13 
    14 }
    15 
    16 //函数指针没有默认参数,必须全部输入数据
    17 //函数重载与函数默认参数冲突,需要输入的参数类型不一样,个数不一样,顺序不一样,不会发生错误,否则一定报错
    18 
    19 void main()
    20 {
    21     void(*pt1)(int c, int a, int b) = print;//函数指针
    22 
    23     pt1(100, 1, 2);//函数指针调用,没有默认参数
    24 
    25     system("pause");
    26 }
  • 相关阅读:
    nginxWebUI
    c#通过串口及CAN模块实现上位及下位机通讯
    使用IDEA创建SpringBoot项目出现intellij idea No active profile set, falling back to default profiles: default
    linux服务器创建python环境
    在Linux服务器上安装anaconda
    牛客-小w的魔术扑克【并查集】
    bzoj#4161-Shlw loves matrixI【常系数线性齐次递推】
    CF903G-Yet Another Maxflow Problem【线段树,最大流】
    P4700-[CEOI2011]Traffic【tarjan,dp】
    CF1039D-You Are Given a Tree【根号分治,贪心】
  • 原文地址:https://www.cnblogs.com/denggelin/p/5644678.html
Copyright © 2011-2022 走看看