当前位置: 首页 > news >正文

【C++初阶(一)】学习前言 命名空间与IO流

本专栏内容为:C++学习专栏,分为初阶和进阶两部分。 通过本专栏的深入学习,你可以了解并掌握C++。

💓博主csdn个人主页:小小unicorn
⏩专栏分类:C++
🚚代码仓库:小小unicorn的代码仓库🚚
🌹🌹🌹关注我带你学习编程知识

C++初阶(一)

  • 什么是C++
  • C++发展史
  • C++现状:
  • C++在工作领域中的应用
  • C++入门部分
    • C++关键字:
    • 命名空间:
      • 命名空间定义:
      • 命名空间的使用:
        • 方法一:加命名空间名称及作用域限定符(不展开命名空间)
        • 方法二:使用using将命名空间中某个成员引入(展开空间中部分内容)
        • 方法三:使用using namespace 命名空间名称 引入(展开空间中全部内容)
      • 对命名空间展开的思考
      • C++输入与输出:
        • cout(标准输出对象(控制台))
        • cin(标准输入对象(键盘))

什么是C++

C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。

C++发展史

1979年,贝尔实验室的本贾尼等人试图分析unix内核的时候,试图将内核模块化,于是在C语言的基础上进行扩展,增加了类的机制,完成了一个可以运行的预处理程序,称之为C with classes。

我们先来看下C++的历史版本:
在这里插入图片描述
现在公司主流使用还是C++98和C++11。

关于C++2X最新特性的讨论:
https://zhuanlan.zhihu.com/p/107360459

C++现状:

C/C++在TIOBE编程语言社区
常年位居前五
在23年更是霸榜前三!
在这里插入图片描述

C++在工作领域中的应用

  1. 操作系统以及大型系统软件开发
  2. 服务器端开发
  3. 游戏开发
  4. 嵌入式和物联网领域
  5. 数字图像处理
  6. 人工智能
  7. 分布式应用

C++入门部分

C++关键字:

C++总计63个关键字,C语言32个关键字。
在这里插入图片描述

命名空间:

在介绍命名空间之前,先看下面代码所示:

#include<stdio.h>int rand = 10;int main()
{printf("%d", rand);return 0;
}

这个代码很简单,实现的功能就是打印rand函数的值。(这里赋值为10.并且以全局变量定义)

那我们在这个代码实现的基础上加一个头文件:

#include<stdlib.h>

也就是说:

#include<stdio.h>
#include<stdlib.h>int rand = 10;int main()
{printf("%d", rand);return 0;
}

我们看一下在编译器中运行的结果:
在这里插入图片描述
加了个头文件后,编译器报错了,这是为什么呢?

我们看报错原因:说是rand函数重定义。这是因为在库中已经有了rand这个函数,如果再次使用rand这个名字定义变量或者函数时,编译器会分不清你到底想使用哪个rand,因而报错。

那么如何解决这个问题呢?
这就是我们要首先介绍的命名空间

C++为了解决C语言上述的问题
引出了命名空间这种玩法
(C++兼容C语言的所有语法)

命名空间定义:

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。

 //NIC是命名空间的名字,一般开发中是用项目名字做命名空间名。
namespace NIC
{// 命名空间中可以定义变量/函数/类型int rand = 10;//变量int Add(int left, int right)//函数{return left + right;}struct Test//结构体{int a[10];int val;};
}

命名空间相当于一个独立的作用域
命名空间中所有内容都局限于该命名空间中

在这里插入图片描述

当然,命名空间也可以嵌套:

namespace NIC
{// 命名空间中可以定义变量/函数/类型int rand = 10;//变量int Add(int left, int right)//函数{return left + right;}struct Test//结构体{int a[10];int val;};//命名空间的嵌套:namespace NIC2{int a;int b;int sum(int x, int y){return x + y;}struct Student{int ID;char Name[20];};}
}

命名空间的使用:

那么我们回到我们最初的那个问题,既然我们现在知道了是函数冲突产生的问题,并且用命名空间解决,那么如何使用呢?

先看下面代码示例:

int main()
{printf("%d", NIC::rand);return 0;
}

我们刚才把rand函数包装在了我们的命名空间里,这里我们要打印rand的值,采用了命名空间名+::的形式,这就是使用命名空间的第一种方法:加命名空间名称及作用域限定符。

方法一:加命名空间名称及作用域限定符(不展开命名空间)

:: 域作用限定符。
通过域作用符我们就可以访问命名空间中的成员:

int main()
{printf("%d\n", NIC::rand);int b = NIC::Add(1, 3);printf("%d", b);struct NIC::Test node;return 0;
}

结果显示:
在这里插入图片描述

这个代码示例我们访问了我们命名空间里面的rand和Add函数。最后一个我们开辟了结构体的新节点。

方法二:使用using将命名空间中某个成员引入(展开空间中部分内容)

假设NIC空间中的rand使用频率很高
可以将rand变量单独展开到全局域

using NIC::rand;

假设NIC空间中的Add函数使用频率很高
可以将Add函数单独展开到全局域

using NIC::Add;

看一下测试代码:

using  NIC::rand;
int main()
{int b = rand;//rand展开直接用int c = NIC::Add(3, 5);//Add没有展开,需要用域作用符::访问printf("%d\n%d", b, c);return 0;
}

结果如下:
在这里插入图片描述

方法三:使用using namespace 命名空间名称 引入(展开空间中全部内容)

在空间NIC后面加上

using namespace NEO;

这句话的意思是:
将空间NIC展开为全局域

我们在看C++程序时经常看见:

using namespace std;

std就是C++的标准库。

当NIC空间被展开后
空间里的所有内容可以直接使用:

namespace NIC
{// 命名空间中可以定义变量/函数/类型int rand = 10;//变量int Add(int left, int right)//函数{return left + right;}struct Test//结构体{int a[10];int val;};//命名空间的嵌套:namespace NIC2{int a;int b;int sum(int x, int y){return x + y;}struct Student{int ID;char Name[20];};}
}using namespace NIC;
int main()
{int b = rand;printf("%d", b);return 0;
}

结果如下:
在这里插入图片描述

对命名空间展开的思考

假设我们将自定义NIC空间和标准库的std空间同时展开
那么整型变量rand和rand函数同时暴露在全局域
我们再去使用它时也会报错:

using namespace std;
using namespace NIC;

所以直接展开std标准库也有冲突风险
但是不展开的话,写输入输出会很麻烦

那么平时写代码时应该怎么办?
结论:

1.写项目时,尽量不要展开标准库
2.日常练习时应该展开标准库
3.写项目使用部分常用内容展开

C++输入与输出:

C语言输入输出方式,相信大家都并不陌生,那么C++如何输入输出呢?

在C++中,输入输出用的是IO流,跟C语言一样,在使用C++输入输出前要包含一个头文件:

#include<iostream>

其次,因为输入输出函数直接在库里面,我们可以直接展开std库也可以访问std库。

using namespace std;
using std::cout
using std::cin
using std::endl

具体用什么方式应人而异,根据自己习惯选择。

cout(标准输出对象(控制台))

C++中用:cout<< 来进行打印输出。(console:控制台 out:输出)
<<:流插入运算符

using std::cout;
int main()
{cout << "hello world\n";return 0;
}

输出结果:
在这里插入图片描述

从代码示例,我们可以理解为:hello word字符串就是流,流向到对象(终端)中去,进行打印输出。

补充1:
在C语言中,根据类型不同,我们用printf函数打印的时候,需要指定格式才能打印:

int main()
{int a = 10;double b = 5.5;printf("%d %.2lf", a, b);return 0;
}

但是我们C++中,会自动识别类型:

using std::cout;
int main()
{cout << "hello world\n";int a = 10;double b = 5.5;cout << a<<"\n";cout << b;return 0;
}

输出结果:
在这里插入图片描述
不仅如此:打印的时候我们可以多次用<<流插入运算符。

using std::cout;
int main()
{cout << "hello world\n";int a = 10;double b = 5.5;cout << a<<"\n"<<b<<"\n"<<"hello world\n"<<'\n';return 0;
}

输出结果:
在这里插入图片描述
补充2:
在C++中,我们可以用endl来表示换行符。(end:结尾 Line:行)

int main()
{// IO流// 自动识别输出变量的类型// <<流插入std::cout << "hello world\n";int a = 10;double b = 11.11;//std::cout << a << "\n";//std::cout << b << "\n";std::cout << a << "\n" << b << '\n';std::cout << a << std::endl << b << std::endl;return 0;
}

输出结果:
在这里插入图片描述

cin(标准输入对象(键盘))

C++中用:cin>>来进行获取键盘输入。(console:控制台 in:里面)
<<:流提取运算符

using  std::cin;
using  std::cout;
using  std::endl;
int main()
{int a;double b;// 流提取cin >> a >> b;cout << a  << endl << b << endl;cout << a << endl << b << endl;return 0;
}

输出结果:
在这里插入图片描述

注意:关于cout和cin还有很多更复杂的用法,比如控制浮点数输出精度,控制整形输出进制格式等等。因为C++兼容C语言的用法,这些又用得不是很多,我们这里就不展开学习了。后续如果有需要,我
们可以进行网上查阅并仔细学习。

相关文章:

【C++初阶(一)】学习前言 命名空间与IO流

本专栏内容为&#xff1a;C学习专栏&#xff0c;分为初阶和进阶两部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握C。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;C &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&…...

flask vue跨域问题

问题&#xff1a; 调试时候跨域访问报&#xff1a; Request header field authorization is not allowed by Access-Control-Allow-Headers in preflight response. 解决办法&#xff1a; 安装flask_cros from flask_cors import CORS CORS(app) app.after_request def a…...

stm32(二十)IAP升级优化(双缓存,可恢复)

这次主要对STM32F103/Keil和LPC2478/IAR加了一个IAP在线升级功能&#xff0c; 主要记录一下自己的思路&#xff0c;无代码&#xff0c;实在是代码感觉没啥写的&#xff0c;都是一些网上很多流传的东西。 1、开发环境 Keilstm32f103JLINK 2、程序思路 在升级中&#xff0c;必…...

HDLbits:Exams/ece241 2013 q4

本题是一个实际的应用问题&#xff0c;一个水库&#xff0c;有三个传感器S1、S2、S3提供输入&#xff0c;经过控制电路&#xff0c;四个输出给到四个流量阀。也就是说&#xff0c;本题想让我们根据水位去控制流量阀。 问题的关键在于把什么抽象成state&#xff0c;答案是&…...

什么是React的虚拟DOM(Virtual DOM)?它的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…...

Response Status Code 301、302

目录 Information Django redirect Influence Information HTTP状态码301、302和304分别表示以下情况&#xff1a; codeinformation301&#xff08;Moved Permanently&#xff09; 永久重定向。当请求的资源已经被永久地移动到了一个新的URI时&#xff0c;服务器会返回这个…...

import { ref, onMounted, reactive } from ‘vue‘

ref, onMounted, reactive 用于创建和操作响应式数据、生命周期钩子。 1.ref 用来创建一个响应式的引用&#xff08;Reactive Reference&#xff09;的函数&#xff0c;主要用于创建基本数据类型&#xff08;如数字、字符串等&#xff09;的响应式数据。 通过 ref 创建的变…...

【TB作品】基于MSP430G2553单片机的超声波测距与报警系统,原理图,PCB

功能&#xff1a; 1 超声波测距显示 2 按键设置报警上下限 3 蜂鸣器报警 原理图&#xff1a; PCB样式&#xff1a; 实物&#xff1a; 代码&#xff1a; https://github.com/xddun/blog_code_search...

npm install报错

在命令提示符窗口下载npm&#xff0c;报错如下&#xff1a; $npm install报错信息如下&#xff1a; npm WARN old lockfile npm WARN old lockfile The package-lock.json file was created with an old version of npm, npm WARN old lockfile so supplemental metadata must…...

Flutter自定义model实体类

在某些场景下&#xff0c;我们可能需要自定义Flutter model实体类&#xff0c;来创建更加结构化和有组织的代码&#xff0c;提高代码的可重用性&#xff0c;并增强Flutter应用程序的整体可维护性。 自定义小部件:在创建自己的小部件时&#xff0c;可能需要定义自定义数据类型来…...

java项目实现不停服更新的4种方案(InsCode AI 创作助手)

文章目录 1. Blue-Green 部署2. 滚动更新3. 使用负载均衡器4. 灰度发布 在软件开发和维护中&#xff0c;不停机更新是确保应用程序持续可用的关键任务之一。以下是四种常见的不停机更新策略及其示例&#xff1a; 1. Blue-Green 部署 概念&#xff1a; Blue-Green 部署是一种部…...

7.1 yolov5优化模型时,自动标注xml数据

yolov5优化模型时&#xff0c;一般需要继续标注一些检测错误的图片&#xff0c;将其标为xml数据。以下是根据训练好的模型自动标注xml数据的python代码&#xff1a; 注意&#xff1a;代码中包含了本人的yolov5的测试过程&#xff0c;测试过程可以自己根据yolov5的测试文件自行…...

开发者职场“生存状态”大调研报告分析 - 第一版

听人劝、吃饱饭,奉劝各位小伙伴,不要订阅该文所属专栏。 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 跨域学习者,从事过全栈研发、产品经理等工作,现任研发部门 CTO 。荣誉:2022年度博客之星Top4、博客专家认证、全栈领域优质创作者、新星计划导师,“星荐官共赢计…...

在MySQL中使用!=还能走索引吗?

在MySQL中使用!还能走索引吗&#xff1f; 一般情况下&#xff0c;我们会在一个索引上较多的使用等值查询或者范围查询&#xff0c;此时索引大多可以帮助我们极快的查询出我们需要的数据。 那当我们在where条件中对索引列使用!查询&#xff0c;索引还能发挥他的作用吗&#xf…...

【算法题】2897. 对数组执行操作使平方和最大

题目&#xff1a; 给你一个下标从 0 开始的整数数组 nums 和一个 正 整数 k 。 你可以对数组执行以下操作 任意次 &#xff1a; 选择两个互不相同的下标 i 和 j &#xff0c;同时 将 nums[i] 更新为 (nums[i] AND nums[j]) 且将 nums[j] 更新为 (nums[i] OR nums[j]) &#…...

2023年中国划船机产量、销量及市场规模分析[图]

划船机是一种健身器材&#xff0c;它模拟了划船的运动&#xff0c;可以锻炼身体的肌肉力量和协调性。划船机通常由座椅、把手、脚踏板和传动装置组成&#xff0c;使用者可以通过拉动把手来模拟划船的动作&#xff0c;从而达到锻炼身体的目的。 划船机产业链 资料来源&#xff…...

Kafka和RabbitMQ的对比

Rabbitmq比kafka可靠&#xff0c;kafka更适合IO高吞吐的处理&#xff0c;比如ELK日志收集 Kafka和RabbitMq一样是通用意图消息代理&#xff0c;他们都是以分布式部署为目的。但是他们对消息语义模型的定义的假设是非常不同的。 a) 以下场景比较适合使用Kafka。如果有大量的事…...

ffmpeg从一个视频中提取音频

ffmpeg -i ~/video/video.mp4 -vn -acodec copy ~/video/audioFile.m4a 从video.mp4中提取音频到文件audioFile.m4a中 查看提取的音频文件 ffprobe ~/video/audioFile.m4a...

CCF CSP题解:坐标变换(其一)(202309-1)

链接 OJ链接&#xff1a;传送门 AC代码 #include <iostream>using namespace std;int n, m;int dx 0, dy 0;int main() {cin >> n >> m;for (int i 0; i < n; i) {int x, y;cin >> x >> y;dx x;dy y;}for (int i 0; i < m; i) {i…...

跳表C语言

【C语言】算法学习跳表_c语言跳表-CSDN博客 leetcode原题&#xff0c;代码如下 #define MAX(a, b) ((a) > (b) ? (a) : (b)) const int MAX_LEVEL 32; const int P_FACTOR RAND_MAX >> 2;typedef struct SkiplistNode {int val;int maxLevel;struct SkiplistNode…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

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…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...