小萌新的C++——引用与函数

目录

引用(reference)

定义(左值引用 )

定义(右值引用 )

特点

代码示例 

内联函数(inline)

定义 

特点

 函数默认参数

定义

 特点

代码示例 

函数重载

特点

代码示例 


引用(reference)

就是一片空间的名字
本质上是一种特殊的指针

引用的本质

<type>*const p;//内容可以改变,指向不能改变

作用

函数传参,直接用引用类型,表示实参的空间

定义(左值引用 )

<存储类型><数据类型>&引用名;

int a = 10;

int &r = a;(r,a等价)

定义(右值引用 )

引用一个临时变量

<存储类型><数据类型>&&引用名;

int a = 10;

int &&n = a;

 //把a丢到r这个空间里面调用r相当于调用a和正常使用变量名一样

特点

1、引用必须初始化(不存在NULL)
2、引用在初始化后,不能引用其他空间
3、一个变量可以用多个引用
4、引用不可以引用地址

 引用的两种使用方法

一、引用作为函数参数


二、引用作为函数返回值

        可以在函数外部访问static 变量

        函数可以作为左值使用

代码示例 

eg

#include <iostream>

using namespace std;

void swap (int &a, int &b)
{
    a ^= b;
    b ^= a;
    a ^= b;
}
int main()
{
    int a = 100;
    int b = 1;
    cout << "交换前:" << "a=" << a << ' ' << "b=" << b <<endl;
    swap(a,b);
    cout << "交换后:" << "a=" << a << ' ' << "b=" << b <<endl;


    return 0;
}

ie

返回值也是引用类型的用法

eg

#include <iostream>

using namespace std;


int &left_add(int a)
{
    static int n = a + 1;
    return n;

}
int main()
{


    int &aa = left_add(10) += 100;
    cout << aa << endl;

    return 0;
}

ie

内联函数(inline)

就是一个特殊的函数
类似于宏函数
直接在函数调用的位置,把函数的代码替换进来

 作用

空间换时间

定义 

<inline><数据类型><函数名>(函数参数)

inline void fun()

{

}

特点

1、相当于向计算机申请
2、代码很少,一般为5个语句以下
3、多次调用
4、声明和定义写在一起

与宏函数的区别

共同点:都是代码拷贝
1、内嵌函数需要申请
2、内嵌函数本质上是函数,有错误检查,宏函数是原样替换

 函数默认参数

定义

<数据类型><函数名>(参数<默认值>)

int creat_hero(int hp=100, int mp=100)
{
    
}

在函数声明/实现的时候给形参默认值
如果调用时没传参,就使用默认值,如果传参,就使用调用值。

 特点

1、默认参数必须往前赋值
2、在声明和实现的地方只有一个能写默认参数
3、引用参数,不能有默认值,可以有默认变量

代码示例 

eg

#include <iostream>

using namespace std;

int creat_hero(int hp=100, int mp=100)
{
    cout << "英雄的血量:" << hp  << "  " << "英雄的蓝量:" << mp << endl;
}

int main()
{
    creat_hero();

    return 0;
}

ie

参数默认值的另一种情况

eg

int creat_hero(int hp, int mp=100)
{
    cout << "英雄的血量:" << hp  << "  " << "英雄的蓝量:" << mp << endl;
}

int main()
{

    creat_hero(600);
    return 0;
}

ie

//注意:再给默认参数赋默认值的时候必须从后往前赋值

函数重载

特点

1、函数名相同
2、参数必须不同(数量,类型),得让计算机区分的出来
3、在同一个的名字空间下

//计算机在编译时确定函数参数的地址

代码示例 

eg

#include <iostream>

using namespace std;

void swap (int &a, int &b)
{
    a ^= b;
    b ^= a;
    a ^= b;
}

void swap (char &a, char &b)
{
    a ^= b;
    b ^= a;
    a ^= b;
}

int main()
{
    int a = 100;
    int b = 1;
    cout << "交换前:" << "a=" << a << ' ' << "b=" << b <<endl;
    swap(a,b);
    cout << "交换后:" << "a=" << a << ' ' << "b=" << b <<endl;

    cout <<endl;
    char c = 'a';
    char d = 'b';
    cout << "交换前:" << "c=" << c << ' ' << "d=" << d <<endl;
    swap(a,b);
    cout << "交换后:" << "c=" << c << ' ' << "d=" << d <<endl;

    return 0;
}

ie 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值