‘是瑶呀’c++之函数重载和引用

如有错误欢迎指正

文章目录

前言

一、缺省参数

二、函数重载

三.引用

总结


前言

本文介绍了c++函数的缺省参数和重载,引用

函数重载是为了解决c语言不能有相同的函数名而产生的,常用来处理实现功能类似数据类型

不同的问题。

引用的出现是因为指针有时过于复杂不好理解。


一、缺省参数

1. 半缺省参数必须从右往左依次来给出,不能间隔着给

2. 缺省参数不能在函数声明和定义中同时出现

3.缺省参数不能同时声明和定义,推荐在声明给

缺省值必须是常量

void Func ( int a = 0 )
{
cout << a << endl ;
}
int main ()
{
Func ();     // 没有传参时,使用参数的默认值
Func ( 10 );   // 传参时,使用指定的实参
return 0 ;
}
半缺省
void Func ( int a , int b = 10 , int c = 20 )
{
    cout << "a = " << a << endl ;
    cout << "b = " << b << endl ;
    cout << "c = " << c << endl ;
}
全缺省
void Func ( int a = 10 , int b = 20 , int c = 30 )
{
    cout << "a = " << a << endl ;
    cout << "b = " << b << endl ;
    cout << "c = " << c << endl ;
}

二、函数重载

函数重载是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这

些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型

不同的问题。

#include<iostream>
using namespace std;
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;
}
int main()
{
    Add(10, 20);
    Add(10.1, 20.2);
    
    return 0;
}

1. 为什么c++函数名可以重复而c不可以呢?

因为c是直接用函数名去找,而c++是用修饰过后的函数名去找

c++在编译时会对对函数名进行了修饰

函数名修饰的规则,不同编译器规则不同,我们也不需要掌握,不过修饰出来的名字和参数有关,所以重载需要参数不同

2.那么返回值不同能不能构成重载?为什么?

第一次遇到这个问题时我自然而然的想当然不行了,函数名修饰和参数相关,和返回值不相关,那么问题又来了。

3.如果返回值进了修饰规则,那么返回值不同能不能构成重载?

还是不能,因为这样虽然编译时可以,但调用时却无法区分,因为函数调用时不写返回值,所以没法区分。

三.引用

 引用就是取别名

c++里面会共用符号

int main()
{
    int i = 0;
    int& k = i;//引用
    int j = i;//赋值
    cout << &i << endl;
    cout << &k << endl;
    cout << &j << endl;
    ++k;
    ++j;
    cout << i << endl;
    cout << k << endl;
    cout << j << endl;

    int& l = i;
    int& z = k;
    cout << &l << endl;
    cout << &z << endl;
    int* pi = &i;
    int*& p = pi;
    cout << &i << endl;
    cout << &pi << endl;
    cout << &p << endl;


}

 

从上面的代码可以看出

 赋值和引用是不同的,赋值是j另外开辟了一块空间,然后将i的值拷贝到j。引用没有另开一片空间,只是取了一个别名表示,j的改变不会影响i,k改变i随之改变。

可以给别名取别名,也可以一个变量取多个别名

任何类型都可以取别名


总结

引用的出现增加了代码的可读性,可以有效代替二级指针。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值