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

简介: 【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;
}


相关文章
|
5天前
|
安全 编译器 程序员
【C++初阶】C++简单入门
【C++初阶】C++简单入门
|
10天前
|
安全 编译器 C++
C++入门 | 函数重载、引用、内联函数
C++入门 | 函数重载、引用、内联函数
18 5
|
10天前
|
存储 安全 编译器
C++入门 | auto关键字、范围for、指针空值nullptr
C++入门 | auto关键字、范围for、指针空值nullptr
30 4
|
10天前
|
编译器 C语言 C++
C++入门 | 命名空间、输入输出、缺省参数
C++入门 | 命名空间、输入输出、缺省参数
24 4
|
10天前
|
编译器 程序员 C语言
C++入门
C++入门
21 5
|
4天前
|
安全 编译器 C语言
|
4天前
|
存储 编译器 程序员
C++从遗忘到入门
本文主要面向的是曾经学过、了解过C++的同学,旨在帮助这些同学唤醒C++的记忆,提升下自身的技术储备。如果之前完全没接触过C++,也可以整体了解下这门语言。
|
28天前
|
安全 编译器 C++
C++一分钟之-C++中的属性命名空间
【7月更文挑战第22天】C++11引入属性作为元数据,虽无内置属性命名空间,但可通过自定义属性与命名空间组合实现类似效果。例如,创建`perf`命名空间存放`slow`和`fast`属性来标记函数性能。正确使用属性需注意位置、避免重复和确保与实现一致,以提升代码可读性和编译器理解。通过模拟属性命名空间,可以更有效地管理和使用属性。
35 1
|
29天前
|
存储 编译器 C++
C++从遗忘到入门问题之float、double 和 long double 之间的主要区别是什么
C++从遗忘到入门问题之float、double 和 long double 之间的主要区别是什么
|
29天前
|
编译器 C++
C++从遗忘到入门问题之C++中的浮点数类型问题如何解决
C++从遗忘到入门问题之C++中的浮点数类型问题如何解决