• C++的缺省参数、函数重载和引用


    缺省参数

    缺省参数是声明或定义函数时为函数的参数指定⼀个缺省值。在调⽤该函数时,如果没有指定实参 则采⽤该形参的缺省值,否则使⽤指定的实参,缺省参数分为全缺省和半缺省参数。(有些地⽅把 缺省参数也叫默认参数),要注意的是C++规定半缺省参数必须从右往左依次连续缺省,不能间隔跳跃给缺省值。

    全缺省

    1. #include
    2. namespace HJY
    3. {
    4. int ADD(int a = 1, int b = 1)
    5. {
    6. return a + b;
    7. }
    8. }
    9. int main()
    10. {
    11. std::cout << HJY::ADD() << std::endl;
    12. int a = 0, b = 0;
    13. std::cin >> a >> b;
    14. std::cout << HJY::ADD(a, b) << std::endl;
    15. return 0;
    16. }

    半缺省

    1. #include
    2. namespace HJY
    3. {
    4. int ADD(int a, int b = 1)
    5. {
    6. return a + b;
    7. }
    8. }
    9. int main()
    10. {
    11. int n = 0;
    12. std::cin >> n;
    13. std::cout << HJY::ADD(n) << std::endl;
    14. int a = 0, b = 0;
    15. std::cin >> a >> b;
    16. std::cout << HJY::ADD(a, b) << std::endl;
    17. return 0;
    18. }

    函数重载

    C++⽀持在同⼀作⽤域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者类型不同,但不能是形参相同,函数类型不同。而C语⾔是不⽀持同⼀作⽤域中出现同名函数的。

    1.参数个数不同

    1. #include
    2. void func()
    3. {
    4. std::cout << "void func()" << std::endl;
    5. }
    6. void func(int a)
    7. {
    8. std::cout << "void func(int a)" << std::endl;
    9. }
    10. int main()
    11. {
    12. func();
    13. func(1);
    14. return 0;
    15. }

    2.参数类型不同

    1. #include
    2. void Swap(int a, int b)
    3. {
    4. std::cout << "void Swap(int a, int b)" << std::endl;
    5. }
    6. void Swap(double a, double b)
    7. {
    8. std::cout << "void Swap(double a, double b)" << std::endl;
    9. }
    10. int main()
    11. {
    12. Swap(1, 1);
    13. Swap(1.2, 1.6);
    14. return 0;
    15. }

    还有一个要注意的点是,函数重载时一定要注意缺省参数的使用,会导致程序报错。

    引用

    引用是C++中一种特殊的用法。与指针不同,引⽤不是新定义⼀个变量,⽽是给已存在变量取了⼀个别名,它和它引⽤的变量共⽤同⼀块内存空间。

    1. #include
    2. int main()
    3. {
    4. int a = 0;
    5. std::cin >> a;
    6. //引用
    7. int& b = a;
    8. std::cout << "a=" << &a << ' ' << "b=" << &b << std::endl;
    9. std::cout << "a=" << a << ' ' << "b=" << b << std::endl;
    10. b++;
    11. std::cout << "a=" << a << ' ' << "b=" << b << std::endl;
    12. a++;
    13. std::cout << "a=" << a << ' ' << "b=" << b << std::endl;
    14. return 0;
    15. }

    而且一个变量可以多次引用

    还有一个要注意的点

    引⽤在实践中主要是于引⽤传参和引⽤做返回值中减少拷贝提⾼效率和改变引⽤对象时同时改变被 引⽤对象。引⽤传参跟指针传参功能是类似的,但引⽤传参相对更⽅便⼀些。

    据最简单的例子:

    1. #include
    2. void Swap(int& a, int& b)
    3. {
    4. int tmp = a;
    5. a = b;
    6. b = tmp;
    7. }
    8. int main()
    9. {
    10. int a = 0, b = 0;
    11. std::cin >> a >> b;
    12. Swap(a, b);
    13. std::cout << "a=" << a << ' ' << "b=" << b << std::endl;
    14. return 0;
    15. }

    实现交换一般要用指针传参,学了引用之后,实现这个会更方便一些。引用有引用的有点,但引用不会代替指针,两者各有自己的特点。两者相辅相成。

  • 相关阅读:
    计算机组成原理——指令系统の选择题整理
    图解 | 这就是网络
    代码随想录算法训练营第五十六天 | 动态规划 part 14 | 1143.最长公共子序列、1035.不相交的线、53. 最大子序和(dp)
    怎么样创建私服 nexus --- maven配置文件的各个标签的作用是什么
    Python实现的《芳华》WordCloud词云+LDA主题模型
    Element-UI--<el-switch>的@change回调函数的参数用法
    iOS——UIColor与CGColor与CALayer
    面试题 17.04. 消失的数字
    mysql中的这些日志,你都知道吗?
    VS安装FFmpeg库
  • 原文地址:https://blog.csdn.net/friendhan2005/article/details/140382105