C++入门(2)

C++入门

  • 1.缺省参数
    • 1.1. 缺省参数举例和概念
    • 1.2. 函数的传参是从左到右给参数的
    • 1.3.缺省参数分类
    • 1.4. 缺省参数的函数声明与定义
  • 2.函数重载
    • 2.1.函数重载的概念
    • 2.2. 函数重载的情况
    • 2.3.剖析C语言不能函数重载而C++却可以的原因
      • 2.3.1. 编译链接过程
      • 2.3.2. 函数名修饰规则
  • 3.引用
    • 3.1. 引用概念
    • 3.2.引用特性
    • 3.3. 引用做函数参数

1.缺省参数

1.1. 缺省参数举例和概念

C++入门(2)_第1张图片

C++入门(2)_第2张图片
C++入门(2)_第3张图片
**概念:**缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。

1.2. 函数的传参是从左到右给参数的

C++入门(2)_第4张图片
注意:C++函数传参只能是从左到右的,中间不能条过参数,也不能指定给参数传参。
C++入门(2)_第5张图片
C++入门(2)_第6张图片

1.3.缺省参数分类

  • 全缺省参数
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;
}

**注意:**半缺省参数要从右往左的连续缺省,中间不能隔着!
C++入门(2)_第7张图片
C++入门(2)_第8张图片

1.4. 缺省参数的函数声明与定义

缺省参数不能在函数的声明与定义中同时出现。因为:如果生命与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该用那个缺省值。
C++入门(2)_第9张图片
C++入门(2)_第10张图片
C++入门(2)_第11张图片

C++入门(2)_第12张图片
可见,在函数声明的时候使用省缺参数,在函数定义的时候不能使用省缺参数。因为,编译的时候是先找到函数声明的地方的,如果声明没有用省缺参数,当传值少的时候,编译器就会认为这个函数没有省缺参数,参数传值认为过少,编译不通过。所以最好在函数声明的时候使用省缺参数,在函数定义的时候不用。

2.函数重载

**重载解释:**一个词有多个含义或解释;自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真实的含义,即该词被重载了。
比如:以前有一个笑话,国有两个体育项目大家根本不用看,也不用担心。一个是乒乓球,一个是男足。前者是“谁也赢不了!”,后者是“谁也赢不了!”

2.1.函数重载的概念

函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数类型类型顺序)不同,常用来处理实现功能类似数据类型不同的问题

2.2. 函数重载的情况

①参数类型不同
C++入门(2)_第13张图片
②参数个数不同
C++入门(2)_第14张图片
**注意:**存在省缺参数的时候,是构成重载函数的,当是编译器有时候会无法识别多个匹配的函数,从而报错。
C++入门(2)_第15张图片
C++入门(2)_第16张图片
③参数类型的顺序不同
C++入门(2)_第17张图片
注意
①仅参数名字顺序不同,不构成函数重载!
C++入门(2)_第18张图片
②仅是函数的返回值不相同,不构成函数重载!
C++入门(2)_第19张图片

2.3.剖析C语言不能函数重载而C++却可以的原因

2.3.1. 编译链接过程

C++入门(2)_第20张图片
编译的时候找到函数的声明或者直接找到函数的定义;函数的定义查找在链接的过程。
C语言和C++的函数调用的时候是不管函数返回值类型的。

2.3.2. 函数名修饰规则

C语言
C++入门(2)_第21张图片
链接的时候只是看函数的名。
C++
C++入门(2)_第22张图片
C++函数链接的时候看根据函数名修饰规则查找函数的。
综上所述:C++存在函数重载,而C语言不存在。不能根据函数的返回类型不同来判断是否是函数重载,因为函数调用的时候不看函数的返回值类型,在编译的时候,编译器无法识别要调用哪个函数,所以该定义无法通过编译,更不会到链接的步骤。

3.引用

3.1. 引用概念

引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。
C++入门(2)_第23张图片
使用:类型& 引用变量名(对象名) = 引用实体

void TestRef()
{
  int a = 10;
  int& ra = a;//<====定义引用类型
  printf("%p\n", &a);
  printf("%p\n", &ra);
}

注意:引用类型必须和引用实体是同种类型的
C++入门(2)_第24张图片

3.2.引用特性

  1. 引用在定义的时候必须初始化;
  2. 一个变量可以有多个引用;
  3. 引用一旦一个实体,不能在引用其他实体;即后面的相等是赋值。

C++入门(2)_第25张图片

C++入门(2)_第26张图片
C++入门(2)_第27张图片
C++入门(2)_第28张图片

3.3. 引用做函数参数

C++入门(2)_第29张图片

你可能感兴趣的:(C++,c++)