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语言不支持缺省参数

  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘子真甜~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值