【C++】入门 --- 命名空间(一)

简介: 【C++】入门 --- 命名空间(一)

f557d03a3e464f37b08f08537d14af50.jpg


🍪一、前言

本篇文章是《C++ 初阶》 专栏的第一篇文章,从本专栏开始就进入了C++的学习了哦!本篇的内容是C++入门:命名空间的学习希望烙铁们可以理解消化哦🥰!!!

🍩1、C++简介

🚩C++是一种计算机高级程序设计语言,由C语言扩展升级而产生 ,最早于1979年由本贾尼·斯特劳斯特卢普在AT&T贝尔工作室研发。

🚩C++既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计。

🚩C++拥有计算机运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。

🍩2、C++关键字

C++总计63个关键字,C语言32个关键字

🍪二、命名冲突

我们在C语言阶段了解过这样一个函数:rand函数,该函数用于生成伪随机整数

🥰我们来看下面这段代码👇

#include<stdio.h>
int rand = 5;
int main()
{
  printf("%d\n", rand);
  return 0;
}

运行成功,结果毋庸置疑,没有什么错误

🥰我们再来看一段代码👇

#include<stdio.h>
#include<stdlib.h>
int rand = 5;
int main()
{
  printf("%d\n", rand);
  return 0;
}

为什么包含了 头文件<stdlib.h> 就运行不通过了呢?

🚨原因是程序运行时,会遵循局部优先原则,也就是会先在局部作用域种寻找变量,如果在局部作用域中没有找,则会去全局作用域中寻找;
🚨此程序在全局作用域中找到了两个 rand(一个为 <stdlib.h>头文件内所包含的的rand函数,另一个则是自己创建的变量rand),也就是全局作用域中声明的标识符重复定义了,这时就发生了命名冲突,所以程序会报错

🍪三、命名空间

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

🍩1、命名空间定义

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{} 即可,{}中即为命名空间的成员,命名空间中可以定义变量/函数/类型。

🥰请看代码与注释👇

#include<iostream>
namespace Lvdr
{
  //命名空间中可以定义变量/函数/类型
  int rand = 10;
  int Add(int left, int right)
  {
    return left + right;
  }
  struct Node
  {
    struct Node* next;
    int val;
  };
}
//一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中

🚨一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中

🦄命名空间可以进行嵌套定义:

🥰请看代码与注释👇

namespace N1
{
  int a;
  int b;
  int Add(int left, int right)
  {
    return left + right;
  }
  namespace N2
  {
    int c;
    int d;
    int Sub(int left, int right)
    {
      return left - right;
    }
  }
}

🚩命名空间嵌套定义时,内层命名空间和外层命名空间即使存在相同的标识符,也不会发生命名冲突。

🚩同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。

🚩一个工程中的test.h和上面test.cpp中两个N1会被合并成一个

目录
相关文章
|
29天前
|
安全 编译器 程序员
【C++初阶】C++简单入门
【C++初阶】C++简单入门
|
8天前
|
编译器 Linux C语言
C++基础入门
C++基础入门
|
21天前
|
程序员 C++ 开发者
C++命名空间揭秘:一招解决全局冲突,让你的代码模块化战斗值飙升!
【8月更文挑战第22天】在C++中,命名空间是解决命名冲突的关键机制,它帮助开发者组织代码并提升可维护性。本文通过一个图形库开发案例,展示了如何利用命名空间避免圆形和矩形类间的命名冲突。通过定义和实现这些类,并在主函数中使用命名空间创建对象及调用方法,我们不仅解决了冲突问题,还提高了代码的模块化程度和组织结构。这为实际项目开发提供了宝贵的参考经验。
38 2
|
8天前
|
C语言 C++
C++(六)Namespace 命名空间
命名空间(Namespace)是为了解决大型项目中命名冲突而引入的机制。在多库集成时,不同类库可能包含同名函数或变量,导致冲突。C++通过语法形式定义了全局无名命名空间,并允许对全局函数和变量进行作用域划分。命名空间支持嵌套与合并,便于协同开发。其使用需谨慎处理同名冲突。
|
1月前
|
安全 编译器 C++
C++入门 | 函数重载、引用、内联函数
C++入门 | 函数重载、引用、内联函数
24 5
|
1月前
|
存储 安全 编译器
C++入门 | auto关键字、范围for、指针空值nullptr
C++入门 | auto关键字、范围for、指针空值nullptr
47 4
|
1月前
|
编译器 C语言 C++
C++入门 | 命名空间、输入输出、缺省参数
C++入门 | 命名空间、输入输出、缺省参数
33 4
|
1月前
|
编译器 程序员 C语言
C++入门
C++入门
29 5
|
27天前
|
安全 编译器 C语言
C++入门-数组
C++入门-数组
|
27天前
|
存储 编译器 程序员
C++从遗忘到入门
本文主要面向的是曾经学过、了解过C++的同学,旨在帮助这些同学唤醒C++的记忆,提升下自身的技术储备。如果之前完全没接触过C++,也可以整体了解下这门语言。