C++之旅——入门

news2024/11/26 11:54:29

Hello,各位小伙伴们,前几期我们学习了C语言和数据结构,有了一定的基础之后我们来挑战新的语言——C++。

目录

一、初识C++

1>C++发展历史

 2>C++版本更新

3>C++的热度

4>C++的学习难度

5>C++学习相关书籍

 二、第一个C++代码

三、C++基础

1>命名空间的介绍

2>命名空间的使用

1、指定命名空间

2、使用using展开命名空间的指定成员

3、使用using展开整个命名空间

3>C++输入&输出​


一、初识C++

相信很多小伙伴和小编一样认为C语言和C++必然有着联系,确实在C语言诞生之后存在很多的不足,C++在其基础上进行不断的优化,逐渐演化为一门新的语言。让我们一起来阅读一下C++的发展史吧!

1>C++发展历史

        C++的起源可以追溯到1979年,当时Bjarne Stroustrup(本贾尼·斯特劳斯特卢普,这个翻译的名字不同的地方可能有差异)在贝尔实验室从事计算机科学和软件工程的研究工作。面对项目中复杂的软件开发任务,特别是模拟和操作系统的开发工作,他感受到了现有语言(如C语言)在表达能力、可维护性和可扩展性方面的不足。
1983年,Bjarne Stroustrup在C语言的基础上添加了面向对象编程的特性,设计出了C++语言的雏形,此时的C++已经有了类、封装、继承等核心概念,为后来的面向对象编程奠定了基础。这一年该语言被正式命名为C++。​在随后的几年中,C++在学术界和工业界的应用逐渐增多。一些大学和研究所开始将C++作为教学和研究的首选语言,而一些公司也开始在产品开发中尝试使用C++。这一时期,C++的标准库和模板等特性也得到了进一步的完善和发展。
        C++的标准化工作于1989年开始,并成立了一个ANSI和ISO(International Standards 
Organization)国际标准化组织的联合标准化委员会。1994年标准化委员会提出了第一个标准化草案。在该草案中,委员会在保持斯特劳斯特卢普最初定义的所有特征的同时,还增加了部分新特征。
        在完成C++标准化的第一个草案后不久,STL(Standard Template Library)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。在通过了标准化第一个草案之后,联合标准化委员会投票并通过了将STL包含到C++标准中的提议。STL对C++的扩展超出C++的最初定义范围。虽然在标准中增加STL是个很重要的决定,但也因此延缓了C++标准化的进程。​
        1997年11月14日,联合标准化委员会通过了该标准的最终草案。1998年,C++的ANSI/IS0标准被投入使用。

 

 2>C++版本更新

这里给大家介绍一些C++的网站https://legacy.cplusplus.com/reference/​icon-default.png?t=O83Ahttps://legacy.cplusplus.com/reference/%E2%80%8B

 这个网站是小编比较爱使用的对于一些不太清楚的函数使用直接搜索即可但较为官方的网站为

https://zh.cppreference.com/w/cpp​icon-default.png?t=O83Ahttps://zh.cppreference.com/w/cpp%E2%80%8B

 根据大家的喜好来选择即可!

3>C++的热度

随着近几年的人工智能的发展,python的热度逐年升高,如果你已经学习完C语言了,在学习起来python就会非常顺手,这是今年语言热度排行榜。

C/C++名列前茅,但在一定程度上二者热度有所下降。

4>C++的学习难度

给大家看一个具有戏剧性的图片

 哈哈!也只是一个小小的玩笑,相信大家好好学习C++并不断练习就一定能够攻克难关。

5>C++学习相关书籍

这是小编在网上找到的三本比较推荐的书籍小编也才刚入门C++,但对于刚入门C++来说有一定难度,待我们有了一定的基础以后再来阅读也不迟。

三本书的介绍:

C++ Primer:主要讲解语法,经典的语法书籍,前后中期都可以看,前期如果自学看可能会有点晦涩难懂
STL源码剖析:主要从底层实现的角度结合STL源码,庖丁解牛式剖析STL的实现,是侯捷老师的经典之作。可以很好的帮助我们学习别人用语法是如何实现出高效简洁的数据结构和算法代码,如何使用泛型封装等。让我们不再坐井观天,闭门造车,本书课程上一半以后,中后期可以看。
Effctive C++:本书也是侯捷老师翻译的,本书有的一句评价,把C++程序员分为看过此书的和没看过此书的。本书主要讲了55个如何正确高效使用C++的条款,建议中后期可以看一遍,工作1-2年后再看一遍,相信会有不一样的收获。

 二、第一个C++代码

任何一个牛掰的程序猿第一个代码都是hello world 。

#include<iostream>
int main ()
{
    str::cout << "hello world " << endl;
    return 0;
}

 让我们来对比一下C语言和python。

#include<stdio.h>
int main()
{
    printf("hello world");
    return 0;
}
print("hello")

由此也可以看出C++的复杂度。

三、C++基础

我们在做一个项目时,需要多人协作一起来完成,难免会有多个人使用同一个变量名,这样就会造成很大的麻烦。所以在C++上加上命名空间这个概念。

1>命名空间的介绍

namespace的定义:定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。​

让我们在VS上模拟一下:

 在这和程序中我们在全局中定义了rand,但同时包含了头文件#include<stdlib.h>,在这个头文件中已经包含这个rand函数,会有重定义报错,这样就模仿了上述情景。在此情景下我们就需要使用命名空间域,namespace本质是定义出一个域,这个域跟全局域各自独立,不同的域可以定义同名变量,所以下面的rand不在冲突了。

如果想要访问其中的rand需要加上命名空间域名+::

同时命名空间域可以嵌套使用,比如:

#include<iostream>
namespace Sum
{
	namespace add
	{
		int Fuction(int x, int y)
		{
			return x + y;
		}
	}
	namespace mul
	{
		int Fuction(int x, int y)
		{
			return x * y;
		}
	}
}
int main()
{

	printf("%d ", Sum::add::Fuction(2, 3));
	printf("%d ", Sum::mul::Fuction(3, 4));
	return 0;
}

我们在全局域中定义了命名空间域Sum,又在其中分别定义了add 和 mul,虽然里面的函数名称一致,但并不影响他们的使用。

多文件中可以定义同名namespace,他们会默认合并到一起,就像同一个namespace一样​。

2>命名空间的使用

我们指定输出或者查找一个变量时,首先会在局部范围内查找,其次在全局范围内查找,不会到命名空间里面去查找。所以下面程序会编译报错。

 和上面一开始rand报错原因时一致的,我们可以通过三种方式解决:

1、指定命名空间

#include<iostream>
namespace byte
{
    int a = 1;
    int b = 2;
}
int main ()
{
        
    printf("%d ",byte::a);
    return 0;
}

2、使用using展开命名空间的指定成员

#include<iostream>
namespace byte
{
    int a = 1;
    int b = 2;
}
using byte::a;
int main ()
{
        
    printf("%d ",a);
    return 0;
}

3、使用using展开整个命名空间

#include<iostream>
namespace byte
{
    int a = 1;
    int b = 2;
}
using namespace byte;
int main ()
{
        
    printf("%d ",a);
    printf("%d ",b);
    return 0;
}

展开命名空间中全部成员,项目不推荐,冲突风险很大,日常小练习程序为了方便推荐使用。

3>C++输入&输出​

<iostream> 是 Input Output Stream 的缩写,是标准的输入、输出流库,定义了标准的输入、输出对象。
• std::cin 是 istream 类的对象,它主要面向窄字符(narrow characters (of type char))的标准输入流。
• std::cout 是 ostream 类的对象,它主要面向窄字符的标准输出流。​
• std::endl 是一个函数,流插入输出时,相当于插入一个换行字符加刷新缓冲区。​
• <<是流插入运算符,>>是流提取运算符。(C语言还用这两个运算符做位运算左移/右移)
• 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动指定格式,C++的输入输出可以自动识别变量类型(本质是通过函数重载实现的,这个以后会讲到),其实最重要的是C++的流能更好的支持自定义类型对象的输入输出。​
cout/cin/endl等都属于C++标准库,C++标准库都放在一个叫std(standard)的命名空间中,所以要通过命名空间的使用方式去用他们。
• 一般日常练习中我们可以using namespace std,实际项目开发中不建议using namespace std。​
• 这里我们没有包含<stdio.h>,也可以使用printf和scanf,在包含<iostream>间接包含了。vs系列编译器是这样的,其他编译器可能会报错.

 相信看到这里的小伙伴应该已经了解到了C++的第一个代码会是那样书写。

对于输入输出我们就有了大致的了解:

 初学的小伙伴可以会把cin的>>和cout<<搞混,小编在这里想到了一种便于记忆的方法:

在执行输入操作cin时箭头所指的方向便是输入的顺序。

在执行输出操作cout时,将cout看作输出终端,从左到右依次输出。

• 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参,缺省参数分为全缺省和半缺省参数。(有些地方把缺省参数也叫默认参数)
• 全缺省就是全部形参给缺省值,半缺省就是部分形参给缺省值。C++规定半缺省参数必须从右往左依次连续缺省,不能间隔跳跃给缺省值。
• 带缺省参数的函数调用,C++规定必须从左到右依次给实参,不能跳跃给实参。​
• 函数声明和定义分离时,缺省参数不能在函数声明和定义中同时出现,规定必须函数声明给缺省值。

 

 在函数调用缺少参数的情况下,会默认在函数定义里面的参数,如果在函数调用时设置了参数,则会按照设置的参数进行。

这就有点像小编在学校里学习的python了,哈哈哈哈。

OK,今天的内容就到这里啦,小编会及时更新C++博客,希望小伙伴们能够及时跟上小编的步伐,我们下期再见。

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

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

相关文章

Flutter中文字体设置指南:打造个性化的应用体验

在使用Flutter进行开发时&#xff0c;可能会遇到中文字体显示不正常或者字体不符合设计需求的情况。Flutter默认的中文字体往往无法满足某些用户对个性化和美观的需求。今天&#xff0c;我们就来详细探讨如何在Flutter应用中设置中文字体&#xff0c;并结合不同场景提供相应的解…

4.1 软件设计概要

软件设计概要 1、 软件设计的概念和设计质量1.1 软件设计基本任务1.2 设计模型1.3 软件设计特点1.4 设计质量属性1.5 设计指导原则 2、 设计相关八大概念抽象体系结构设计模式模块化信息隐藏功能独立精化重构 3、 四类设计技术概要3.1 数据设计3.2 体系架构设计体系结构组织和细…

MySQL表的增删改查(CRUD2)

美好的一天又开始了&#xff0c;大家今天有没有学习呢&#xff1f;没学的话&#xff0c;开始跟随和博主一起对MYSQL的学习吧&#xff01;&#xff01;&#xff01; 复习&#xff1a; CRUD新增1.新增 insert into 表名 [(列名[&#xff0c;列名,列名...])] values (值[,值,值.…

用接地气的例子趣谈 WWDC 24 全新的 Swift Testing 入门(三)

概述 从 WWDC 24 开始&#xff0c;苹果推出了全新的测试机制&#xff1a;Swift Testing。利用它我们可以大幅度简化之前“老态龙钟”的 XCTest 编码范式&#xff0c;并且使得单元测试更加灵动自由&#xff0c;更符合 Swift 语言的优雅品味。 在这里我们会和大家一起初涉并领略…

【案例】Excel使用宏来批量插入图片

一、场景介绍 我有一个excel文件&#xff0c;需要通过一列的文件名称&#xff0c;按照规则给批量上传图片附件。 原始文件&#xff1a; 成功后文件&#xff1a; 二、实现方法 1. 使用【wps】工具打开Excel文件&#xff0c;将其保存为启用宏的文件。 2.找到编辑宏的【VB编辑器…

Springboot项目报错记录

SpringBoot测试报错&#xff1a;Unable to find a SpringBootConfiguration, you need to use Context 该测试类所在测试包test下的包名和类路径java下的包名不一致导致的 引发以下报错 java.lang.IllegalStateException: Unable to find a SpringBootConfiguration, you need…

RabbitMQ 高级特性——消息分发

文章目录 前言消息分发RabbitMQ 分发机制的应用场景1. 限流2. 负载均衡 前言 当 RabbitMQ 的队列绑定了多个消费者的时候&#xff0c;队列会把消息分发给不同的消费者&#xff0c;每条消息只会发送给订阅列表的一个消费者&#xff0c;但是呢&#xff0c;RabbitMQ 默认是以轮询…

深度学习:bert模型

multi-headed机制 1、通过不同的head得到多个特征表达&#xff0c;一般8个head 2、将所有特征拼接在一起 3、降维&#xff0c;将Z0~Z7连接一个FC全连接实现降维 多层堆叠 位置编码 如何实现位置编码&#xff1f; &#xff08;1&#xff09;为每个时间步添加一个0-1范围内的数…

Vue实战学习(2)(Vue快速入门(快速构建一个局部Vue项目))

目录 一、Vue快速入门。 &#xff08;1&#xff09;快速入门的案例需求。 &#xff08;2&#xff09;原生js解决。 &#xff08;3&#xff09;使用Vue解决。 1、准备一个html页面。且该页面需要引入Vue模块。 2、创建Vue程序的应用实例。 3、准备html元素&#xff08;如div&…

SpringMVC学习记录(三)之响应数据

SpringMVC学习记录&#xff08;三&#xff09;之响应数据 一、页面跳转控制1、快速返回模板视图2、转发和重定向 二、返回JSON数据1、前置准备2、ResponseBody 三、返回静态资源1、静态资源概念2、访问静态资源 /*** TODO: 一个controller的方法是控制层的一个处理器,我们称为h…

Spring WebFlux 核心原理(2-3)

1、Project Reactor 高级 1.1、响应式流的生命周期 要理解多线程的工作原理以及 Reactor 中实现的各种内部优化&#xff0c;首先必须了解 Reactor 中响应式类型的生命周期。 1.1.1、组装时 流生命周期的第一部分是组装时&#xff08;assembly-time&#xff09;。 Reactor 提供…

Python爬虫与Web渗透测试入门指南——初学者防踩雷

目录 Python爬虫与Web渗透测试入门指南一、学习方向和基础知识Python爬虫学习方向Web渗透学习方向 二、具体知识点总结三、学习流程和典型案例案例1&#xff1a;Python爬虫 - 简单网页数据爬取案例2&#xff1a;Web渗透 - SQL注入漏洞检测与利用案例3&#xff1a;Python爬虫 - …

apache-seata-2.1.0 AT模式使用篇(配置简单)

最近在研究seata的AT模式&#xff0c;先在本地搭建了一个演示demo&#xff0c;看看seata是如何使用的。在网上搜的demo&#xff0c;配置相对来说都比较多。我最终搭建的版本&#xff0c;配置较少&#xff0c;所以写篇文章分享下&#xff0c;希望能帮到对seata感兴趣的小伙伴。先…

Java代码与数据库纽带——JDBC

ok&#xff0c;看了题目&#xff0c;就可以知道今天要分享的是JDBC 讲这个这之前&#xff0c;想讲讲之前的。 之前我们操作数据库基本都是通过MySQL客户端&#xff0c;进行编写sql语句来操作的。 但是我们在开发中一般都是通过代码来操控数据库的。 而且在我们日常开发中&a…

navicat pg库安装mysql fdw 外表扩展

在Windows上手动安装mysql_fdw&#xff08;MySQL Foreign Data Wrapper&#xff09;通常涉及一系列步骤&#xff0c;包括下载源码、编译、配置和测试。以下是一个详细的指南&#xff1a; 一、下载mysql_fdw源码 访问mysql_fdw的GitHub发布页面&#xff0c;选择最新版本的源码…

智能提醒助理系列-jdk8升级到21,springboot2.3升级到3.3

本系列文章记录“智能提醒助理”产品建设历程&#xff0c;记录实践经验、巩固知识点、锻炼总结能力。 本篇介绍技术栈升级的过程&#xff0c;遇到的问题和解决方案。 一、需求出发点 智能提醒小程序 当前使用的是jdk8&#xff0c;springboot2.3,升级到jdk21和springboot3.3 学…

雷军-2022.8小米创业思考-11-新零售:用电商思维做新零售,极致的效率+极致的体验。也有弯路,重回极致效率的轨道上。

第十一章 新零售 当我们说到小米模式的时候&#xff0c;其实我们说的是两件东西&#xff1a; 一是小米模式的本质&#xff0c;即高效率的商业模式&#xff1b; 另一件是小米这家公司具象的商业模式&#xff0c;这是小米在实践中摸索、建立的一整套业务模型。 从2015年到202…

人工智能——小白学习指南

知孤云出岫 目录 1. **智能评测系统**2. **个性化学习路径推荐**3. **虚拟学习助手**4. **学习行为分析**5. **数据驱动的教学决策**6. **自动化课程推荐**7. **数据隐私与安全保护** 人工智能知识点的总结和学习路线&#xff0c;以数据表格形式呈现&#xff0c;并附带在教育行…

【深度学习基础】常用图像卷积核类型

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;深度学习_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2. 常…

SpringCloud框架学习(第一部分:初始项目搭建)

目录 一、SpringBoot和SpringCloud版本选型 1.Springcloud版本选择 2.Springcloud版本选择 3.Springcloud Alibaba版本选择 4.SpringCloud VS SpringBoot VS SpringCloud Alibaba版本三者制约对应关系 二、SpringCloud介绍 1.单体架构 2.微服务架构 3.springcloud 4.S…