【c++入门】打开新世界大门之初遇c++

embedded/2024/11/22 20:06:26/

前言

在学习了c语言,初阶数据结构后,我们正式走进c++世界大门

目录

前言

一、认识c++

二、缺省参数

三、函数重载

四、引用

4.1什么是引用?

4.2 使用场景

4.2.1 做参数

4.2.2做函数返回值

4.3引用和指针的区别

五、内联函数

六、auto关键字

6.1使用细则

1. auto与指针和引用结合起来使用

2.同一行定义多个变量

3.不能推导的场景


一、认识c++

我们刚在学c语言的时候,第一节课敲得第一次代码 hello world,我们用c++打出,如下

#include<iostream>
using namespace std;
int main()
{cout<<"hello world"<<endl;return 0;
}

std 是c++标准库的命名空间

在上述代码中,用cout标准输出对象的和cin标准输入对象,相当于printf和scanf。cout和cin是全局的流对象,endl是特殊的符号,表示换行输出,都包含在头文件<iostream>种,

二、缺省参数

缺省参数是 声明或定义函数时 为函数的 参数指定一个缺省值 。在调用该函数时,如果没有指定实
参则采用该形参的缺省值,否则使用指定的实参。

示例如下:

#include<iostream>
using namespace std;
int add(int a=0)
{cout<<a<<endl;
}
int main()
{    add();//没有传参时,使用参数的默认值add(10);//传参时,使用指定的实参return 0;
}

三、函数重载

所谓的函数重载其实是函数的一种特殊情况,在c++中,允许同一作用域中声明功能类似的同名函数,这些函数的形参列表(即参数个数、类型、类型顺序)不同。

示例代码如下:

#include<iostream>
using namespace std;
//参数类型不同
int add(int a,int b)
{return a+b;
}
double add(double a,double b)
{return a+b;
}
//参数个数不同
void dif()
{cout<<"wof wof"<<endl;
}
void dif(int m)
{cout<<"dif(int m)"<<endl;
}
//参数类型顺序不同
void sam(int x,char y)
{cout<<"sam(int x,char y)"<<endl;
}
void sam(chary,int x)
{cout<<"sam(chary,int x)"<<endl;
}

四、引用

4.1什么是引用?

引用是一个已存在的变量的别名,并不是一个新的变量,他和他引用的变量共用一个内存空间。

类型& 引用变量名(对象名) = 引用实体;

示例如下:

int m=10;

int &m1=m;

4.2 使用场景

4.2.1 做参数

示例如下:

void change(int& a,int& b)
{int tmp=a;a=b;b=tmp;
}

4.2.2做函数返回值

int& res()
{static int n=0;n++;return n;
}

4.3引用和指针的区别

1. 引用概念上定义一个变量的别名,指针存储一个变量地址。
2. 引用 在定义时 必须初始化 ,指针没有要求
3. 引用 在初始化时引用一个实体后,就 不能再引用其他实体 ,而指针可以在任何时候指向任何 一个同类型实体
4. 没有 NULL 引用 ,但有 NULL 指针
5. sizeof 中含义不同 引用 结果为 引用类型的大小 ,但 指针 始终是 地址空间所占字节个数 (32
位平台下占 4 个字节 )
6. 引用自加即引用的实体增加 1 ,指针自加即指针向后偏移一个类型的大小
7. 有多级指针,但是没有多级引用
8. 访问实体方式不同, 指针需要显式解引用,引用编译器自己处理
9. 引用比指针使用起来相对更安全
1、语法概念上,引用就是个别名,没有独立空间,和引用实体公用一个空间
2、在底层实现上是有空间的,因为 引用时按照指针方式来实现

五、内联函数

inline 修饰 的函数叫做内联函数, 编译时 C++ 编译器会在 调用内联函数的地方展开 ,没有函数调 用建立栈帧的开销,内联函数提升程序运行的效率。
示例如下:
inline int add(int a,int b)
{return a+b;
}int main()
{int sum=0;sum=add(1,2);return 0;
}

特性:

1. inline 是一种 以空间换时间 的做法,如果编译器将函数当成内联函数处理,在 编译阶段,会
用函数体替换函数调用 ,缺陷:可能会使目标文件变大,优势:少了调用开销,提高程序运
行效率。
2. inline 对于编译器而言只是一个建议,不同编译器关于 inline 实现机制可能不同 ,一般建
议:将 函数规模较小 ( 即函数不是很长,具体没有准确的说法,取决于编译器内部实现 )
是递归、且频繁调用 的函数采用 inline 修饰,否则编译器会忽略iinline特性
3. inline 不建议声明和定义分离,分离会导致链接错误。因为 inline 被展开,就没有函数地址
了,链接就会找不到,应将生命和定义放在同一文件中
示例如下:
//f.h文件下
#include<iostream>
using namespace std;
inline void f(inti)
{cout<<i<<endl;
}

六、auto关键字

早期C/C++auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,

C++11 中,标准委员会赋予了 auto 全新的含义即: auto 不再是一个存储类型指示符,而是作为一
个新的类型指示符来指示编译器, auto 声明的变量必须由编译器在编译时期推导而得.

6.1使用细则

1. auto与指针和引用结合起来使用

auto 声明指针类型时,用 auto auto* 没有任何区别,但用 auto 声明引用类型时则必须
加&
int main()
{int x = 10;auto a = &x;auto* b = &x;auto& c = x;
}

2.同一行定义多个变量

auto a=2,b=3;

auto x=1,c=5.2;//该行代码会编译失败,因为cd的初始化表达式类型不同

3.不能推导的场景

1、auto不能作为函数的参数

// 此处代码编译失败, auto 不能作为形参类型,因为编译器无法对 a 的实际类型进行推导
void Test ( auto a )
{}

2、auto不能直接用来声明数组

面试题

宏的优缺点:

优点:

1. 增强代码的复用性。
2. 提高性能。
缺点:
1. 不方便调试宏。(因为预编译阶段进行了替换)
2. 导致代码可读性差,可维护性差,容易误用。
3. 没有类型安全的检查
C++ 有哪些技术替代宏
1. 常量定义 换用 const enum
2. 短小函数定义 换用内联函数

http://www.ppmy.cn/embedded/139694.html

相关文章

FIFO和LRU算法实现操作系统中主存管理

FIFO&#xff0c;用数组实现 1和2都是使用nextReplace实现新页面位置的更新 1、不精确时间&#xff1a;用ctime输出运行时间都是0.00秒 #include <iostream> #include <iomanip> #include<ctime>//用于计算时间 using namespace std;// 页访问顺序 int pa…

基于微信小程序的河池旅游设计与实现

一、前言 随着移动互联网的快速发展&#xff0c;微信小程序以其便捷性、无需安装等优势受到广泛关注。河池拥有丰富的旅游资源&#xff0c;包括独特的自然风光&#xff08;如巴马长寿之乡的山水、宜州下枧河风光等&#xff09;、多彩的民族文化&#xff08;如壮族铜鼓文化、仫佬…

mysqldbcompare 使用及参数详解

限制 该工具将每行的主键读取到数据结构中&#xff0c;然后用于生成每行的校验和。主键和校验和随后被排序并比较&#xff0c;以检测哪些行存在差异。由于这种设计&#xff0c;工具在处理非常大的表&#xff08;许多行&#xff09;时可能会表现出较慢的性能&#xff0c;特别是…

Maven详解

文章目录 Maven详解一、引言二、Maven基础1、Maven安装与配置1.1、下载与安装1.2、配置环境变量1.3、验证安装 2、Maven项目结构 三、Maven依赖管理3.1、依赖配置3.2、依赖范围 四、Maven构建生命周期4.1、常用Maven命令 五、Maven私服5.1、Nexus安装与配置5.1.1、下载与安装Ne…

排序算法:直接插入排序,希尔排序,选择排序,快速排序,堆排序,归并排序

1.直接插入排序 基本思想&#xff1a;把待排序的数按照大小逐个插入到前面已经排序好的有序序列中&#xff0c;直到所有的都插入完为止&#xff0c;得到一个新的有序序列。 如图所示&#xff0c;当插入第i个&#xff08;i>1&#xff09;元素的时候&#xff0c;前面的arr[0]…

wps PPT debug

wps无法调整PPT单元格高度 https://zhidao.baidu.com/question/1801894280933920947.html wps如何自定义母版 可以直接右上角搜母版&#xff0c;然后进入“幻灯片母版”。进入后可以修改各个页版式。 原来好像没有添加占位符的功能&#xff0c;现在看已经有了。但是使用的时…

驰骋资讯高速:Spring Boot汽车新闻网站

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理汽车资讯网站的相关信息成为必然。开发合适…

独家原创 | SCI 1区 高创新预测模型!

往期精彩内容&#xff1a; 时序预测&#xff1a;LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较 全是干货 | 数据集、学习资料、建模资源分享&#xff01; EMD变体分解效果最好算法——CEEMDAN&#xff08;五&#xff09;-CSDN博客 拒绝信息泄露&#xff01;VMD滚动分…