C++初阶--C++入门之基础学习
0.前言
C++是一门非常好的编程语言,但可能在学习C++的过程中会遇到很多困难。人们常说 “一个人走得很快,一群人会走的更远”, 所以就让我们一起攻坚克难,一起征服C++吧!从本章开始,我们将开始C++的基础学习!一起加油吧!🎠🎠🎠
1.什么是C++
C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机界提出了OOP(objectoriented programming:面向对象)思想,支持面向对象的程序设计语言应运而生。
1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。因此:C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。
2.C++关键字
C++总计63个关键字,C语言32个关键字
asm | do | if | return | try | continue |
---|---|---|---|---|---|
auto | double | inline | short | typedef | for |
bool | dynamic_cast | int | signed | typeid | public |
break | else | long | sizeof | typename | throw |
case | enum | mutable | static | union | wchar_t |
catch | explicit | namespace | static_cast | unsigned | default |
char | export | new | struct | using | friend |
class | extern | operator | switch | virtual | register |
const | false | private | template | void | true |
const_cast | float | protected | this | volatile | while |
delete | goto | reinterpret_cast |
3.命名空间
①像下面这样,我们在命名全局变量的时候并不知道C语言库里面的函数,这时候就会发生命名冲突②还有当我们在公司分模块写代码的时候,我们并不知道别人是怎样命名函数、全局变量的,也可能引发命名冲突。
一个栗子:
#include<stdio.h>
#include<stdlib.h>
int rand = 10;
int main()
{printf("%d\n", rand);return 0;
}
代码运行的结果:
C语言不能很好的解决命名冲突的问题,而在C++中使用了命名空间对标识符的名称进行本地化,以避免命名冲突或名字污染;而定义命名空间,需要使用到
namespace
关键字,后面跟命名空间的名字(注意不需要在{}
后面加逗号),然后接一对{}
,{}
中为命名空间的成员,把变量封装在命名空间域中,防止引起命名冲突。
3.1命名空间的定义
命名空间形式如下:
namespace phh
{int rand = 1;
}
现在我们已经命名好了,那么该怎么访问命名空间里面的变量呢?这时候我们要使用
::
域作用限定符,左边空白表示全局域去访问全局变量,左边是命名空间的名字则回去命名空间域访问命名空间的成员变量。
eg:
#include<stdio.h>int a = 1;
//namespace是C++的关键字,后面跟的是命名空间的名字
//然后加一对{}括号即可(注意不需要在{}加逗号)
//把全局变量封装在命名空间域中,防止引起命名冲突
namespace phh
{int a = 2;
}
//::域作用限定符
//左边空白,会去全局域访问
int main()
{int a = 0;printf("%d\n", a);printf("%d\n", ::a);printf("%d\n", phh::a);return 0;
}
代码运行的结果如下:
这时候我们就可以用C++解决与库里面命名冲突问题了
#include<stdio.h>
#include<stdlib.h>
namespace phh
{int rand = 1;
}
int main()
{printf("%d\n", phh::rand);printf("%p\n", rand);//库里面的rand是函数,函数名为地址return 0;
}
代码运行的结果如下:
3.2命名空间的特性
1.正常的命名空间定义–可以定义变量/函数/类型
namespace phh
{int rand = 10;int Add(int left, int right){return left + right;}struct Node{struct Node* next;int val;};
}
2.命名空间可以嵌套使用
#include<stdio.h>
namespace N1
{int a = 0;int b = 0;int Add(int left, int right){return left + right;}namespace N2{int a = 1;int c = 0;int d = 0;int Sub(int left, int right){return left - right;}}
}
int main()
{printf("%d\n", N1::a);//嵌套的命名空间还可以使用同一个变量名printf("%d\n", N1::N2::a);//也可以把函数封装在命名空间域中,然后通过指定空间域进行访问printf("%d\n", N1::Add(1, 2));return 0;
}
代码运行的结果如下:
3.同一个工程中可以存在多个相同的名称,编译器最后会合并成同一个命名空间
//Queue.h
namespace N1
{int x = 1;
}
//Stack.h
namespace N1
{int y = 2;
}
#include<stdlib.h>
#include"Queue.h"
#include"Stack.h"
int main()
{//printf("%d\n", N1::x);printf("%d\n", N1::y);return 0;
}
代码运行的结果如下:
注意: 如果
Queue.h
和Stack.h
的N1
中使用了同一个变量名,会发生命名冲突,这时候可以使用命名空间嵌套或定义不同命名空间的名字。
3.3命名空间的使用
命名空间使用三种方式:
①加命名空间的名称及作用限定符
#include<stdio.h>
int a = 1;
namespace phh
{int a = 2;
}int main()
{int a = 0;printf("%d\n", a);printf("%d\n", ::a);printf("%d\n", phh::a);return 0;
}
这种方法,需要对命名空间域进行多次访问,会显得代码冗余;建议在访问次数少的时候使用。
②使用using namespace 命名空间名称引入
#include<iostream>
namespace phh
{int a = 1;int b = 1;
}
using namespace phh;
//相当于把命名空间中的成员变量放到了全局域
int main()
{int a = 0;printf("%d\n", a);printf("%d\n", ::a);return 0;
}
代码运行的结果如下:
这种方法,把命名空间域中的变量放到全局域中可能会引起命名冲突,一般建议在日常练习中使用。
③使用using将命名空间中的某个成员引入
#include<stdio.h>
int b = 0;
namespace phh
{int a = 1;int b = 1;
}
using phh::a;
int main()
{printf("%d\n", a);return 0;
}
代码运行结果如下:
不建议把命名空间的里变量全部展开,存在风险,可以指定成员访问或把常用的展开,推荐使用这种方法。
4.C++输入&输出
C++学习须知:
1.
std
是C++标准库的命名空间命名,C++标准库的定义实现都放在这个命名空间中
2.cout
是标准输出对象(控制台),cin
是标准输入对象(键盘),endl
是特殊的C++符号,相当于换行符\n
3.cout\cin\endl
被定义在std(C++标准库的命名空间)中,需要包含头文件#include<iostream>
需要按命名空间的使用方法才能使用
4.cout\cin
可以自动识别变量类型,可以一次读取多个变量(也就是不用像C语言中printf\scanf
那样指定变量的格式读取、输出多个变量)
5.在以.cpp
为后缀的文件中,C语言、C++混用的时候,使用printf/scanf
比cout\cin
效率高一点,因为C++要兼容C语言,所以C++、C语言有各自不同的缓冲区,所以在输入输出前需要检查C语言缓冲区是否有东西,会影响效率。
一个栗子:
//C++的输入和输出
#include<iostream>
using std::cout;
using std::cin;
using std::endl;
int main()
{int x = 0;double b = 0;cin >> x>>b;cout << x <<" "<< b << endl;return 0;
}
代码运行的结果如下:
std命名空间的使用惯例:
1.在日常练习中,建议直接
using namespace
即可,这样很方便。
2using namespace std
展开,标准库就全部暴露出来,如果我们定义的变量跟库里面的类型/对象/函数,就存在冲突问题,所以在项目开发中建议展开某个库里面的成员变量,如需要使用cout
,就建议using std::cout
。
总结
本章我们一起学习了C++的一些细则,如命名空间、输入输出,了解了C++与C语言的不同之处,内容不多,但很重要哦!希望对你们了解C++有些许帮助!感谢大家阅读,如有不对,欢迎纠正!🎠🎠🎠
相关文章:

C++初阶--C++入门之基础学习
0.前言 C是一门非常好的编程语言,但可能在学习C的过程中会遇到很多困难。人们常说 “一个人走得很快,一群人会走的更远”, 所以就让我们一起攻坚克难,一起征服C吧!从本章开始,我们将开始C的基础学习&#x…...

服务器虚拟化部署
服务器虚拟化部署 1、背景2、目的3、环境4、部署4.1、部署VMware ESXi4.1.1、准备工作4.1.2、部署ESXi4.1.3、配置ESXi4.1.4 、部署虚拟机 1、背景 项目上利旧9台服务器,项目需要使用15台服务器,外购已经没有项目硬件采购预算,只能从目前的…...
实验篇(7.2) 01. 实验环境介绍 远程访问 ❀ Fortinet网络安全专家 NSE4
【简介】学习NSE4,如果只看文章而不动手做实验,就象耍流氓。为了有效的巩固学习到的内容,建议经常动手做实验。实验不怕出错,身经百战后,再在生产环境部署和配置FortiGate防火墙,就会做到胸有成竹。 虚拟实…...

ThinkPHP6 模型层的模型属性,表映射关系,以及如何在控制层中使用模型层和模型层中的简单CRUD
ThinkPHP6 模型层的模型属性,表映射关系,以及模型层的CRUD及如何在控制层中使用模型层 1. model 模型层的默认映射规则 模型,即mvc模式中的model层,model层用来对接数据库,操作数据库的增删改查。 在tp6中ÿ…...

CodeForces.1806A .平面移动.[简单][判断可达范围][找步数规律]
题目描述: 题目解读: 给定移动规则以及起始点,终点;分析终点是否可达,可达则输出最小步数。 解题思路: 首先要判定是否可达。画图可知,对于题目给定的移动规则,只能到达起始点(a,b…...

Linux系统编程学习 NO.4 ——基础指令学习、操作系统时间的概念、文件压缩包的概念
1.时间相关的概念以及指令 1.1.时间相关的指令 1.1.1.date指令 date可以指定时间显示的格式:date 指定格式 选项 %H:小时 %M:分钟 %S:秒数 %Y:年份 %m:月份 %d:日 %F:相当于%Y-%m-%d %X:相当…...
leecode 数据库:601. 体育馆的人流量
导入数据: Create table If Not Exists Stadium (id int, visit_date DATE NULL, people int); Truncate table Stadium; insert into Stadium (id, visit_date, people) values (1, 2017-01-01, 10); insert into Stadium (id, visit_date, people) values (2, 20…...

gym不渲染画面的解决方案(gym版本号0.26.2)
确认gym版本号 我安装了新版gym,版本号是0.26.2,不渲染画面的原因是,新版gym需要在初始化env时新增一个实参render_mode‘human’,并且不需要主动调用render方法,官方文档入门教程如下 import gym import numpy as n…...

如何在 Fedora 37 上安装 FileZilla?
FileZilla 是一款流行的开源 FTP(文件传输协议)客户端,它提供了一个直观的界面来管理和传输文件。本文将详细介绍如何在 Fedora 37 上安装 FileZilla。以下是安装过程的详细步骤: 步骤一:更新系统 在安装任何软件之前…...

网终安全技术(刘化君)课后被略的答案
目录 8.HTTP客户机与Wb服务器通信通常会泄露哪些信息? 9.在TCP连接建立的3次握手阶段,攻击者为什么可以成功实施SYN Flood攻击?在实际中,如何防范此类攻击? 常用的网络漏洞扫描技术有哪几种?试举例说明。…...
架构思想之DDD
领域驱动设计(Domain-Driven Design,简称DDD)是一种架构思想,旨在通过将业务问题领域化,将业务逻辑放在核心领域中,以实现更好的软件设计和可维护性。下面将介绍如何实现DDD的Java实现,包括如何…...

FinClip | 2023 年 4 月产品大事记
我们的使命是使您(业务专家和开发人员)能够通过小程序解决您的关键业务流程挑战。不妨让我们看看在本月的产品与市场发布亮点,看看它们如何帮助您实现目标。 产品方面的相关动向👇👇👇 全新版本的小程序统…...
试论什么是圣人境界
人类进化方向就是不断的提高智力。鼓吹体力都是反人类。 圣人是人类能够达到的最高境界,再上一层就是神了。按照中华传统,说圣人就是神也是正确的。 圣人境界是什么样子的?在这一点上,孔子给予了答案:吾道一以贯之。掌…...

在外远程登录局域网下的象过河ERP管理系统,无需公网IP
文章目录 概述1.查看象过河服务端端口2.内网穿透3. 异地公网连接4. 固定公网地址4.1 保留一个固定TCP地址4.2 配置固定TCP地址 5. 使用固定地址连接 转发自CSDN远程穿透的文章:公网远程访问公司内网象过河ERP系统「内网穿透」 概述 ERP系统对于企业来说重要性不言而…...

golang 服务中 context 超时处理的思考
文章目录 前言起因:日志告警引发的思考什么是contextcontext的作用context超时之后继续执行 or 中断 最后 前言 公司运行的服务代码中,随处可见各种各样的日志信息,其中大多数是用来记录各种异常的日志,一方面,当出现…...
遇到Uniapp配置meta不生效怎么解决
Uniapp是一种基于 Vue.js 的跨平台应用开发框架,其开发简单、易上手,可以快速构建出 iOS、Android 和 H5 页面,成为现在移动应用开发的重要工具之一。然而,跨平台应用的开发也带来了一些问题,比如本文即是解决 uniapp …...
C语言基础知识:位与位字段
目录 位与字节 位 比特 字节 对齐特性 位字段 位与字节 位 二进制数系统中,每个0或1就是一个位(bit),位是数据存储的最小单位。其中8 bit就称为一个字节(Byte)。计算机中的CPU位数指的是CPU一次能处理的最大位数࿰…...

新版android studio gradle插件7.4.2.pom一直无法下载问题
android studio同步时候出现org.gradle.api.plugins.UnknownPluginException,Plugin [id: com.android.application, version: 7.4.2] was not found in any of the following sources: pom插件一直无法下载,搞了好几天,简直想砸电脑&#x…...
Shell——变量和引用
1.总结变量的类型及含义? 2.实现课堂案例计算长方形面积?(6种方式) 3.定义变量urlhttps://blog.csdn.net/weixin_45029822/article/details/103568815 (通过多种方法实现) 1)截取网站访问的协…...

实际开发中一些实用的JS数据处理方法
写在开头 JavaScript 是一种脚本语言,最初是为了网页提供交互式前端功能而设计的,而现在,通过 Node.js,JavaScript 还可以用于编写服务器端代码。 JavaScript 具有动态性、基于原型的面向对象特性、弱类型、多范式、支持闭包执行…...

练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...
【WebSocket】SpringBoot项目中使用WebSocket
1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖,添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...