【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.mfbz.cn/a/350525.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java如何对OSS存储引擎的Bucket进行创建【OSS学习】

在前面学会了如何开通OSS&#xff0c;对OSS的一些基本操作&#xff0c;接下来记录一下如何通过Java代码通过SDK对OSS存储引擎里面的Bucket存储空间进行创建。 目录 1、先看看OSS&#xff1a; 2、代码编写&#xff1a; 3、运行效果&#xff1a; 1、先看看OSS&#xff1a; 此…

老师打学生违法吗该怎么处理

老师打学生&#xff1a;一个需要深入探讨的敏感话题。老师&#xff0c;肩负着教书育人的重任&#xff0c;面对学生的时候&#xff0c;法律、职业道德和个人修养常常需要我们做出权衡。那么&#xff0c;当老师打了学生这一行为发生时&#xff0c;我们该如何看待和处理呢&#xf…

蓝桥杯备战——6.串口通讯

1.分析原理图 由上图我们可以看到串口1通过CH340接到了USB口上&#xff0c;通过串口1我们就能跟电脑进行数据交互。 另外需要注意的是STC15F是有两组高速串口的&#xff0c;而且可以切换端口。 2.配置串口 由于比赛时间紧&#xff0c;我们最好不要去现场查寄存器手册&#x…

HCIP-BGP实验

实验拓扑 实验需求 1.r1上有两个换汇分别为192.168.1.0/24和192.168.2.0/24只允许学到汇总和1.0 2.r7上有两个还回172.16.1.0/24和172.16.2.0/24要求全部宣告&#xff0c;但是只有2.0可以通过 3.全网可达 实验思路 配置IP地址 BGP配置 实验步骤 配置IP地址 BGP配置 在…

驱动开发-系统移植

一、Linux系统移植概念 需要移植三部分东西&#xff0c;Uboot ,内核 &#xff0c;根文件系统 &#xff08;rootfs&#xff09; &#xff0c;这三个构成了一个完整的Linux系统。 把这三部分学明白&#xff0c;系统移植就懂点了。 二、Uboot uboot就是引导程序下载的一段代…

力扣hot100 轮转数组 一题多解 翻转数组

Problem: 189. 轮转数组 文章目录 思路复杂度Code 思路 &#x1f468;‍&#x1f3eb; 参考 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( 1 ) O(1) O(1) Code class Solution {public void rotate(int[] nums, int k){int n nums.length;k k % n;reverse(…

[C++开发 02_3/5 _ C++中函数(95)]

知识点3&#xff1a;函数提高 3.1函数默认参数 3.2函数占位参数 3.3函数重载 3.1.1函数重载概述 3.1.2函数重载注意事项 引用作为重载条件 函数重载碰到默认参数

一个新的springboot-vue项目如何启动起来

一个新的springboot-vue项目如何启动起来 1.导入mysql 打开yml文件修改数据库密码 名称 用户名 2.打开pom.xml配置maven依赖 尽量换成自己使用过的版本号&#xff0c;或者打开中央仓库搜索相关内容版本号&#xff1a;https://central.sonatype.com/ 注解为黄色 说明工程…

Chrome单独配置代理的方法

Windows Windows上单独对Chrome设置代理&#xff0c;需要在启动时传递参数&#xff0c;具体步骤如下。 在Chrome浏览器的快捷方式上右击&#xff0c;进入属性。在 快捷方式 标签下找到 目标 项目&#xff0c;在最后添加 –proxy-server“socks5://xxx.xxx.xx.xx:xxxx” 如果要…

python爬虫采集下载中国知网《出版来源导航》论文文献下载_PDF文档_数据采集知网爬虫论文Python3

时隔一年&#xff0c;很久没更新博客了。今天给大家带来一个python3采集中国知网 &#xff1a;出版来源导航 这个是网址是中国知网的&#xff0c;以下代码仅限于此URL&#xff08;出版来源导航&#xff09;采集&#xff0c;知网的其他网页路径采集不一定行&#xff0c;大家可以…

部署Filebeat+Kafka+ELK 集群

目录 Kafka 概述 为什么需要消息队列&#xff08;MQ&#xff09; 使用消息队列的好处 消息队列的两种模式 Kafka 定义 Kafka 简介 Kafka 的特性 Kafka 系统架构 在zookeeper集群的基础上部署 kafka 集群 部署zookeeper集群 部署kafka集群 下载安装包 安装 Kafka Ka…

【自动化测试】读写64位操作系统的注册表

自动化测试经常需要修改注册表 很多系统的设置&#xff08;比如&#xff1a;IE的设置&#xff09;都是存在注册表中。 桌面应用程序的设置也是存在注册表中。 所以做自动化测试的时候&#xff0c;经常需要去修改注册表 Windows注册表简介 注册表编辑器在 C:\Windows\regedit…

Pandas应用-股票分析实战

股票时间序列 时间序列&#xff1a; 金融领域最重要的数据类型之一 股价、汇率为常见的时间序列数据 趋势分析&#xff1a; 主要分析时间序列在某一方向上持续运动 在量化交易领域&#xff0c;我们通过统计手段对投资品的收益率进行时间序列建模&#xff0c;以此来预测未来的收…

ECharts 中 Legend自定义可以使用svg标签

效果图&#xff1a; legend图例加载svg标签 在ECharts中&#xff0c;图例(legend)组件的formatter属性允许你自定义图例文本的格式。但是&#xff0c;formatter属性不支持直接加载SVG标签或Html。它接受一个字符串或者一个函数作为输入&#xff0c;并不能解析或渲染SVG。 如果…

白居易上班摸鱼闲不住,花非花,雾非雾

所有的成功都不是偶然的&#xff0c;一定有不为人知的付出。白居易&#xff0c;字乐天&#xff0c;号香山居士、醉吟先生。白居易小时候读书读到口舌生疮&#xff0c;练字练到手生茧子。 白居易的诗&#xff0c;通俗易懂&#xff0c;不识字的老妇人都听得懂。白居易写了大约30…

python小项目:口令保管箱

代码&#xff1a; #! python3 # python 编程-----口令保管箱passwords{emails: F7minlBDDuvMJuxESSKHFhTxFtjVB6,blog:VmALvQyKAxiVH5G8v01if1MLZF3sdt,luggage:12345,} import sys,pyperclip if len(sys.argv)<2:print(usage:python python3文件[accout]-copy accout pass…

KernelGPT: LLM for Kernel Fuzzing

KernelGPT: Enhanced Kernel Fuzzing via Large Language Models 1.Introduction2.Background2.1.Kernel and Device Drivers2.2.Kernel Fuzzing2.2.1.Syzkaller规约2.2.2.规约生成 3.Approach3.1.Driver Detection3.2.Specification Generation3.2.1.Command Value3.2.2.Argum…

【Java基础】聊聊你不知道的注解那些事

在实际的开发中&#xff0c;我们大量使用了注解&#xff0c;无论是spring、还是本身jdk提供的&#xff0c;注解都是围绕一个java程序员的开发生活&#xff0c;所以本篇主要介绍注解相关的概念、理论、实践。 定义注解 注解和异常非常相似&#xff0c;都可以自定义&#xff0c…

CDR绘图软件|安装教程来了(小白福利:有红包封面领取哦!)

前言 今天给小伙伴们讲讲&#xff1a;如何安装CDR软件。 如果未来的你想从事平面设计/广告行业&#xff0c;那应该就会接触到CDR这款软件。 CorelDRAW Graphics Suite是加拿大Corel公司的平面设计软件&#xff1b;该软件是Corel公司出品的矢量图形制作工具软件&#xff0c;这…

ShardingSphere之ShardingJDBC客户端分库分表上

目录 什么是ShardingSphere&#xff1f; 客户端分库分表与服务端分库分表 ShardingJDBC客户端分库分表 ShardingProxy服务端分库分表 ShardingSphere实现分库分表的核心概念 ShardingJDBC实战 什么是ShardingSphere&#xff1f; ShardingSphere是一款起源于当当网内部的应…