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 }
  • 相关阅读:
    巴洛克式和哥特式的区别
    推荐阅读书籍,是时候再行动起来了。
    AtCoder ABC 159F Knapsack for All Segments
    AtCoder ABC 159E Dividing Chocolate
    AtCoder ABC 158F Removing Robots
    AtCoder ABC 158E Divisible Substring
    AtCoder ABC 157F Yakiniku Optimization Problem
    AtCoder ABC 157E Simple String Queries
    AtCoder ABC 157D Friend Suggestions
    AtCoder ABC 156F Modularness
  • 原文地址:https://www.cnblogs.com/denggelin/p/5644678.html
Copyright © 2011-2022 走看看