C++入门(下)

1.引言

        在一段学习了一段时间的C++后,我感受颇深。今天继上一篇文章,今天我们一起继续来学习C++入门语法。今天学习的内容:①缺省参数②函数重载③引用④内联函数⑤auto关键字


2.缺省参数

        2.1什么是缺省参数

        缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实 参则采用该形参的缺省值,否则使用指定的实参。那么是什么意思呢,我们来看下面的代码与输出结果。

#include<iostream>
using namespace std;

void fun1(int a = 0)
{
	cout << a << endl;
}

int main()
{
	fun1();
	fun1(1);
	return 0;
}

         我们这里看到,第一次调用fun1输出是0,第二次调用的输出是1。那么为什么输出结果是这个呢?我这里解释一下:这个缺省函数就是一个备胎,当我们没有给它传参数的时候,函数调用的时候就使用这个缺省值,但如果传了参数,那么它就不管备胎了,就使用传的这个参数。

        2.2.缺省参数的分类

        缺省参数分为两类,一类是全缺省,另一类是半缺省。顾名思义,全缺省就是全部参数都给了缺省值,而半缺省只给了部分缺省值。

void Func(int a, int b = 10, int c = 20)
{
 cout<<"a = "<<a<<endl;
 cout<<"b = "<<b<<endl;
 cout<<"c = "<<c<<endl;
}

比如这个函数,就是半缺省参数,缺省值必须从右往左给,以为我们传值的时候是从左往右传。


3.函数重载

        3.1.什么重载

        先举个栗子:在我这个等级,谁都不怕。这句话有两种理解,一种是任何人都不惧怕我,另一种是我不惧怕任何人。类似于这样子一词多义就可以认为一个重载。

int Add(int a,int b)
{
return a+b;
}

double Add(double a,double b)
{
return a+b;
}

int main()
{
    int a=1,b=2;
    double c=1.1,d=2.2;
    
    cout<<Add(a,b)<<endl;
    cout<<Add(c,d)<<endl;

    return 0;
}

        如上代码,这两个Add就构成函数重载。 下面在调用的时候会找到匹配的类型进行调用,比如a,b就是调用第一个Add;c,d就是调用第二个Add。

        3.2怎么实现的?

        在C语言编译阶段,会把调用函数编译成一个call指令,在C语言中,这两个函数都会被编译成call xxxxxxAddxxx(这里的x是其他字符),所以C语言没有重载的概念,但是在C++中,这两个函数会被分别编译成: call xxxxiAddiixxx 和 call xxxxxdAddddxxx 所以就可以实现两个函数的不同调用。


4.引用

        土豆你个马铃薯,在日常生活中土豆也可以称作马铃薯,番茄也可以叫作西红柿。正如马铃薯、西红柿,这些都是别名,指代的东西是同一个东西。在C++中也有类似的别名:引用。

int main()
{
    int a = 0;
    int b& = a;
    int b = 2;
    cout<<a<<endl;
    
    return 0;
}

如上代码,最终输出的结果是2。因为这个b是a的别名,对b操作实际上是对a进行操作。比如说你家里有一个番茄,你切了半个西红柿去抄饭,那么你就剩半个番茄。这个引用如同C语言的地址一样,权限只能缩小不能放大。

int main()
{
    const int a = 0;
    int b& = a;
    const int c& = a;
    return 0;
}

如上面的代码,这里的b引用就是失败的,因为它将const变成了常量,这是不被允许的,但是下面的c就是const int 没有改变权限,所以可以引用。

5.auto关键字

        auto关键字就是C++的一块语法糖,这个关键字可以根据右值自动得出数据类型。可以大大方便我们编程。比如:

int main()
{
    int a[10]={0};
    
    for(auto e&:a)
        e=1;

    for(auto e&:a)
        cout<<e<<" ";

    cout<<endl;

    return 0;
}

这样子就可以对数组进行赋值或打印,当然这个也只是缩短了一点点代码长度,看得不太明显。我们举一个后面一点的栗子:

//这里我们需要取迭代器的list的begin节点。
//正常写法
list::iterator<int> it = v.begin();

//auto写法
auto it =v.begin();

如果我们需要大量用到begin节点,那么auto绝对可以节省大量的时间,方便我们的编程


6.结语

        C++入门到这里就结束啦,有什么问题或者错误欢迎评论区讨论呀

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值