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

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.kler.cn/a/300363.html

相关文章:

  • JS Clipboard API
  • 什么是三高架构?
  • 总结3..
  • 【从零开始入门unity游戏开发之——C#篇46】C#补充知识点——命名参数和可选参数
  • 嵌入式知识点总结 C/C++ 专题提升(一)-关键字
  • RabbitMQ基础篇
  • 代码随想录训练营 Day57打卡 图论part07 53. 寻宝(prim,kruskal算法)
  • 全国历年高考真题2008-2024
  • 互联网摸鱼日报(2024-09-09)
  • 计算机三级网络技术总结 第十一章网络管理技术
  • 在mac中使用numbers对数据进行分列(更详细的回答,已解决)
  • 基于IOT的供电房监控系统(实物)
  • gdb 前端:kdbg 安装使用
  • C#如何简单地组合linq查询条件
  • RESTful Web服务详细解释
  • 数据库sqlite3
  • iOS 本地图片扫描优化
  • Pyspark下操作dataframe方法(3)
  • 【Python第三方库】OpenCV库实用指南
  • UnLua环境搭建
  • Vue3中的监听器。toRefs与toRef的区别
  • 海康威视相机在QTcreate上的使用教程
  • 【SQL】百题计划 - SQL最基本的判断和查询。
  • 【C++】入门基础(上)
  • 在 Windows 系统上,文件传输到虚拟机(VM)可以通过 VS Code 的图形界面(GUI)或命令行工具进行操作
  • Linux网络——从《计算机网络》到网络编程