【C++入门 二 】学习使用C++命名空间及其展开


在这里插入图片描述

1. C++第一个小程序

下面这段代码有两个特性

1、io流

2、命名空间

#include <iostream>
using namespace std;

int main()
{
    
    
	cout << "hello world" << endl;

	return 0;
}

在这里插入图片描述


2.命名空间

2.1命名冲突

命名冲突产生的原因:
1.我们自己写的和库冲突
2.我们互相之间冲突

在这里插入图片描述
在上面的代码中,我们定义的rand和库里面的rand函数命名冲突了


所以就要学习下面的命名空间了
:: 域作用限定符
在这里插入图片描述


2.2 命名空间

在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的

2.2.1 命名空间定义

①正常定义和使用命名空间

#include <stdio.h>
#include <stdlib.h>

namespace YYQ
{
    
    
	int rand = 0;

	int Add(int left, int right)
	{
    
    
		return left + right;
	}
	
		struct Node
	{
    
    
		struct Node* next;
		int val;
	};

}

int main()
{
    
    
	printf("hello world\n");
	printf("%p\n", rand);//默认访问全局的
	printf("%d\n", YYQ::rand); 


	YYQ::Add(1, 2);
	struct YYQ::Node node//结构体这里的指定有些不太一样
	return 0;
}

在这里插入图片描述


②命名空间可以嵌套

#include <stdio.h>
#include <stdlib.h>

namespace YYQ
{
    
    
	int rand = 0;

	namespace yyq
	{
    
    
		int rand = 2;
	}
	int Add(int left, int right)
	{
    
    
		return left + right;
	}
		struct Node
	{
    
    
		struct Node* next;
		int val;
	};

}

int main()
{
    
    
	printf("hello world\n");
	printf("%p\n", rand);//默认访问全局的
	printf("%d\n", YYQ::rand); 
	printf("%d\n", YYQ::yyq::rand);
	YYQ::Add(1, 2);
	return 0;
}

在这里插入图片描述


同一个文件多个位置同名的命名空间或者多个文件中同名的命名空间会被合并为同一个



2.2.2.命名空间的展开

方式1(直接展开)
  using namespace std;
  //直接展开C++ std库 

如果在展开的命名空间和全局中都没找到,就会报错


方式2(指定展开)

我们这里 指定展开 std里面的 coutendl ;

#include <iostream>
using std::cout;
using std::endl;

int main()
{
    
    
	//流插入
	std::cout << "hello world\n";
	int a = 10;
	double b = 11.11;
	std::cout << a << "\n";//方式1换行(本质C语言方式)

	std::cout << a << "\n" << b<<"\n";//方式2 

	std::cout << a << std::endl << b << std::endl;//方式3(C++方式)
	std::cout << b;

	return 0;
}


3.C++输入&输出

①输出

#include <iostream>

int main()
{
    
    
	//流插入
	std::cout << "hello world";
	int a = 10;
	double b = 11.11;
	std::cout << a;
	std::cout << b;


	return 0;
}

在这里插入图片描述

上面的输出没有换行,下面有几种换行的方式

#include <iostream>

int main()
{
    
    
	//流插入
	std::cout << "hello world\n";
	int a = 10;
	double b = 11.11;
	std::cout << a << "\n";//方式1换行(本质C语言方式)

	std::cout << a << "\n" << b<<"\n";//方式2 

	std::cout << a << std::endl << b << std::endl;//方式3(C++方式)
	std::cout << b;

	return 0;
}

②输入

#include <iostream>
using std::cout;
using std::endl;

int main()
{
    
    
	//流插入
	std::cout << "hello world\n";
	int a = 10;
	double b = 11.11;
	std::cout << a << "\n";//方式1换行(本质C语言方式)

	std::cout << a << "\n" << b<<"\n";//方式2 

	std::cout << a << std::endl << b << std::endl;//方式3(C++方式)
	
	//cin相当于C语言中的scanf
	std::cin >> a >> b;//指定展开std,找cin
	std::cout << a;
	std::cout << b;

	return 0;
}


在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_58286439/article/details/134123404