【C++入门到精通】 C++入门—命名空间

这篇具有很好参考价值的文章主要介绍了【C++入门到精通】 C++入门—命名空间。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

        前面我们学习了C语言,并且知道了C语言的基础语法与用途。接下来一段时间我们会再来学习一下基于C语言并且根据C语言改造的一门新的语言—C++ 

        硕硕相信只要各位大佬们跟着我的博客看下去,肯定能有不少的收获。二话不说咱们要开车了,坐稳扶好呦

C++的发展历史

        硕硕认为学习一门新的学科之前首先要知道或者了解这门学科的历史,正所“知己知彼,百战不殆 ”。首先我们先来了解一下什么是C++,C++是一门应用非常广泛的计算机程序设计语言。它是一种通用的程序设计语言,支持多重编程模式,例如过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计和设计模式等。

        C++语言是由C语言发展而来的,C++语言是美国贝尔实验室的比雅尼·斯特劳斯特鲁普(Bjarne Stroustrup)博士以及同事于20世纪80年代初期在C语言的基础上发明并实现的,最初被称为C with Classes,1983年被更名为C++,C++语言发展可以大概分为3个阶段。

C++发展的三个阶段性飞跃

        ⭕第一阶段: 第一阶段从80年代初到1995年。这个阶段C++基本上是传统上的面向对象语言,并且凭借着接近C语言的效率,在工业界使用的开发语言中占据了相当大的份额;

        ⭕第二阶段: 第二阶段从1995年到2000年,这一阶段由于标准模板库(STL)和后来的Boost等程序库的出现,泛型程序设计在C++中占据了越来越多的比重。当然,同时由于Java、C#等语言的出现和硬件价格的大规模下降,C++受到了一定的冲击;

        ⭕第三阶段: 第三阶段从2000年至今,由于以Loki、MPL(Boost)等程序库为代表的产生式编程和模板元编程的出现,C++出现了发展历史上又一个新的高峰,这些新技术的出现以及和原有技术的融合,使C++已经成为当今主流程序设计语言中最复杂的一员。

命名空间

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

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

int rand = 10;

// C语言没办法解决类似这样的命名冲突问题,所以C++提出了namespace来解决
int main()
{
    printf("%d\n", rand);
    return 0;
}

// 编译后后报错:error C2365: “rand”: 重定义;以前的定义是“函数”

命名空间的定义

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

//定义一个名字为A的命名空间(变量、函数)
namespace A 
{
    int a = 100;
}
namespace B 
{
    int a = 200;
}
void test02()
{
    //A::a  a是属于A中
    cout<<"A中a = "<<A::a<<endl;//100
    cout<<"B中a = "<<B::a<<endl;//200
}

命名空间只能全局范围内定义

     下面就是错误的写法  (局部定义命名空间是错误的)

int main()
{
    namespace A  //局部定义命名空间是错误的
    {
        int a = 1;
    }
    namespace B
    {
        int a = 2;
    }
    count << "A::a : " << A::a << endl;
    count << "B::a : " << B::a << endl;
    return 0;
}

命名空间可以嵌套定义

namespace A 
{
    int a = 1000;
    namespace B 
    {
        int a = 2000;
    }
}
void test03()
{
    cout<<"A中的a = "<<A::a<<endl; //1000
    cout<<"B中的a = "<<A::B::a<<endl; //2000
}

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

namespace A 
{
    int a = 100;
    int b = 200;
}

namespace A 
{
    int c = 300;
}
void test04()
{
    cout<<"A中a = "<<A::a<<endl;//100
    cout<<"A中c = "<<A::c<<endl;//200
}

命名空间可以存放的变量类型

        在C++中,命名空间(namespace)可以存放各种类型的变量,包括但不限于以下类型

1.基本数据类型变量,如整型(int)、浮点型(float)、字符型(char)等
2.自定义的结构体(struct)或类(class)的对象
3.枚举类型(enum)的变量。
4.指针类型变量,可以指向不同类型的数据
5.数组类型变量,可以是一维或多维数组。
6.函数指针类型,指向特定函数的指针。
7.类型别名(typedef)或类型定义(using)。

 命名空间中的函数 可以在“命名空间”外 定义

namespace A 
{
    int a=100;//变量
 
    void func();
}
 
void A::func()//成员函数 在外部定义的时候 记得加作用域
{
    //访问命名空间的数据不用加作用域
    cout<<"func-a = "<<a<<endl;
}
 
void funb()//普通函数
{
    cout<<"funb-a = "<<A::a<<endl;
}
void test06()
{
   A::func();
    funb();
}

无名命名空间

        意味着命名空间中的标识符只能在本文件内访问,相当于给这个标识符加上了static,使得其可以作为内部连接

namespace
{
    int a = 10;
    void func()
    {
        cout<<"hello namespace"<<endl;
    }
}
void test()
{
 
    //只能在当前源文件直接访问a 或 func
    cout<<"a = "<<a<<endl;
    func();
}

命名空间的使用

使用using将命名空间中某个成员引入

namespace N
{
    // 命名空间中可以定义变量/函数/类型
    int a = 0;
    int b = 1;
    int Add(int left, int right)
    {
        return left + right;
    }
    struct Node
    {
        struct Node* next;
        int val;
    };
}
using N::b;
int main()
{
    printf("%d\n", N::a);
    printf("%d\n", b);
    return 0;
}

使用using namespace 命名空间名称 引入
 

namespace N
{
    // 命名空间中可以定义变量/函数/类型
    int a = 0;
    int b = 1;
    int Add(int left, int right)
    {
        return left + right;
    }
    struct Node
    {
        struct Node* next;
        int val;
    };
}

using namespce N;
int main()
{
    printf("%d\n", N::a);
    printf("%d\n", b);
    Add(10, 20);
    return 0;
}

总结

        学了这些相信大家也跟我一样对C++的命名空间有了初步的了解,如果对博主的文章感兴趣的话可以三连加关注,后面我也会更新C++的内容。一起加油吧!!!文章来源地址https://www.toymoban.com/news/detail-602930.html

到了这里,关于【C++入门到精通】 C++入门—命名空间的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++入门:命名空间与输入输出

    目录 1.命名空间 1.1 命名空间的定义 1.2 命名空间的使用 1.3 标准命名空间 std 2.C++输入输出 我们在初学C++时,经常会在代码开头看到这样的一行代码: 这行代码到底什么意思呢?我们学完命名空间就可以理解了。 在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些

    2024年02月11日
    浏览(34)
  • 『C++成长记』C++入门——命名空间&缺省参数

     🔥 博客主页: 小王又困了 📚 系列专栏: C++ 🌟 人之为学,不日近则日退 ❤️ 感谢大家点赞👍收藏⭐评论✍️ 目录 一、C++的认识 📒1.1什么是C++ 📒1.2C++的发展 二、C++ 三、命名空间 📒3.1为什么有命名空间 📒3.2命名空间定义 📒3.3命名空间使用 📒3.4命名空间的

    2024年02月08日
    浏览(26)
  • 【C++入门系列】——命名空间和输入输出

    📚lovewold少个r博客主页     ⚠️ 本文重点 : c++入门第一个程序和基本知识讲解 😄 每日一言 :忙,不会死,人只有越忙越活,流水不腐,户枢不蠹。 ​作者主页 前言 谈谈我个人对语言和职业的看法 C++的历史发展 C++第一个程序 命名空间 定义命名空间 使用此命名空间 命

    2024年02月05日
    浏览(37)
  • 【C++初阶】C++入门——C++介绍、命名空间、输入输出

     C语言是 结构化 和 模块化 的语言,适合处理 较小规模 的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机,20世纪80年代,计算机界提出了 OOP (object oriented programming: 面向对象 )思想,支持面向对象的程序设计语言应

    2024年02月11日
    浏览(35)
  • C++入门 上(命名空间 缺省参数 函数重载)

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

    2024年02月19日
    浏览(38)
  • 【C++学习】C++入门 | C++该怎么学 | 命名空间 | 输入输出

    欢迎来到C++的世界,这是一门令人兴奋的语言。 好吧,每当我开始阅读C++的书籍的时候,开头的第一句话必定是这个, 也不知道其他语言的编程书籍是不是这样,那就让这句话也作为我C++分享之路上的第一句话吧。 目录 写在前面 1. C++怎么学? 1. C语言 2. Object-Oriented C++ 3.

    2024年02月10日
    浏览(30)
  • C++入门(1):命名空间,IO流 输入输出,缺省参数

    一、命名空间 1.1 命名空间的作用: ​ 避免标识符命名冲突 1.2 命名空间定义: :namespace PS: 命名空间可以嵌套. 在同一工程中,编译器会把 相同名称 的命名空间 合并 成到同一个命名空间中。 1.3 命名空间的使用 一个命名空间相当于定义了一个作用域,其中的所有内

    2024年02月07日
    浏览(33)
  • 【C++心愿便利店】No.1---C++入门(命名空间、缺省参数)

    👧个人主页:@小沈YO. 😚小编介绍:欢迎来到我的乱七八糟小星球🌝 📋专栏:C++ 心愿便利店 🔑本章内容:命名空间、缺省参数 记得 评论📝 +点赞👍 +收藏😽 +关注💞哦~ C语言最初由 Dennis Ritchie 于 1969 年到 1973 年在 ATT 贝尔实验室里开发出来,主要用于重新实现 Unix 操作

    2024年02月11日
    浏览(29)
  • 【C++初阶】关键字&命名空间&缺省函数&函数重载入门必看!!!超详解!!!

     ========================================================================= 主页点击直达: 个人主页 我的小仓库:代码仓库 C语言偷着笑: C语言专栏 数据结构挨打小记: 初阶数据结构专栏 Linux被操作记:Linux专栏 LeetCode刷题掉发记: LeetCode刷题 算法: 算法专栏  C++头疼记: C++专栏 计算机

    2024年02月07日
    浏览(38)
  • 【C++对于C语言的扩充】C++与C语言的联系,命名空间、C++中的输入输出以及缺省参数

    铁子们好啊!这是阿辉新开的专栏《拿下C++》的第一篇文章,本文主要带大家了解一下C++,带大家从C语言过渡到C++,所以大家首先要有C语言的基础,否则后面的内容你可能会异常懵逼。不会C语言的铁子,这里推荐各位先看阿辉的专栏《爱上C语言》(点击即可跳转,自荐一下

    2024年02月03日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包