【C++】入门基础

前言:C++是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式等。熟悉C语言之后,对C++学习有一定的帮助,因此从今天开始们将进入C++的学习。

💖 博主CSDN主页:卫卫卫的个人主页 💞
👉 专栏分类:高质量C++学习 👈
💯代码仓库:卫卫周大胖的学习日记💫
💪关注博主和博主一起学习!一起努力!
在这里插入图片描述


目录标题

  • C++入门
    • 什么是C++
    • C++发展史
    • C++ 关键字
    • 命名空间的使用
      • namspace的空间定义普通变量
      • 命名空间定义函数与类型
        • 命名空间定义函数
        • 命名空间定义类型
      • 使用using将命名空间中某个成员引入
      • 使用using将命名空间中某个成员引入
    • C++输入与输出
    • 缺省参数
      • 全缺省参数
      • 半缺省参数
    • 函数重载
      • 参数类型不同
      • 参数个数不同
      • 参数类型顺序不同


C++入门

什么是C++

C++是一种通用的编程语言,它是一种高级、静态类型的编程语言,同时也是一种面向对象的语言。C++是C语言的扩展,它继承了C语言的语法和功能,并添加了许多新的特性。C++支持面向对象的编程范式,包括封装、继承和多态性。它还提供了许多其他功能,如异常处理、模板元编程和标准模板库(STL),使程序员能够更高效地编写复杂的程序。
C++具有高性能和灵活性,可以用于开发各种类型的应用程序,包括桌面应用程序、嵌入式系统、游戏、图形界面应用程序、操作系统和网络应用程序等。由于其广泛的应用领域和强大的功能,C++已成为一种非常流行的编程语言。
总的来说,C++是一种功能强大、灵活且广泛应用的编程语言,适用于各种开发需求。


C++发展史

C++的发展可以追溯到20世纪80年代初。以下是C++发展的主要里程碑:

  1. 1980年:Bjarne Stroustrup在贝尔实验室开始将C语言扩展为C with Classes,这是C++的前身。通过添加类和对象的概念,C with Classes使得面向对象编程成为可能。

  2. 1983年:C with Classes改名为C++。C++的名称表示它是C语言的一个增强版,因为C++扩展了C语言的功能并添加了面向对象编程的特性。

  3. 1985年:在《C++程序设计语言》一书中,Stroustrup正式发布和介绍了C++语言。这本书成为学习C++的标准教材,并在学术界和工业界产生了广泛的影响。

  4. 1990年:C++的第一个国际标准(ISO/IEC 14882:1998)发布。这个标准为C++提供了一个统一的语法和语义规范,使得C++可以在不同的编译器和平台上进行跨平台开发。

  5. 1998年:C++的第二个国际标准(ISO/IEC 14882:2003)发布。这个标准引入了一些新的特性,如模板特化、异常规范和命名空间别名等。

  6. 2011年:C++的第三个国际标准(ISO/IEC 14882:2011)发布,通常被称为C++11。C++11引入了许多新的特性,如自动类型推导、Lambda表达式、右值引用和智能指针等。

  7. 2014年:C++的第四个国际标准(ISO/IEC 14882:2014)发布,通常被称为C++14。C++14对C++11进行了一些修正和改进,同时添加了一些新的功能。

  8. 2017年:C++的第五个国际标准(ISO/IEC 14882:2017)发布,通常被称为C++17。C++17增加了许多新的特性,如变量声明初始化、折叠表达式、结构化绑定和并行算法等。

  9. 2020年:C++的第六个国际标准(ISO/IEC 14882:2020)发布,通常被称为C++20。C++20引入了一系列新的特性,如概念、协程、范围和模块等。


C++ 关键字

在这里插入图片描述


命名空间的使用

在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题。

#include<stdlib.h>
#include<stdio.h>
int rand = 1;//在C语言中,rand是其一个库函数的命名名字,因此会造成命名冲突int main()
{printf("%d\n", rand);// C语言没办法解决类似这样的命名冲突问题,所以C++提出了namespace来解决return 0;
}

在这里插入图片描述


namspace的空间定义普通变量

namespace space
{int rand = 10;
}//int rand = 1;int main()
{int rand = 3;printf("%d\n", space::rand);printf("%d\n", rand);return 0;
}

在这里插入图片描述

在上述示例中,我们定义了一个名为space的命名空间。命名空间中包含了一个整型变量。在main函数中,我们通过::来访问命名空间中的成员,在以前的C语言中,我们是无法解决同一个名字代表着两个不同的变量的,因此我们可以通过命名空间这一特点来充分解决我们在C语言的痛点。

命名空间定义函数与类型

命名空间定义函数

在C++中,命名空间不仅仅可以定义普通变量,还可以定义函数与类型

#include<iostream>
namespace Myspace
{int Add(int x, int y){return x + y;}
}int Add(int x, int y)
{return  x + y;
}int main()
{int n = 9;int m = 22;printf("%d\n",Myspace::Add(n, m));//通过命名空间,我们可以充分的解决函数命名冲突的问题return 0;
}

在这里插入图片描述


命名空间定义类型

对于结构体的命名空间的引用与其它的有些许不同,代码实例如下:

#include<iostream>
namespace Mystruct
{struct Node{int val;};
}int main()
{Mystruct::Node example;example.val = 10;printf("%d\n",example.val);return 0;
}

在这里插入图片描述


使用using将命名空间中某个成员引入

using声明:使用using关键字来声明一个特定的命名空间、类或者函数,以便在当前的作用域中直接使用该名称而无需完整的限定符,我们也可以通俗的理解成,让这个展开的变量或者函数成为了一个全局变量。如下所示:

#include<iostream>
namespace Myspace 
{int num1 = 10;int num2 = 20;int Add(int x, int y){return x + y;}
}using namespace Myspace;int main()
{printf("%d\n", num1);printf("%d\n", num2);printf("%d\n", Add(num1, num2));return 0;
}

在这里插入图片描述


使用using将命名空间中某个成员引入

#include<iostream>
namespace Mysapce
{int n1 = 20;int n2 = 10;
}using Mysapce::n1;//展开命名空间中的n1变量
int main()
{printf("%d\n", n1);return 0;
}

在这里插入图片描述


C++输入与输出

  1. 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream >头文件
    以及按命名空间使用方法使用std。
  2. cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含<
    iostream >头文件中。
  3. <<是流插入运算符,>>是流提取运算符。
  4. 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。
    C++的输入输出可以自动识别变量类型。
  5. 实际上cout和cin分别是ostream和istream类型的对象,>>和<<也涉及运算符重载等知识,
    这些知识我们我们后续才会学习,所以我们这里只是简单学习他们的使用。后面我们还有有
    一个章节更深入的学习IO流用法及原理
    C++是一种面向对象的编程语言,提供了丰富的输入和输出功能。下面是C++中常用的输入和输出方式的示例:
    标准输出流cout
    当然了,在我们学习C语言之初都会向这个全新的东西打一下招呼,这里我们也不例外,在C++中,cout会自动识别你所要打印的数据类型并输出,作为初学者这里我们就暂时不对这里的endlcout做具体的解释,我们目前只需要知道可以这么用即可。
#include<iostream>
int main()
{int n = 0;char m = 0;std::cout << "hello C++" << std::endl;return 0;
}

在这里插入图片描述


标准输入流cin
cin与我们在C语言阶段所学习的scanf十分的像,都是以遇到空格和回车或者换行停止读取

#include<iostream>
int main()
{int n = 0;char m = 0;std::cin >> n >> m;//向显示器输入整型n与字符m;std::cout << n << ' ' << m << std::endl;return 0;
}

在这里插入图片描述
当然我们不难发现,每次都要加上std::是十分麻烦的一件事情,因此我们在平常练习的时候可以展开这个命名空间,因此就可以不用刻意的加上这个代码了,using namespace std;//展开命名空间,相当于把指定域给放开了


缺省参数

C++中的缺省参数是指函数定义时给一些参数设置默认值,调用函数时可以不传入这些参数,系统会自动使用默认值。实例演示:

#include<iostream>
void Func(int a = 9)
{cout << a << endl;
}int main()
{Func();//在我们没有传参时,会使用默认的参数Func(10);//传参时用我们传递的参数
}

在这里插入图片描述

全缺省参数

全缺省参数,即函数的全部形参都设置为缺省参数

#include<iostream>
void Func(int a = 0, int b = 9, int c = 22)
{cout << a << ' ' << b << ' ' << c << ' ' << endl;
}int main()
{Func();return 0;
}

在这里插入图片描述


半缺省参数

  1. 半缺省参数必须从右往左依次来给出,不能间隔着给
  2. 缺省参数不能在函数声明和定义中同时出现,如果声明与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该用哪个缺省值。故缺省参数只能在函数的定义中使用,而不能在函数的声明中使用。
  3. 缺省值必须是常量或者全局变量
  4. C语言不支持(编译器不支持)
#include<iostream>
void Func(int a, int b, int c = 22)
{cout << a << ' ' << b << ' ' << c << ' ' << endl;
}
int main()
{Func(10,99);return 0;
}

在这里插入图片描述


函数重载

在C++中,函数重载是指在同一个作用域中定义了多个具有相同名称但参数列表不同的函数。通过函数重载,可以使用相同的函数名实现不同的功能。

函数重载的特征包括:

  1. 函数名相同,参数列表不同,包括参数的类型、个数或顺序不同。
  2. 返回类型不是函数重载的标准,只有参数列表不同才算是重载。

函数重载可以提高程序的可读性和灵活性,使函数名更加直观,同时减少了记忆多个函数名的负担。


参数类型不同

函数重载可以通过相同的函数名不同类型的参数达到通过一个函数名实现不同的效果

#include<iostream>
int Add(int x, int y)
{return x + y;
}double Add(double x, double y)
{return x + y;
}
int main()
{cout << Add(4, 5) << endl;cout << Add(2.5, 5.2) << endl;return 0;
}`在这里插入代码片`

在这里插入图片描述


参数个数不同

同理函数重载可以通过相同的函数名不同个数的参数达到通过一个函数名实现不同的效果

void func(int a)
{cout << a << endl;
}void func(int a, int b, int c =3)
{cout << a + b + c << endl;
}int main()
{func(1);func(4, 5);return 0;
}

在这里插入图片描述


参数类型顺序不同

同理函数重载可以通过相同的函数参数顺序的不同达到通过一个函数名实现不同的效果

void f(int a, char b)
{cout << "f(int a,char b)" << endl;
}
void f(char b, int a)
{cout << "f(char b, int a)" << endl;
}int main()
{f(10, 'a');f('a', 10);return 0;
}

在这里插入图片描述


好啦,今天的内容就到这里啦,下期内容预告“引用”,“内联函数”,“auto关键字”等等


结语:今天的内容就到这里吧,谢谢各位的观看,如果有讲的不好的地方也请各位多多指出,作者每一条评论都会读的,谢谢各位。


🌏🗺️ 这里祝各位寒假愉快 💞💞

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/650029.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何阅读xml电子发票

xml电子发票是官方给出的电子存档的文件格式&#xff0c;本质是文本&#xff0c;所以文件很小&#xff0c;大量发票存储&#xff0c;能够更加凸显优势。 但是xml电子发票不方便阅读&#xff0c;因为里面是xml格式&#xff0c;对于财务人员来讲&#xff0c;看“代码”简直太难了…

Linux报 “no route to host” 异常 ping: sendmsg: No route to host

公司有台服务器迁移机房后跟另一台服务器相互ping不通&#xff0c;但是两台服务器都能上网能ping其他机器&#xff0c;其他机器都能ping通这两台服务器。检查两台服务器没有防火墙规则拦截&#xff0c;交换机上也没检查到acl过滤。 下图是迁移机房的服务器ping截图 下图是nfs服…

【云原生】认识docker容器操作命令

目录 一、容器操作命令 1、创建容器 2、删除容器以及停止容器运行 3、查看容器的运行状态 4、查看容器的详细信息 5、将容器的文件传输到宿主机以及将宿主机的文件传输到容器中 6、批量删除容器 7、进入容器 二、容器的迁移 1、先在容器中创建测试文件 2、将容器存储…

Scrum敏捷研发管理全流程/scrum管理工具

Leangoo领歌是一款永久免费的专业的敏捷开发管理工具&#xff0c;提供端到端敏捷研发管理解决方案&#xff0c;涵盖敏捷需求管理、任务协同、进展跟踪、统计度量等。 Leangoo领歌上手快、实施成本低&#xff0c;可帮助企业快速落地敏捷&#xff0c;提质增效、缩短周期、加速创新…

【详解】贪吃蛇游戏----上篇(介绍控制台和API等知识)

目录 知识点&#xff1a; Win32 API 宽字符的打印 控制台操作&#xff1a; &#xff08;1&#xff09;调整控制台大小 &#xff08;2&#xff09;控制台屏幕上的坐标COORD GetStdHandle GetConsoleCursorInfo CONSOLE_CURSOR_INFO SetConsoleCursorInfo SetConsoleC…

Cesium工具应用

文章目录 0.引言1.场景截图2.卷帘对比3.反选遮罩4.鹰眼视图5.指南针与比例尺6.坐标测量7.距离测量8.面积测量9.热力图10.视频投影11.日照分析12.淹没分析13.通视分析14.可视域分析15.缓冲区分析16.地形开挖17.要素聚合18.开启地下模式19.开启等高线20.坡度坡向21.填挖方量计算2…

排序(插入排序)

现在&#xff0c;我们学习了之前数据结构的部分内容&#xff0c;即将进入一个重要的领域&#xff1a;排序&#xff0c;这是一个看起来简单&#xff0c;但是想要理清其中逻辑并不简单的内容&#xff0c;让我们一起加油把&#xff01; 排序的概念及其运用 排序的概念 排序&…

解释性人工智能(XAI)—— AI 决策的透明之道

在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为我们生活中不可或缺的一部分。AI 系统的决策和行为对我们的生活产生了深远的影响&#xff0c;从医疗保健到金融服务再到自动驾驶汽车。 然而&#xff0c;有时候 AI 的决策似乎像黑盒子一样难以理解&am…

[C#]winform部署yolov5实例分割模型onnx

【官方框架地址】 https://github.com/ultralytics/yolov5 【算法介绍】 YOLOv5实例分割是目标检测算法的一个变种&#xff0c;主要用于识别和分割图像中的多个物体。它是在YOLOv5的基础上&#xff0c;通过添加一个实例分割模块来实现的。 在实例分割中&#xff0c;算法不仅…

Redis2-事务 连接Java 整合springboot 注解缓存

一、订阅和发布 Redis 发布订阅 (pub/sub) 是一种消息通信模式&#xff1a;发送者 (pub) 发送消息&#xff0c;订阅者 (sub) 接收消息。 Redis 客户端可以订阅任意数量的频道。 Redis的发布和订阅 客户端订阅频道发布的消息 频道发布消息 订阅者就可以收到消息 发布订阅的代…

ENVI下基于知识决策树提取地表覆盖信息

基于知识的决策树分类是基于遥感影像数据及其他空间数据,通过专家经验总结、简单的数学统计和归纳方法等,获得分类规则并进行遥感分类。分类规则易于理解,分类过程也符合人的认知过程,最大的特点是利用的多源数据。 决策树分类主要的工作是获取规则,本文介绍使用CART算法…

NQA测试机制—UDP Jitter测试

概念 UDP Jitter是以UDP报文为承载&#xff0c;通过记录在报文中的时间戳信息来统计时延、抖动、丢包的一种测试方法。Jitter&#xff08;抖动时间&#xff09;是指相邻两个报文的接收时间间隔减去这两个报文的发送时间间隔。 UDP Jitter测试的过程如下&#xff1a; 1. 源端&a…

shell编程之循环语句与函数

一 echo命令 echo -n 表示不换行输出 echo -e 表示输出转义符 常用的转义符 二 date date查看当前系统时间 -d 你描述的日期&#xff0c;显示指定字符串所描述的时间&#xff0c;而非当前时间 %F 完整日期格式&#xff0c;等价于 %Y-%m-%d % T 时间&#xff08;24小时…

1.26学习总结

连通性判断 DFS连通性判断步骤&#xff1a; 1.从图上任意一点u开始遍历&#xff0c;标记u已经走过 2.递归u的所有符合连通条件的邻居点 3.递归结束&#xff0c;找到了的所有与u的连通点&#xff0c;就是一个连通块 4.然后重复这个步骤找到所有的连通块 BFS连通性判断步骤…

linux 查看zookeeper server运行版本号

zookeeper版本查看运行命令&#xff1a;echo stat|nc localhost 2181 显示如下图所示&#xff1a; Zookeeper version: 3.4.5-cdh6.3.2--1, built on 11/08/2019 13:15 GMT Clients: /127.0.0.1:44814[0](queued0,recved1,sent0) Latency min/avg/max: 0/0/0 Received: 9 Se…

防火墙的NAT

目录 1. NAT 概念解析 2. 配置NAT策略&#xff1a; 1. NAT 概念解析 静态NAT --- 一对一 动态NAT --- 多对多 NAPT --- 一对多的NAPT --- easy ip --- 多对多的NAPT 服务器映射 源NAT --- 基于源IP地址进行转换。我们之前接过的静态NAT&#xff0c;动态NAT&#xff0c;NAPT都属…

*【艺恩娱数】Python爬虫+数据分析可视化中国影院票房*¶

文章目录 一、记得登入才能看到所有的数据二、使用步骤艺恩数据可视化艺恩影院票房Top10艺恩影院票房销售额对比艺恩影院票房省份人次分析艺恩影院场次top10榜单 这个里面的影院名称&#xff0c;省份&#xff0c;城市&#xff0c;票房&#xff0c;场次&#xff0c;人次&#xf…

ESXI 本地和虚拟机之间可以自由复制和粘贴

文章目录 ESXI 本地和虚拟机之间可以自由复制和粘贴 ESXI 本地和虚拟机之间可以自由复制和粘贴 web访问esxi&#xff0c;然后&#xff1a; 1、右击新建的虚拟机&#xff0c;确保是在关机状态下&#xff0c;点击编辑设置 2. 找到 虚拟机选项→高级→常规→配置参数 3、点击添加…

Unity3d C#实现三维场景中图标根据相机距离动态缩放功能

前言 如题的需求&#xff0c;其实可以通过使用UI替代场景中的图标来实现&#xff0c;不过这样UI的处理稍微麻烦&#xff0c;而且需要在图标上添加粒子特效使用SpriteRender更方便快捷。这里就根据相机离图标的位置来计算图标的缩放大小即可。这样基本保持了图标的大小&#xf…

Vulnhub靶场DC-3

本机192.168.223.128 靶机192.168.223.139 目标发现nmap -sP 192.168.223.0/24 端口扫描nmap -p- 192.168.223.139 之开启了一个80端口 看一下是什么服务 nmap -sV -p- -A 192.168.223.139是一个apache服务&#xff0c;joomla模板 看一下web 没什么有用信息。 扫描一下后台…