初识C++(一)

目录

一、什么是C++

二、关键字:

三、命名空间 :

1. C语言存在的问题:

2. namespace关键字:

3. 注意点:

4.使用命名空间分为三种:

四、输入输出:

五、缺省函数:

        1. 什么是缺省函数:

        2.注意点: 

        3. 这个省略函数的用途: 


一、什么是C++

        C++是一种面向对象的高级程序设计语言。

        C++是在C语音的基础上,添加了一些祖师爷在写代码的时候的一些困惑。把他自己的想法在C语言的基础上实现。因此C++也可以兼容C语言。

二、关键字:

        c++ 一共63个关键字

        对比c语言的32个更多了一些,在之后的学习中我会挑一部分来讲

三、命名空间 :

1. C语言存在的问题:

        在预处理的时候,会把#include<stdlib.h>展开,里面也有rand,这个是作用在全局域中,然后你又在全局域中定义了一个rand变量。这就是名字冲突,在C语言中没有很好的解决方法,只能通过改名字。

        但是在实际的项目中,由不同小组的人完成,刚好他们都用到了同一个变量名,C语言的话就只能他们两个干一架,决定名字的使用权。

在C++中就引入了一个命名空间

2. namespace关键字:

namespace ABC
{...
}

        像这样子就把你写的代码放到了一个名字叫ABC的域中(建起了一座围墙,如果你不开一条路,你就不能访问里面的东西)

        在正常情况下,编译会先去局部空间中查找有没有这个变量,然后再去全局中找。如果没有找到,也没有using namespace的话,不会到命名空间中找。(就相当于建起了一座保护墙)


3. 注意点:

       1)  namespace的命名空间:

              只影响使用,不影响生命周期。因为namespace的命名空间也是全局域的,只是编译器不去查找,不要自我认为它不是全局域的。

       2)可以嵌套使用namespace关键字

namespace ABC
{namespace DEF{int a;}
}

        这样子使用的时候是ABC::DEF::a=10;

       3)标准库的命名空间是std   也就是说你要使用标准库的cout等,

你需要包含#include<iostream>  然后在用的时候std::cout<<i<<std::endl;

        4)多个文件中定义的域的名字相同,会把他们合并起来。

         讲了什么是命名空间之后,我再讲命名空间怎么使用,其实上面我已经提到了一些。在这里我再详细说一下。

         讲的时候会涉及到::符号,::域作用限定符,会去前面提到的域中查找,如果前面为空,就去全局去找,不会在其他域中查找。

std::cout<<i<<std::endl;//endl相当于换行,和printf("\n");一样的效果
::n=10;//前面没有提到是什么域,就会去全局域中查找

4.使用命名空间分为三种:

1.全局展开:

#include<iostream>
using namespace std;//全局展开
int main()
{int i;cin>>i;cout<<i<<endl;
}

        辛辛苦苦把墙建起来,用了全局展开,就相当于把墙给拆掉了。

        在练习的代码中,可以这么干,因为就几十行的代码,大不了我们把命名改了。

        但是在项目的时候,一定不能这么写。那是十几万行的代码。很容易和其他组的人写重名。

2.局部展开:

#include<iostream>
using std::endl;
using std::cout; 
int main()
{int i=10;std::cin>>i;cout<<i<<endl;
}

        展开一部分比较常用的,如果不展开,每一次都写,太繁琐了。

3.不展开:

        在每一次要用的时候就  域::变量; 

四、输入输出:

       <<   符号是流插入运算符

        比我们c语言方便的一点是 可以自动识别类型。

        我们这里cin是一个标准输入流,cout是标准输出流。 

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
int main()
{int i = 0;std::cin >> i;double* arr = (double*)malloc(sizeof(double) * i);if (arr == NULL){perror("malloc error");exit(-1);}for (int j = 0; j < i; j++){std::cin >> arr[j];}for (int j = 0; j < i; j++){std::cout << arr[j]<<std::endl;}return 0;
}

        可以看出,cin可以自动识别类型。你可以觉得不怎么样。但是到后面结构体那些的时候就会很方便了。

五、缺省函数:

        1. 什么是缺省函数:

         函数传参的时候,如果不想传,也可以不传,会有一个默认参数值。

void fun(int a = 0)
{std::cout << a << std::endl;
}
int main()
{fun(1);fun();return 0;
}

        如果传了参数,int a=0就不起作用。

        这个0就是舔狗界的王。当人家有男票的时候,你有多远就走多远。当人家没有男票的时候,你就屁颠屁颠的靠近。 

        2.注意点: 

        不能跳跃,省略参数必须从右往左连续缺省。

        因为实参是从左往右传的。

//不能跳跃
//省略参数必须从右往左连续缺省       如func(int a=10;int b;int c=30) -->错误的,要从右往左缺省
//                                  func(int a;int b=20;int c=30) -->对的
//因为实参是从左往右传给形参的
void func(int a = 10, int b = 20, int c = 30)
{std::cout << a << std::endl;std::cout << b << std::endl;std::cout << c << std::endl;
}
int main()
{func(1);func(1, 2);func(1, 2, 3);return 0;
}

        3. 这个省略函数的用途: 

        当你初始化栈的时候,不可以写死,一开始就开4个大小的空间。那如果需要100万的空间,那你还需要不断的扩容。

        你可能知道最大的空间是多少,那你就直接传参。

        有可能你也不知道传多大。那就什么都不传。

        这个情况就很适合用缺省函数了。

//用途在初始化的时候,很灵活,只要你知道你想开多少的空间,就按你传的数据来,如果你不知道想要传多少,就用缺省产生
typedef struct stack
{int* arr;int top;int capacity;
}stack;
void stackInit(stack* st, int a = 4)
{st->arr = (int*)malloc(sizeof(int*) * a);if (st->arr == NULL){perror("malloc error");exit(-1);}st->top = 0;st->capacity = a;
}
int main()
{stack st1; stack st2;stackInit(&st1,100);//在你知道最多需要100个空间的时候,你直接传进去,可以省略多次的扩容stackInit(&st2);//不传参,就一开始开辟4个空间return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ARM实验 LED流水灯

.text .global _start _start: 使能GPIOE GPIOF的外设时钟 RCC_MP_AHB4ENSETR的第[4][5]设置为1即可使能GPIOE GPIOF时钟 LDR R0,0X50000A28 指定寄存器地址 LDR R1,[R0] 将寄存器原来的数值读取出来&#xff0c;保存到R1中 ORR R1,R1,#(0x3<<4) 将第4位设置为1 S…

【STM32嵌入式系统设计与开发】——6矩阵按键应用(4x4)

这里写目录标题 一、任务描述二、任务实施1、SingleKey工程文件夹创建2、函数编辑&#xff08;1&#xff09;主函数编辑&#xff08;2&#xff09;LED IO初始化函数(LED_Init())&#xff08;3&#xff09;开发板矩阵键盘IO初始化&#xff08;ExpKeyBordInit()&#xff09;&…

如何使用 Elasticsearch 作为向量数据库

在今天的文章中&#xff0c;我们将很快地通过 Docker 来快速地设置 Elasticsearch 及 Kibana&#xff0c;并设置 Elasticsearch 为向量搜索。 拉取 Docker 镜像 docker pull docker.elastic.co/elasticsearch/elasticsearch:8.12.2 docker pull docker.elastic.co/kibana/kiba…

【Bug】记录2024年遇到的Bug以及修复方案

--------------------------------------------------------分割线 2024.3.22------------------------------------------------------- 1、load_sample_image raise AttributeError(“Cannot find sample image: %s” % image_name) AttributeError: Cannot find sample ima…

【wubuntu】披着Win11皮肤主题的Ubuntu系统

wubuntu - 一款外观类似于 Windows 的 Linux 操作系统&#xff0c;没有任何硬件限制。以下是官方的描述 Wubuntu is an operating system based on Ubuntu LTS that has a similar appearance to Windows using the open-source themes. Wubuntu also comes with a set of adva…

计算机网络——数据链路层(数据链路层功能概述)

计算机网络——数据链路层&#xff08;数据链路层功能概述&#xff09; 数据链路层的功能数据链路层的基本概念封装成帧和透明传输 我们之前已经学完了物理层的所有内容&#xff0c;今天开始我们要进入数据链路层的学习&#xff0c;如果有小伙伴对物理层的内容感兴趣的话&#…

MySQL数据库:索引

一、索引&#xff1a; 1. 索引的概念&#xff1a; 索引是一个排序的列表&#xff0c;在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址。 使用索引后可以不用扫描全表来定位某行的数据&#xff0c;而是先通过索引表找到该行数据对应的物理地址然后访问相应的数据…

Kubernetes(k8s)集群健康检查常用的五种指标

文章目录 1、节点健康指标2、Pod健康指标3、服务健康指标4、网络健康指标5、存储健康指标 1、节点健康指标 节点状态&#xff1a;检查节点是否处于Ready状态&#xff0c;以及是否存在任何异常状态。 资源利用率&#xff1a;监控节点的CPU、内存、磁盘等资源的使用情况&#xf…

vue 安装脚手架报错 certificate has expired

vue 安装脚手架的时候报错&#xff0c;报错信息如下&#xff1a; 错误信息&#xff1a;npm ERR! request to https://registry.npm.taobao.org/vue%2fcli failed, reason: certificate has expired 翻译&#xff1a;npm ERR&#xff01;请求到https://registry.npm.taobao.org…

上位机图像处理和嵌入式模块部署(qmacvisual图像预处理)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 不管大家是在读书的时候学习的图像处理&#xff0c;还是在后来的工作中&#xff0c;重新学习了图像处理&#xff0c;相信大家对图像预处理的概念并…

【Linux实践室】Linux用户管理实战指南:新建与删除用户操作详解

&#x1f308;个人主页&#xff1a;聆风吟_ &#x1f525;系列专栏&#xff1a;Linux实践室、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 一. ⛳️任务描述二. ⛳️相关知识2.1 &#x1f514;Linux创建用户命令2.1.1 知识点讲解2.1.2 案…

1Panel应用推荐:DataEase开源数据可视化分析工具

1Panel&#xff08;github.com/1Panel-dev/1Panel&#xff09;是一款现代化、开源的Linux服务器运维管理面板&#xff0c;它致力于通过开源的方式&#xff0c;帮助用户简化建站与运维管理流程。为了方便广大用户快捷安装部署相关软件应用&#xff0c;1Panel特别开通应用商店&am…

html第一次作业

常用标签 0, 骨架&#xff08;&#xff01;tap&#xff09; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><t…

mysql字段多个值,mybatis/mybatis-plus匹配查询

mysql中有一个字段是字符串类型的&#xff0c;category字段值有多个用逗号分割的&#xff0c;例如&#xff1a;娱乐,时尚美妆,美食 。现在想实现这么一个功能&#xff0c; 前端传参 字符串&#xff0c;美食,娱乐。现在想在mybatis的xml中实现&#xff0c;查询&#xff0c;能查到…

vue3+element Plus form 作为子组件,从父组件如何赋值?

刚开始接触vue3时&#xff0c;碰到一个很low的问题&#xff0c;将form作为子组件&#xff0c;在页面中给form表单项输入内容&#xff0c;输入框不显示值&#xff0c;知道问题出在哪&#xff0c;但因为vue3组合式api不熟悉&#xff0c;不知从哪下手... 效果图&#xff1a; 父组…

华为中心AP 配置入侵防御实验

配置入侵防御示例 组网图形 图1 入侵防御组网图 组网需求配置思路操作步骤中心AP的配置文件 组网需求 如图1所示&#xff0c;某企业部署了WLAN网络&#xff0c;内网用户可以访问Internet的Web服务器。现需要在中心AP上配置入侵防御功能&#xff0c;具体要求如下&#xff1a; 保…

蓝桥杯 2022 省B 李白打酒加强版

这题用递归暴力的方法如下&#xff1a; #include<iostream> #include<bits/stdc.h> using namespace std; int num; int N,M; void dfs(int now,int n,int m) {if(now<0 || n>N ||m>M)return ;if(nN && mM){if(now1)num1;return;}dfs(now-1,n,m1…

InnoDB 缓存

本文主要聊InnoDB内存结构, 先来看下官网Mysql 8.0 InnoDB架构图 MySQL :: MySQL 8.0 Reference Manual :: 17.4 InnoDB Architecture 如上图所示,InnoDB内存主要包含Buffer Pool, Change Buffer, Log Buffer, Adaptive Hash Index Buffer Pool 其实 buffer pool 就是内存中的…

C#,图论与图算法,计算无向连通图中长度为n环的算法与源代码

1 无向连通图中长度为n环 给定一个无向连通图和一个数n,计算图中长度为n的环的总数。长度为n的循环仅表示该循环包含n个顶点和n条边。我们必须统计存在的所有这样的环。 为了解决这个问题,可以有效地使用DFS(深度优先搜索)。使用DFS,我们可以找到特定源(或起点)的长度…

数据库被.[Goodmorningfriends@onionmail.org].faust勒索病毒加密,能恢复吗?

.faust勒索病毒有什么特点及危害&#xff1f; .faust勒索病毒是一种恶意软件&#xff0c;以其复杂的加密技术和勒索行为而闻名。这种病毒的主要目标是通过加密受害者的数据文件&#xff0c;然后勒索赎金以解密这些文件。它通常通过恶意附件、恶意链接或潜在的不安全下载源传播&…