c++入门学习(二)

目录

前言:

1.存储类

c++数字运算及函数

数字定义:

数字运算:

相关的运算符:

相关函数:

运算符的优先级:

c++引用:

函数提高:

1.函数形参默认值:

2.函数占位参数:

3.函数重载:

注意事项:

如果引用作为重载条件:

函数重载和默认参数发生碰撞:

结语:


前言:

上篇文章介绍了c++的一些基本内容,这一篇会接着上文讲解c++的入门内容

注:c++循环、数组、指针和c语言的一样,这篇文章就先不做讲解的(●'◡'●)

上篇传送门:

c++入门学习(一)-CSDN博客


1.存储类

存储类定义 C++ 程序中变量或者是函数的范围和生命周期,这些说明符放置在它们所修饰的类型之前。

  • auto(从 C++ 17 开始,auto 关键字不再是 C++ 存储类说明符)

  • register(从 C++ 17 开始,register 关键字被弃用。)
  • 用于定义存储在寄存器中的局部变量,定义 'register' 并不意味着变量将被存储在寄存器中,它意味着变量可能存储在寄存器中,这取决于硬件和实现的限制。

  • static
  • 当用于修饰局部变量时,可以增加生命周期的范围和全局变量一样
  • 当 static 修饰全局变量时,会使变量的作用域限制在声明它的文件内

  • extern
  • 用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。
  • 外部修饰符如果有两个.c文件,其中一个定义变量i,并用extern修饰,那么在另一个文件中也可以在不定义的情况下使用

  • mutable
  • 说明符仅适用于类的对象,它允许对象的成员替代常量,即mutable 成员可以通过 const 成员函数修改。

  • thread_local (C++11)
  • 使用 thread_local 说明符声明的变量仅可在它在其上创建的线程上访问。 变量在创建线程时创建,并在销毁线程时销毁。 每个线程都有其自己的变量副本。

  • thread_local 说明符可以与 static 或 extern 合并

c++数字运算及函数

数字定义:

依照不同的数据类型定义不同变量,赋值即可。

数字运算:

相关的运算符:

  • 算术运算符
  • =、+、-、*、/、取余%、++(自加)

  • 关系运算符

  • 逻辑运算符
  • && 逻辑与运算符,如果两个操作数都 true,则条件为 true。
    || 逻辑或运算符,如果两个操作数中有任意一个 true,则条件为 true。
    ! 逻辑非运算符,用来逆转操作数的逻辑状态,如果条件为 true 则逻辑非运算符将使其为 false。

  • 位运算符
  • 位运算符作用于位,并逐位执行操作(&、 | 和 ^、~、<<、>>) 
  • &都为非0,才是1
  • |有一个非0,就是1
  • ^相同取0,相反取1
  • ~取反

  • 赋值运算符
  • 基本的运算符和等号结合,有==、+=、-=、!=等赋值运算符,含义也比较简单,具体的参照下表:
  • = 简单的赋值运算符,把右边操作数的值赋给左边操作数
    += 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数
    -= 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数
    *= 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数
    /= 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数
    %= 求模且赋值运算符,求两个操作数的模赋值给左边操作数
    <<= 左移且赋值运算符
    >>= 右移且赋值运算符
    &= 按位与且赋值运算符
    ^= 按位异或且赋值运算符
    |= 按位或且赋值运算符

  • 其他运算符
  • sizeof、三元运算符、&、*、逗号运算符
  • sizeof 返回变量的大小。例如,sizeof(a) 将返回 4,其中 a 是整数。
    Condition ? X : Y 如果 Condition 为真 ? 则值为 X : 否则值为 Y。
    , 会顺序执行一系列运算。整个逗号表达式的值是以逗号分隔的列表中的最后一个表达式的值。
    .(点)和 ->(箭头) 用于引用类、结构和共用体的成员。
    Cast 把一种数据类型转换为另一种数据类型。例如,int(2.2000) 将返回 2。
    &  返回变量的地址。例如 &a; 将给出变量的实际地址。
    * 指向一个变量。例如,*var; 将指向变量 var。

相关函数:

c++中有很多内置函数供程序员使用,这里介绍一类数学函数:头文件为:

c++入门学习(二)_第1张图片

c++入门学习(二)_第2张图片

运算符的优先级(图片源于菜鸟教程):

后缀  () [] -> . ++ - -   从左到右 
一元  + - ! ~ ++ - - (type)* & sizeof  从右到左 
乘除  * / %  从左到右 
加减  + -  从左到右 
移位  << >>  从左到右 
关系  < <= > >=  从左到右 
相等  == !=  从左到右 
位与 AND  从左到右 
位异或 XOR  从左到右 
位或 OR  从左到右 
逻辑与 AND  &&  从左到右 
逻辑或 OR  ||  从左到右 
条件  ?:  从右到左 
赋值  = += -= *= /= %=>>= <<= &= ^= |=  从右到左 
逗号  从左到右 

c++引用:

传送门: 

c++引用-CSDN博客

函数提高:

1.函数形参默认值:

当形参有默认值时,传入参数可以小于实际的形参数量,如果自己传入数据参数就是这个值,否则就是默认参数的值。

注意事项:

如果有一个默认参数,那么从这个位置从左往右所有必去有默认参数,前面位置有没有不影响。

如果函数声明/实现有默认参数,则函数的实现/说明不能有默认参数这是为了防止声明和实现的默认参数不同,编译器不知道到底使用哪一个参数。

2.函数占位参数:

c++中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置

例如:void fun(int a,int){ }

在主函数中如果输入fun(2),错误因为int站立一个位置,如果不填补位置则发生错误

⭐但是如果int后面加上=默认值,则也可以不用传入后面的值

3.函数重载:

函数名可以相同,提高函数名的复用型,但是要满足一定条件:

c++入门学习(二)_第3张图片

当两个函数都相同则会出错,提示函数已经有主体了

参数不一样或者参数的个数不同或顺序不同(这里不是指两个相同的类型的顺序不同,这里一定要不同类型形参的顺序不同)

根据不同的传入参数来判断到底进行哪个函数

注意:函数返回值不能作为函数重载的条件

注意事项:
如果引用作为重载条件:
#include
using namespace std;
void fun(int &a)
{
    cout<<输出int &a调用;
}
void fun(const int &a)
{
     cout<<输出const int &a调用;
}
int main(){
    int a=10;//调用上面代码
    fun(a);
    fun(10);//调用下面代码
}

因为fun(a),a本身就是一个变量,而const修饰导致形参是一个只读的状态,,所以选择上面的fun函数

而fun(10),10不可能作为引用传入上面的函数,上面不合法,而下面的合法,因此选择下面的参数。

函数重载和默认参数发生碰撞:
#include
using namespace std;
void fun(int a,int b=10)
{
    cout<

这里无法判读是哪个函数,因为都满足条件而且都不出错,出现了二义性,会导致程序报错,因此尽量不同时使用,避免这种情况存在。

结语:

感谢观看,欢迎点赞收藏o(* ̄▽ ̄*)ブ

下期预告:⭐c++类和对象

你可能感兴趣的:(c/c++,c++,学习,开发语言)