【C++】认识C++(一)

 

前言 

📚作者简介:爱编程的小马,是一名大厂后端c++程序员。

📚本文收录于c++系列,本专栏主要是分享我所了解的c++知识,带领大家慢慢从了解c++到认识c++,持续更新!

📚本文主要内容:带大家先认识一下c++,其中包含命名空间,输入输出,标准库,以及缺省参数

目录

1.认识c++

1.1 命名空间

1.1.1 命名空间的定义 

1.1.2 命名空间的访问

2.1 c++的输入和输出

2.1.1 输入

2.2.2 输出

 2.2.3 c++的标准库

3.1 缺省参数

3.1.1 缺省参数的概念 

 3.1.2 缺省参数的分类

3.1.3 缺省参数的应用

总结


1.认识c++

1.1 命名空间

给大家讲解命名空间之前,先引入一个C语言的例子

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

这段代码,报错了,报了一个rand重定义,因为rand在头文件是函数,预处理就会将头文件展开,导致和整型变量重复了。下面来看看c++是如何处理的: 

在c/c++中,变量、函数、结构体(类)都是大量存在的,那么这些名称就会存在很多冲突,你用了这个名称,其他人就必须要改变自己的名称,那么在c++里有引入命名空间,其作用是用来对标识符的名称进行本地化,以避免命名冲突。namespace关键字就是在这个基础上产生的。

注意: 命名空间中可以定义变量,可以定义函数,可以定义结构体

1.1.1 命名空间的定义 

namespace boke
{int m = 20;int Add(int x, int y){return x + y;}struct student{int age;char name[20];long number;};
}

1.1.2 命名空间的访问

那么命名空间中的成员如何访问呢?有三种方法

●加命名空间名称及作用域限定符(::)

#include<iostream>
using namespace std;
namespace boke
{int m = 20;int Add(int x, int y){return x + y;}struct student{int age;char name[20];long number;};
}int main()
{cout << boke::m << endl;return 0;
}

●局部展开命名空间,使用using关键字

#include<iostream>
using namespace std;
namespace boke
{int m = 20;int Add(int x, int y){return x + y;}struct student{int age;char name[20];long number;};
}
using boke::m;
int main()
{cout << m << endl;return 0;
}

 ●全局展开命名空间,using namespace+命名空间名称

#include<iostream>
#include<string.h>
using namespace std;
namespace boke
{int m = 20;int Add(int x, int y){return x + y;}struct student{int age;char name[20];long number;};
}
using namespace boke;
int main()
{int a = 5;int b = 6;cout << m << endl;cout << Add(a, b) << endl;student s1;s1.age = 10;strcpy(s1.name, "lisi");s1.number = 194056789;cout << s1.age << endl;cout << s1.name << endl;cout << s1.number << endl;return 0;
}

注意: 全局展开命名空间很危险,可能还是会导致命名冲突,建议还是加作用域限定符进行访问

2.1 c++的输入和输出

2.1.1 输入

在c++中,使用输入输出时必须包含头文件iostream,以及命名空间std。

cin(标准输入对象)是c++中全局的流对象,是istream的对象,">>"是流提取运算符

c++中不用手动控制格式,编译器会自动识别。


#include<iostream>
using namespace std;int main()
{int m = 0;double d = 0;cin >> m >> d;cout << m << endl;cout << d << endl;return 0;
}

例如输入100 ,99.9 键盘上用空格隔开两个数即可 

 

2.2.2 输出

在c++中,使用输入输出时必须包含头文件iostream,以及命名空间std。

cout(标准输入对象)是c++中全局的流对象,是ostream的对象,"<<"是流插入运算符

c++中不用手动控制格式,编译器会自动识别。

 2.2.3 c++的标准库

推荐大家使用以下方法来包含标准库的头文件

#include<iostream>
using namespace std;

3.1 缺省参数

3.1.1 缺省参数的概念 

缺省参数是定义或声明函数时,为函数的参数设置的一个缺省值。在调用函数时,如果没有设定该参数,则使用缺省参数,否则使用设定的参数。 

#include<iostream>
using namespace std;void fun1(int a = 10)
{a++;cout << a << endl;
}int main()
{fun1();return 0;
}

 这个会输出什么结果?上面降到了,如果没有给值,那就使用缺省值,会输出11;

如果给了一个值,就会用这个值而不会使用缺省值。

 3.1.2 缺省参数的分类

全缺省参数

#include<iostream>
using namespace std;void func(int a = 10, int b = 20, int c = 30)
{cout << "a=" << a << endl;cout << "b=" << b << endl;cout << "c=" << c << endl;cout << endl;
}int main()
{func();func(15);func(15,16);func(15, 16, 17);return 0;
}

全缺省可以传一个,传两个,传三个,也可以不传。

半缺省参数 

注意:半缺省不是指缺省一半,而是一部分是缺省参数,一部分是函数参数

#include<iostream>
using namespace std;void func(int a , int b , int c = 30)
{cout << "a=" << a << endl;cout << "b=" << b << endl;cout << "c=" << c << endl;cout << endl;
}
int main()
{func(1,2);func(1,2,3);return 0;
}

注意:1、半缺省必须从右到左连续给出,不能间隔给 

           2、缺省参数不能同时在定义和声明中给出

           3、缺省值必须是常量或者是全局变量

           4、C语言不支持缺省参数 

3.1.3 缺省参数的应用

随便举一个例子,用顺序表给出一个例子,比如说,我们在学习数据结构的时候,总会说,一开始开不开空间,开多大的空间?下面来看缺省参数的好处

#include<iostream>
using namespace std;struct SeqList
{int* a;int size;int capacity;void SeqListInit(SeqList* s , int capacity = 4){int* tmp = (int*)malloc(sizeof(int) * capacity);if (tmp == nullptr){perror("malloc failed");return;}s->a = tmp;s->capacity = capacity;s->size = 0;}void checkcapacity(SeqList* s){if (s->size == s->capacity){cout << "扩容" << s->capacity << endl;int* tmp = (int*)realloc(s->a, sizeof(int) * capacity * 2);if (tmp == nullptr){perror("malloc failed");return;}s->a = tmp;s->capacity *= 2;}}void SeqListInsert(SeqList* s, int x){checkcapacity(s);s->a[s->size++] = x;}
};int main()
{SeqList s1;s1.SeqListInit(&s1,101);for (int i = 0; i <= 100; i++){s1.SeqListInsert(&s1, i);}for (int i = 0; i <= 100; i++){cout<<s1.a[i]<<" ";}return 0;
}

这个情况就很好用,就是呢我知道要开多大空间,存储多少内存,那我就定义capacity,如果我不知道,那就默认开4个空间,十分好用。 

总结

本文从c++的认识切入,带大家了解了命名空间,输入输出,标准库,以及缺省参数;明天给大家更新函数重载,引用等主要知识,今天只是为c++开个小头。

 如果这份博客对大家有帮助,希望各位给小马一个大大的点赞鼓励一下,如果喜欢,请收藏一下,谢谢大家!!!
制作不易,如果大家有什么疑问或给小马的意见,欢迎评论区留言

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

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

相关文章

纵向倾斜角、横向倾斜角、全方面监测:输电线路杆塔倾斜在线监测装置

纵向倾斜角、横向倾斜角、全方面监测&#xff1a;输电线路杆塔倾斜在线监测装置 随着我国电网建设的不断加速和电力设施分布范围的扩大&#xff0c;杆塔作为电网的重要组成部分&#xff0c;其安全稳定运行对于保障电力供应具有至关重要的意义。然而&#xff0c;由于地质条件复…

transformer论文讲解

1.标题 作者 Transformer 开创了继 MLP 、CNN和 RN 之后的第四大类模型。200页综述&#xff08;来自评论区&#xff1a; https://arxiv.org/pdf/2108.07258.pdf &#xff09;建议将Transformer作为基础模型。 标题&#xff1a;XXX is all you need. 头条标题。 Attention i…

达梦数据库的系统视图v$sqltext

达梦数据库的系统视图v$sqltext 在达梦数据库&#xff08;DM Database&#xff09;中&#xff0c;V$SQLTEXT 是一个系统视图&#xff0c;用于显示当前正在执行或最近执行的SQL语句的文本信息。这个视图对于监控和分析数据库中的SQL活动非常有用&#xff0c;尤其是在需要调试性…

C语言 | Leetcode C语言题解之第235题二叉搜索树的最近公共祖先

题目&#xff1a; 题解&#xff1a; struct TreeNode* lowestCommonAncestor(struct TreeNode* root, struct TreeNode* p, struct TreeNode* q) {struct TreeNode* ancestor root;while (true) {if (p->val < ancestor->val && q->val < ancestor-&g…

结构体和联合体的区别

1. 结构体(Struct) 在 C 语言中&#xff0c;结构体是一种自定义的复合数据类型&#xff0c;允许将不同数据类型的变量组合成一个单一的实体。结构体可以包含多个成员&#xff0c;每个成员可以是不同的数据类型&#xff0c;如整数、浮点数、字符、数组等。 结构体的定义通常在函…

【接口自动化_12课_基于Flask搭建MockServer】

知识非核心点,面试题较少。框架搭建的过程中的细节才是面试要点 第三方接口,不方便进行测试, 自己要一个接口去进行模拟。去作为我们项目访问模拟接口。自己写一个接口,需要怎样写 一、flask:轻量级的web应用的框架 安装命令 pip install flask 1、flask-web应用 1)…

Blackbox AI:你的智能编程伙伴

目录 Blackbox AI 产品介绍 Blackbox AI 产品使用教程 Blackbox AI体验 AI问答 代码验证 实时搜索 探索&代理 拓展集成 总结 Blackbox AI 产品介绍 Blackbox是专门为程序员量身定制的语言大模型&#xff0c;它针对20多种编程语言进行了特别训练和深度优化&#xff0c;在AI代…

Qt第十二章 样式表

样式表 文章目录 样式表1.样式表盒子模型 2.选择器选择器类型伪状态选择器Pseudo-State 3.控件示例4继承自QWidget的类&#xff0c;设置qss样式表没有效果&#xff0c;需要重写paintEvent 1.样式表 盒子模型 2.选择器 样式表语法&#xff0c;选择器{属性1:值;属性2:值;}如果只…

七款热门企业数据加密软件推荐|2024年加密软件最新整理出炉!

古言到&#xff1a;“知己知彼&#xff0c;百战不殆。” 当今时代&#xff0c;数据为王&#xff01; 企业数据的保护已成为竞争中的关键一环。 数据加密软件作为守护企业数字资产的利剑&#xff0c;其重要性日益凸显。 2024年&#xff0c;市场上涌现出一批功能强大、特色鲜…

Vue入门之v-on、v-model、v-if

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

高效实现GIS地图可视化,这款免费工具不可错过

GIS地图可视化怎么做&#xff1f;山海鲸可视化这款免费可视化工具帮你轻松搞定。从三维GIS地图可视化需求出发&#xff0c;山海鲸可视化提供了强大的GIS场景编辑功能&#xff0c;包括支持添加倾斜摄影和地形编辑。无论是复杂的地形调整还是细致的倾斜摄影添加&#xff0c;这款工…

【C++初阶】模板初阶

【C初阶】模板初阶 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;C&#x1f96d; &#x1f33c;文章目录&#x1f33c; 1. 泛型编程 2. 函数模板 2.1 函数模板的概念 2.2 函数模板格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.…

【C++修炼之路 第四章】模板 初阶

引入&#xff1a; 我们平时需要调用这样的函数时&#xff0c;往往需要写不同类型的函数用于匹配操作不同类型变量 void Swap(int& a, int& b) {// ... } void Swap(double& a, double& b) {// ... } //......像上面代码中函数重载有一下几个不好的地方&#…

filebeat,kafka,clickhouse,ClickVisual搭建轻量级日志平台

springboot集成链路追踪 springboot版本 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.3</version><relativePath/> <!-- lookup parent from…

Stateflow中的状态转换表

状态转换表是表达顺序模态逻辑的另一种方式。不要在Stateflow图表中以图形方式绘制状态和转换&#xff0c;而是使用状态转换表以表格格式表示模态逻辑。 使用状态转换表的好处包括&#xff1a; 易于对类列车状态机进行建模&#xff0c;其中模态逻辑涉及从一个状态到其邻居的转换…

处理uniapp刷新后,点击返回按钮跳转到登录页的问题

在使用uniapp的原生返回的按钮时&#xff0c;如果没有刷新会正常返回到对应的页面&#xff0c;如果刷新后会在当前页反复横跳&#xff0c;或者跳转到登录页。那个时候我第一个想法时&#xff1a;使用浏览器的history.back()方法。因为浏览器刷新后还是可以通过右上角的返回按钮…

SpringBoot限制请求访问次数

本篇文章的主要内容是SpringBoot怎么限制请求访问次数。 当我们的服务端程序部署到服务器上后&#xff0c;就要考虑很多关于安全的问题。总会有坏人来攻击你的服务&#xff0c;比如说会窃取你的数据或者给你的服务器上强度。关于给服务器上强度&#xff0c;往往就有高强度给服务…

​1:1公有云能力整体输出,腾讯云“七剑”下云端

【全球云观察 &#xff5c; 科技热点关注】 曾几何时&#xff0c;云计算技术的兴起&#xff0c;为千行万业的数字化创新带来了诸多新机遇&#xff0c;同时也催生了新产业新业态新模式&#xff0c;激发出高质量发展的科技新动能。很显然&#xff0c;如今的云创新已成为高质量发…

[React 进阶系列] useSyncExternalStore hook

[React 进阶系列] useSyncExternalStore hook 前情提要&#xff0c;包括 yup 的实现在这里&#xff1a;yup 基础使用以及 jest 测试 简单的提一下&#xff0c;需要实现的功能是&#xff1a; yup schema 需要访问外部的 storage外部的 storage 是可变的React 内部也需要访问同…

VulnHub:CK00

靶场搭建 靶机下载地址&#xff1a;CK: 00 ~ VulnHub 下载后&#xff0c;在vmware中打开靶机。 修改网络配置为NAT 处理器修改为2 启动靶机 靶机ip扫描不到的解决办法 靶机开机时一直按shift或者esc直到进入GRUB界面。 按e进入编辑模式&#xff0c;找到ro&#xff0c;修…