【C++】入门知识之 命名空间与输入输出
创始人
2025-05-29 19:04:30
0

前言

C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的

程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机

界提出了OOP(object oriented programming:面向对象)思想,支持面向对象的程序设计语言

应运而生。

1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一

种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。因此:C++是基于C语言而

产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的

程序设计,还可以进行面向对象的程序设计。

从今天开始我们进入C++的学习,C++从四十年前诞生以来,也是不断的发展着,成为最广泛的编程语言之一。

命名空间

示例

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

我们在许多的C++程序中都会看到以下的代码,但是有人仔细研究过这是什么意思吗?

#include
// std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中
using namespace std;

原来这里的namespace就是命名空间的意思,std就是C++的标准库,C++标准库中所有的定义和实现都放在std这个命名空间里,那么命名空间到底是什么意思呢?

#include 
#include 
int rand = 10;
// C语言没办法解决类似这样的命名冲突问题,所以C++提出了namespace来解决
int main()
{printf("%d\n", rand);
return 0;
}
// 编译后后报错:error C2365: “rand”: 重定义;以前的定义是“函数”

我们来探究一下,来看这段代码,我们定义了一个rand变量,但是在C语言的库中,在中有一个rand函数,造成了命名冲突,但是在C++中,提出了命名空间来解决这个问题。

命名空间定义

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

中即为命名空间的成员。

命名空间定义时有有三个特点:

1.命名空间的名字可以为任何的变量名,命名空间中可以定义变量,函数,类型。

// 1. 正常的命名空间定义
namespace tmt
{// 命名空间中可以定义变量/函数/类型int rand = 10;int Add(int left, int right){return left + right;}struct Node{struct Node* next;int val;};
}

2.命名空间可以嵌套使用,在N1内部也可以嵌套N2的命名空间。

//2. 命名空间可以嵌套
// test.cpp
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;}}
}

3.当在一个工程中,有名称相同的命名空间,会将这些命名空间中的内容合并。

//3. 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。
// ps:一个工程中的test.h和上面test.cpp中两个N1会被合并成一个
// test.h
namespace N1
{int Mul(int left, int right){return left * right;}
}

命名空间使用

我们学会了命名空间的定义之后,我们来探究一下命名空间是如何使用的吧

namespace tmt
{int a = 1;
}int main()
{printf("%d", a);return 0;
}

我们发现编译器并不认识这个a变量,这时因为a定义在tmt这个命名空间内部,有了自己的作用域,当我们要使用这个变量时,先得来操作这个命名空间。

下边我来介绍三种方式:

  1. 使用作用域限定符来操作

int main()
{printf("%d\n", tmt::a);return 0;    
}

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

using tmt::a;
int main()
{printf("%d\n", a);return 0;    
}

3.使用using将命名空间名称引入

using namespce tmt;
int main()
{printf("%d\n",a);return 0;    
}

注意事项:

  1. 虽然有三种方式来使用命名空间内的内容,但是在实际的工程中,我们不会选择第三种方式,因为设计命名空间的初衷就是要避免函数名相同造成冲突,但是当我们将整个命名空间引入时,就丧失了隔离的效果,所以在写工程时,尽量不去使用第三种方式。

  1. 在平时的练习中,我们就可以使用三种方式,使用第三种方式比较方便。

C++输入&输出

我们前边学习了C语言,C语言的输入输出必须引入库stdio,输出使用的是printf函数,叫做标准输出函数,而标准输入函数就是scanf函数。我们下来看一下C++是如何输入输出的:

#include
// std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中
using namespace std;
int main()
{cout<<"Hello world!!!"<

C++的标准输入输出要引用iostream流,这里就用到了前文介绍的命名空间,只有这样才能使用C++

标准库中的函数。

注意:

1. 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream >头文件以及按命名空间使用方法使用std。

2. cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包头文件中。

3. <<是流插入运算符,>>是流提取运算符。

4. 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。C++的输入输出可以自动识别变量类型。

#include 
using namespace std;
int main()
{int a;double b;char c;// 可以自动识别变量的类型cin>>a;cin>>b>>c;cout<

C语言中使用printf和scanf函数必须指定函数类型,但是使用C++的cout与cin不用指定函数类型,直接输入变量就好了。

// ps:关于cout和cin还有很多更复杂的用法,比如控制浮点数输出精度,控制整形输出进制格式等
等。因为C++兼容C语言的用法,这些又用得不是很多,我们这里就不展开学习了。后续如果有需要,我们再配合文档学习。

相关内容

热门资讯

现货黄金直线跳水,跌破5200... 新闻荐读 1月29日晚,现货黄金白银快速走低,回吐盘中全部涨幅。23:15左右,现货黄金跌破5300...
加拿大拟与多国联合设立国防银行 新华社北京1月31日电 加拿大财政部长商鹏飞1月30日说,加拿大将在未来数月与国际伙伴密切合作,推进...
马斯克大消息!SpaceX申请... 据券商中国,美东时间1月30日,路透社报道,据两位知情人士透露,马斯克旗下SpaceX公司2025年...
澳网:雷巴金娜2-1萨巴伦卡女... 北京时间1月31日,2026赛季网球大满贯澳大利亚公开赛继续进行,在女单决赛中,5号种子雷巴金娜6-...
春节前白酒促销热:“扫码抽黄金... 春节临近,白酒市场再现价格异动。 近日,飞天茅台批价拉升,有酒商直言“年前要冲2000元关口”,引发...
新安县人民医院让专业护理走进千... 由211名专业人员组成的服务团队,提供60项全维度服务,累计完成上门服务3217人次;实现“入院—出...
跨国企业负责人高度肯定中国经济... 本文转自【中国经济网-《经济日报》】; 参观者在第八届中国国际进口博览会美敦力公司一款超硬导丝产品...
中药配方颗粒标准化浪潮:数商云... 在中医药现代化与国际化加速推进的背景下,中药配方颗粒行业正经历一场以标准化为核心的深刻变革。截至20...
长江能科迪拜孙公司完成注册 拓... 来源:新浪财经-鹰眼工作室 【财经网讯】长江三星能源科技股份有限公司(证券代码:920158,证券简...
银行职工因贪污罪获刑后留任,在... 新京报记者 刘锦涵 制作 礼牧周 ▲新京报我们视频出品(ID:wevideo) 近日,农发行福建福鼎...
黄金创40年来最大单日跌幅!金... (来源:劳动报) 转自:劳动报 1月31日,国际金银价格同步大跌,创40余年来最大跌幅。国内金饰价...
“一人公司”近来何以兴起? 2026年开年,“一人公司”发展备受关注。这种新型创业模式正在上海、北京、江苏等地悄然兴起,凭借低成...
寒武纪预计 2025 年净利润... 消息,AI 芯片企业寒武纪今日发布 2025 年年度业绩预告: 经财务部门初步测算,公司预计 2...
和讯投顾徐剑波:ETF买入法! 这轮牛市是机构主导的ETF牛市,选对ETF往往比选股更加赚钱。那么如何投资ETF?今天教给大家一个非...
君乐宝上市申请已递交,国内乳品... 2026年 1月19日,中国领先的综合乳制品企业君乐宝乳业集团股份有限公司正式向香港联交所递交主板上...
大涨!马斯克,突传大消息!重磅... SpaceX的“赚钱能力”曝光。 据最新消息,世界首富埃隆·马斯克旗下的商业航天公司SpaceX去年...
原创 顶... 2025年微博之夜定档于2026年2月5日北京线上直播,这场已经走过二十多年风雨的互联网年度盛典,因...
体检查出肺结节?3个日常行为正... 太原龙城中医医院科普:如今越来越多人在体检中发现肺结节,看到报告上的“阴影”便忧心忡忡。其实研究表明...
记者观察丨美联储下任主席提名揭... 在经过长达一年反复挑选后,美国总统唐纳德·特朗普终于做出决定,提名凯文·沃什为下一任美联储主席,接替...
首饰金,一夜大跌上百元!金价暴... 【导读】多家首饰品牌金价出现大幅下跌 中国基金报记者 忆山 随着国际金价急速下跌,国内首饰金价也迎来...