c++入门学习②

本文详细解释了C++中的存储类定义、数字运算、函数参数、重载规则、引用概念以及注意事项,包括默认参数、函数占位、函数重载与引用作为重载条件的情况。后续将探讨类和对象的内容。
摘要由CSDN通过智能技术生成

目录

前言:

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++中有很多内置函数供程序员使用,这里介绍一类数学函数:头文件为:<cmath>

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

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

c++引用:

传送门: 

c++引用-CSDN博客

函数提高:

1.函数形参默认值:

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

注意事项:

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

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

2.函数占位参数:

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

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

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

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

3.函数重载:

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

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

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

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

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

注意事项:
如果引用作为重载条件:
#include<iostream>
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<iostream>
using namespace std;
void fun(int a,int b=10)
{
    cout<<a+b;
}
void fun(int a)
{
     cout<<a;
}
int main(){
    fun(10);//无法判断是哪个函数
}

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

结语:

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

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

  • 24
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值