【C++】入门(上)

本期博客给大家带来的全是干货,慢慢享用吧~

C++入门主要是一些对C语言不足的语法补充,废话不多说直接上干货:

一、C++的输出和输入

1.1 输出

在C++上我们要想在屏幕(控制台)上进行一些内容的输出可以使用关键字:

cout

具体操作:cout << 想要输出的内容

❗注意:使用cout必须包含< iostream >头文件以及按命名空间使用方法使用std ❗注意:<<是流插入运算符

📋下面来进行使用举例:

从中我们可以看出cout可以自动识别类型(字符串、整型等等)

❗注意:endl在这里起到了换行的作用

1.2 输入

在C++上我们要想在标准输入对象(键盘)上进行一些内容的输入可以使用关键字:

cin

具体操作:cin >> 想要输出的内容

❗注意:使用cout必须包含< iostream >头文件以及按命名空间使用方法使用std

❗注意:<<是流插入运算符

下面来进行使用举例:

从中我们可以看出cin可以自动识别类型(字符串、整型等等)

二、缺省参数

2.1 缺省参数概念

📌缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。(注意,给的缺省值必须是一个常量、全局变量或者静态变量)

📋下面来举个栗子


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

int main()
{
    Fun(); // 没有传参时,使用参数的默认值
    Fun(1);// 传参时,使用指定的实参
    Fun(68);// 传参时,使用指定的实参
}

运行结果

2.2 全缺省参数

📌全缺省参数顾名思义函数的参数全部都有缺省值

📋例如


void Fun(int a = 0, int b = 5, int c = 2)//函数参数全部都有缺省值
{
    cout <<"a=" << a << endl;
    cout <<"b=" << b << endl;
    cout <<"c=" << c << endl;
}

运行结果:

根据运行结果,我们可以发现我们可以选择给部分参数传参

❗注意:但是传参时是按顺序一次给参数赋值,不可能跳过某个参数给其之后的参数传参(如上述例子就不可能发生只给a、c赋值不给b赋值的情况)

2.3 半(部分)缺省参数

📌半(部分)缺省参数顾名思义函数的部分参数没有有缺省值

📋举例举例


void Func(int a, int b = 10, int c = 20)//函数的部分参数没有有缺省值
{
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    cout << "c = " << c << endl;
    cout << endl;
}

来看运行结果

❗注意:在定义部分缺省参数函数时,缺省参数必须从右往左依次来给出,不能间隔着给(按以上例子就不能出现a、c有缺省值,b没有缺省值的情况)

❗另外在最后要注意: 缺省参数不能在函数声明和定义中同时出现,要在声明中给出缺省值(如果生命与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该用那个缺省值)

三、函数重载

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

3.1 重载函数的概念

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

📋下面来举个栗子


// 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 func(int a, char b)
{
    cout << "func(int a,char b)" << endl;
}
void func(char b, int a)
{
    cout << "func(char b, int a)" << endl;
}

我们可以看到在此作用域内有add、f和func三个名字的六个函数,仔细观察可以发现add的两个函数的参数类型不同、f的两个函数参数个数不同、func的两个函数参数类型书顺序不同。这三种情况在C++中是可以存在的,并且能根据调用函数所给参数的区别很好来识别函数进行编译运行:

那就会存在一个问题,既然需要来识别参数类型来调用相对应的函数那会不会比C语言慢呢?

💡答案是会的,但是慢的是编译速度而不是运行速度(C++在编译时就要进行对函数参数类型的识别了)

3.2 C++支持函数重载的原理--名字修饰(name Mangling)

为什么C++支持函数重载,而C语言不支持函数重载呢?

这是因为C++和C语言在编译时对函数的处理不同。

📋下面来进行举例:

由于Windows下vs的修饰规则过于复杂,而Linux下g++的修饰规则简单易懂,下面我们使 用了g++演示了这个修饰后的名字:

采用C语言编译器编译后结果:

采用C++编译器编译后结果:

对比一下两种结果我们可以看出gcc的函数修饰后名字不变。而g++的函数修饰后变成【_Z+函数长度 +函数名+类型首字母】。

💡下面可以得出结论:在linux下,采用g++编译完成后,函数名字的修饰发生改变,编译器将函数参 数类型信息添加到修改后的名字中而添加的这些信息就可以很好支持函数重载。


本期博客到这又要结束了,下期会继续对C++入门知识的讲解

敬请期待~

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1e-12

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值