【C++入门】缺省参数、函数重载与引用(上)

简介: 【C++入门】缺省参数、函数重载与引用

💞💞 前言

hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹

1. 缺省参数

1.1 缺省参数概念

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。

#include<iostream>
using namespace std;//使用using namespace 命名空间名称引入C++标准
void Func(int a = 0)
 {
  cout<<a<<endl;
 }
 int main()
 {
  Func();     // 没有传参时,使用参数的默认值 
  Func(10);   // 传参时,使用指定的实参
  return 0;
 }

结果如下:

可以看到在定义void Func(int a = 0)时给int a 参数赋值为0;

所以当使用该函数时,如果不传参数:Func(); 就默认传的参数为之前定义时赋值的0;

如果传参数:Func(10); 就正常传参即可;

注意:

  • 缺省参数不能在函数声明和定义中同时出现(写在声明中):
 //a.h
  void Func(int a = 10);
  
  // a.cpp
  void Func(int a = 20)
  {}
  
  // 注意:如果声明与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该用那个缺省值。
  • 缺省值必须是常量或者全局变量;
  • C语言不支持(编译器不支持)缺省参数;

1.2 缺省参数分类

  • 全缺省参数
void Func(int a = 10, int b = 20, int c = 30)
 {
 cout<<"a = "<<a<<endl;
 cout<<"b = "<<b<<endl;
 cout<<"c = "<<c<<endl;
 }

全缺省参数就是指定义函数时将所有的参数都赋值

  • 半缺省参数
void Func(int a, int b = 10, int c = 20)
 {
 cout<<"a = "<<a<<endl;
 cout<<"b = "<<b<<endl;
 cout<<"c = "<<c<<endl;
 }

半缺省参数就是指定义函数时将部分的参数赋值;

注意:半缺省参数必须从右往左依次连续来给出,中间不能有间隔;

2.函数重载

2.1函数重载概念

  • 函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数或类型或 类型顺序)不同,常用来处理实现功能类似数据类型不同的问题。
  • 函数重载的优点是能够提高代码的可读性和可维护性。通过使用同一个函数名来表示一组相关的操作,可以让调用者更容易理解代码的意图,并且减少了代码的重复性。
  • 函数重载的条件是函数名相同,但是参数列表不同。参数列表可以包括参数的个数、类型、顺序等方面的差异。在编译器中,通过函数的参数列表来区分同名的函数,并选择合适的函数进行调用。

例如:

#include<iostream>
using namespace std;
// 1、参数类型不同
int Add(int left, int right)
{
    cout << "int Add(int left, int right)" << endl;
    return left + right;
}
double Add(double left, double right)
{
    cout << "double Add(double left, double right)" << endl;
    return left + right;
}


// 2、参数个数不同
void f()
{
    cout << "f()" << endl;
}
void f(int a)
{
    cout << "f(int a)" << endl;
}



// 3、参数类型顺序不同
void f(int a, char b)
{
    cout << "f(int a,char b)" << endl;
}
void f(char b, int a)
{
    cout << "f(char b, int a)" << endl;
}
int main()
{
    Add(10, 20);
    Add(10.1, 20.2);
    f();
    f(10);
    f(10, 'a');
    f('a', 10);
    return 0;
}

结果如下:

可以看到虽然函数名相同,但是对应不同的参数会调用不同的函数

  • 这里注意,相同类型的参数顺序调换不构成函数重载:
int Add(int left, int right)
{
    cout << "int Add(int left, int right)" << endl;
    return left + right;
}
int Add(int right, int left)
{
    cout << "int Add(int left, int right)" << endl;
    return left + right;
}

结果如下:

  • 当然如果两个函数函数名和参数是一样的,返回值不同是不构成重载的,因为调用时编译器没办法区分。

2.2函数重载原因

  • C语言不支持函数重载的主要原因是它的编译器在进行函数调用时是根据函数名来确定具体调用的函数的,在编译阶段就已经决定了函数的调用方式。而函数重载是指多个函数拥有相同的名称但具有不同的参数列表,编译器无法根据函数名来确定具体调用的函数。因此,C语言无法实现函数重载功能。
  • 而C++是通过函数修饰规则来区分同名的函数,只要参数不同,修饰出来的名字就不一样,就支持了重载。

【C++入门】缺省参数、函数重载与引用(下);https://developer.aliyun.com/article/1496845

相关文章
|
6天前
|
安全 编译器 程序员
【C++初阶】C++简单入门
【C++初阶】C++简单入门
|
6天前
|
编译器 程序员 C语言
C++函数重载
在实际开发中,有时候我们需要实现几个功能类似的函数,只是有些细节不同。例如希望交换两个变量的值,这两个变量有多种类型,可以是 int、float、char、bool 等,我们需要通过参数把变量的地址传入函数内部。在C语言中,程序员往往需要分别设计出三个不同名的函数,其函数原型与下面类似: void swap1(int *a, int *b); //交换 int 变量的值 void swap2(float *a, float *b); //交换 float 变量的值 void swap3(char *a, char *b); //交换 char 变量的
14 4
C++函数重载
|
7天前
|
编译器 Linux C语言
【C++小知识】为什么C语言不支持函数重载,而C++支持
【C++小知识】为什么C语言不支持函数重载,而C++支持
|
11天前
|
存储 安全 编译器
C++入门 | auto关键字、范围for、指针空值nullptr
C++入门 | auto关键字、范围for、指针空值nullptr
32 4
|
5天前
|
安全 编译器 C语言
|
5天前
|
存储 编译器 程序员
C++从遗忘到入门
本文主要面向的是曾经学过、了解过C++的同学,旨在帮助这些同学唤醒C++的记忆,提升下自身的技术储备。如果之前完全没接触过C++,也可以整体了解下这门语言。
|
7天前
|
C++ 容器
C++中自定义结构体或类作为关联容器的键
C++中自定义结构体或类作为关联容器的键
13 0
|
7天前
|
存储 算法 搜索推荐
【C++】类的默认成员函数
【C++】类的默认成员函数
|
6天前
|
存储 安全 编译器
【C++】类和对象(下)
【C++】类和对象(下)
【C++】类和对象(下)
|
5天前
|
编译器 C++
virtual类的使用方法问题之C++类中的非静态数据成员是进行内存对齐的如何解决
virtual类的使用方法问题之C++类中的非静态数据成员是进行内存对齐的如何解决