【C++】入门(上)

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

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

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++入门知识的讲解

敬请期待~

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: c++