1.C++入门1(c++编译过程,命名空间,C++输入输出,缺省参数)

⭐从本章开始学习c++,此篇文章作为c++专栏的第一篇文章。

⭐本人c++代码的Gitee仓库:c++学习 · 橘子真甜/yzc的c++学习 - 码云 - 开源中国 (gitee.com)

目录

一.编程过程

二.命名空间(namespace)

2.1 为何要用命名空间

2.2 命名空间的定义

2.3 使用命名空间

三. C++输入输出

3.1 cout,cin

3.2 std使用惯例

四. 缺省参数


一.编程过程

和C语言类似:c++代码编译过程也分为:预编译,编译,汇编,链接。

预编译:头文件展开,宏替换,去掉注释,条件编译。

编译:检测语法,生成汇编代码。

汇编:将汇编代码转化为可执行的二进制机器指令

链接:将多个可执行文件链接起来,并且生成可执行文件

二.命名空间(namespace)

2.1 为何要用命名空间

        在我们使用c/c++进行编程的时候,会存在大量的变量,函数,类,结构体。它们的名称都会存在全局区域中,很多时候我们会用相同的名称表示两个不同的东西。这样一来就会导致命名冲突。

        使用命名空间就是为了对标识符的名称本地化,避免命名冲突或名字污染。namespace就是为了解决这种问题的关键字

运行下例代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>int fmax = 10;
int main()
{printf("%d\n", fmax);return 0;
}

运行结果:

报错显示:fmax重定义。所以我们必须使用namespace进行管理。

2.2 命名空间的定义

        使用namespace关键字+名称+{}即可定义命名空间,{}中成员即为该命名空间的成员。

举例:

1.普通命名空间

//定义自己的命名空间
namespace YZC
{//定义变量int fmax = 10;int a = 100;//定义函数void swap(int a, int b){int t = a;a = b;b = t;}//定义结构体typedef struct Node{int val;Node* next;}Node;
}

2. 嵌套定义命名空间

namespace Yzc
{namespace YZc{int a = 1;}
}

3. 如果我们在同一个工程中的不同地方定义了命名空间,编译器会自动合并这些命名空间

//两个YZC会自动合并
namespace YZC
{int a = 100;}namespace YZC
{int b = 1;
}

2.3 使用命名空间

1. 命名空间名称+作用域限定符

int main()
{cout << YZC::fmax;return 0;
}

2. 使用using 将命名空间中的变量引入

using YZC::a;
int main()
{cout << a << endl;return 0;
}

3. using namepace 命名空间        引入这一整个命名空间

using namespace YZC;
int main()
{cout << a << endl;int b = 1;swap(a, b);return 0;
}

三. C++输入输出

3.1 cout,cin

在C语言中,我们使用scanfprintf进行输入输出,这两个函数比较麻烦。

而在C++中,我们使用更方便使用的coutcin进行输入输出。

说明:

1.使用cout标准输出对象(控制台,屏幕),使用cin标准输入对象(键盘)需要包含头文件<iostream>

2.若不使用c++标准命名空间std的话,需要 std::cin  std::cout,这样才能使用

#include<iostream>
using namespace std;int main()
{int a = 1;int b;cout << "请输入b的值:";cin >> b;cout << "a:" << a << " b:" << b << endl;return 0;
}

运行结果:

注:

1. endl是c++中一共特殊的符号,表示换行。c++也能使用 "\n"表示换行

2. cout,cin 会自动识别变量的类型进行输入输出,无需像printf和sacnf那样需要我们进行控制

3.2 std使用惯例

        如何更合理的使用 std标准库的命名空间?

1. 日常使用,建议直接使用 using namespace std 展开std,方便我们学习和使用c++

2. 在工程中,不建议展开std,而是 std:: 名称        来使用std中的成员。这是由于我们可能会定义和std中一样的变量,函数,类 等。防止冲突

四. 缺省参数

缺省参数是在我们定义函数的时候,函数的参数可以给一个默认值。当我们调用该函数的时候,如果没有传入参数,就会使用这个默认值作为参数

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

缺省参数有全缺省和半缺省两种

#include<iostream>
using namespace std;//半缺省
void fun1(int a, int b = 1)
{cout << a + b << endl;
}//全缺省
void fun2(int a = 0, int b = 1)
{cout << a + b << endl;
}int main()
{fun1(2);fun2();return 0;
}

注:

1. 半缺省参数必须从右向左依次给,不能间隔

2. 缺省参数不能在函数定义和声明中同时出现,这样会导致重定义

void test(int a = 0);void test(int a = 1)
{}

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

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

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

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

相关文章

2024.9.11

在界面上显示当前时间&#xff0c;再设置一个闹钟&#xff0c;到了时间就吱吱响&#xff08;至少5遍&#xff09; #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget),speecher(new QTe…

Fiddle的使用------一个非常好用且正规的抓包工具

Fiddle的下载安装&#xff08;看完再去下载安装&#xff09; https://www.telerik.com/download/fiddler 1.点击连接&#xff0c;在表格填上数据&#xff0c;点击下载&#xff0c;下载结束了就安装&#xff0c;一路next就可以了。 2.修改一下设置 以上跟我一样设置&#xff…

鼠标hover过渡动画(已验证)

基于css中的grid方案实现的一个hover小动画&#xff0c;以下代码基于vue2&#xff0c;其他的可以直接复制html和css就可以&#xff0c;注意&#xff1a;以下代码在部分浏览器不兼容 注&#xff1a;部分代码来自我接入的GPT4o/Claude网站 <template><div class"h…

全国各地身份证号开头6位数字及地区对照表

具体请前往&#xff1a;全国各地身份证号开头6位数字-省市县/区对照表

数据库中的主码、候选码、主属性、非主属性

参考链接 候选码、主码、全码、外码、主属性、主键、主关键字、非主属性清晰总结 - 知乎 (zhihu.com) 1.码&#xff1a; 能够标识一条记录的属性或者属性集 2.候选码 能够标识一条记录的最小属性集 任一候选键的任何真子集都不能唯一标识一个记录&#xff08;比如在成绩表…

用Python爬虫制作一个简易翻译器

我们通常是通过requestsBS4的方法来获取网页内容&#xff0c;这种方法导入模块较多&#xff0c;速度相对有点儿慢&#xff0c;此时我们可以用requests的post方法向指定服务器发送请求&#xff0c;获取数据后格式化为json&#xff0c;然后获取相关键值。这种方法用到了requests和…

shell学习3---for循环

for循环格式 基本格式 for 变量名称(注意是名称不是变量$等) [ in 名称范围 ] (可以不写) do 执行内容 &#xff08;若满足循环则做什么动作&#xff09; done &#xff08;for循环结束标志&#xff09; 名称范围是字符 [rootserver1 ~]# ./for…

google vr 入门之VrPanoramaView制作全景图列表(1)

展示图片的列表我这里使用RecycleView&#xff0c;activity_main.xml <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android“http://schemas.android.com/apk/res/android” xmlns:tools“http://schemas.android.com/tool…

【orin-nx Linux下创建简单C++项目 CMake构建编译系统】

【注意】&#xff1a;需要安装gcc 和 cmake 安装视频 #.sh 文件添加权限 chmod x cmake-3.30.3-linux-aarch64.sh1、在root下创建一个文件夹testaubo 2、在testaubo文件夹下创建5个文件夹以及一个cmake文件 2.1、【src】 文件夹存放C的 .cpp文件2.2、【include】 文件夹存…

【Unity错误】No cloud project ID was found by the Analytics SDK

在编译默认的URP 2D项目时&#xff0c;出现这样一个错误&#xff1a;No cloud project ID was found by the Analytics SDK. This means Analytics events will not be sent. Please make sure to link your cloud project in the Unity editor to fix this problem. 原因&…

深入理解TCP三次握手

在网络通信中&#xff0c;TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一个可靠的、面向连接的协议&#xff0c;它保证了数据包的顺序和完整性。为了建立一个稳定的连接&#xff0c;TCP 使用了一个被称为 三次握手&#xff08;Three-W…

C#中的Graphics类和SetQuality()自定义方法

在 C# 中&#xff0c;Graphics 类是 System.Drawing 命名空间的一部分&#xff0c;它提供了一组方法和属性&#xff0c;用于在 Windows Forms 应用程序中进行二维绘图。Graphics 对象可以绘制文本、线条、曲线、形状和图像&#xff0c;并可以对它们进行变换和剪辑。 Graphics …

FTP、SFTP安装,整合Springboot教程

文章目录 前言一、FTP、SFTP是什么&#xff1f;1.FTP2.SFTP 二、安装FTP1.安装vsftp服务2.启动服务并设置开机自启动3.开放防火墙和SELinux4.创建用户和FTP目录4.修改vsftpd.conf文件5.启动FTP服务6.问题 二、安装SFTP总结 前言 在一般项目开发工程中&#xff0c;我们大多数会…

JavaWeb案例-登录认证

在前面的文章中&#xff0c;我们复习了部门管理、员工管理的基本功能。但是我们并没有登录&#xff0c;就直接访问到了Tilias智能辅助系统的后台。这是不安全的&#xff0c;所以今天复习登录认证。最终实现的效果就是用户必须登录之后&#xff0c;才可以访问后台系统中的功能。…

git cz 规范化 git commit 格式

git cz 规范化 git commit 格式 npm install git-cz --save-devnpm install commitizen --save-devnpm install cz-customizable --save-dev // 这是package.json自动生成的 "config": {"commitizen": {"path": "./node_modules/cz-custo…

文件对比工具--BeyondCompare

&#x1f496;简介 Beyond Compare 是一款功能强大的文件和文件夹比较工具&#xff0c;由Scooter Software开发。它可以帮助用户轻松地比较文件和文件夹的差异&#xff0c;并且可以合并变化、同步文件以及备份重要数据 &#x1f4bb;环境 windows &#x1f4d6;版本 Beyon…

from T2I to T2V

生成图片 在Stable Diffusion推理过程中&#xff0c;其使用unet对一个初始化的向量不断去噪&#xff0c;并编入条件信息 c c c &#xff0c;最后使用vae-decoder将其上采样为一张图片。 计算过程&#xff1a; f l a t e n t u n e t ( f l a t e n t ) , f l a t e n t ∈ R…

k8s环境搭建

创建一个新的model虚拟机&#xff0c;处理器为2&#xff0c;硬盘为40G 使用model主机克隆三台新的主机&#xff0c;名称分别为k8s_master&#xff0c;k8s_node01&#xff0c;k8s_node02&#xff0c;运行环境脚本&#xff0c;设置ip地址和名称&#xff0c;IP地址分别为66、77、…

webpack5 创建多页面应用配置

简单版webpack创建多页面应用&#xff0c;只要把配置文件复制下来&#xff0c;然后npm安装相应插件&#xff0c;正常是能跑起来了 创建 初始化 npm init生成package.json文件安装webpack npm i -D webpack webpack-cli webpack-dev-server创建main.js入口文件和webpack.config…

Spring Cloud之二 微服务注册

1&#xff1a;Intellij 新建服务 user-service 2&#xff1a;pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"…