C++入门经典-例4.11-名称空间的定义和使用
1:名称空间,也成为名字空间、命名空间,关键字为namespace。我们经常使用这样一条语句:
using namespace std;
我们要使用标准输入输出流,除了包含它们所在的头文件外,还必须使用它们的名称空间。实际上,namespace后面的std正是该名称空间的名称。它主要作用就是防止
不同文件中包含的同一变量、函数等因名字重复而导致错误。“using namespace std”表示在本件中使用所有名字为std的空间中的所有数据,而不需要像下面这样加上名称标识:
using std::cout;
using std::endl;
除了上述两种方法之外,最常用的方法是如下形式:
std::cout<<"hi!!"<<endl;
将这3种方法相比较,可得出下面的结论:
(1)第一种方法使用简便,编程者不需要逐个包含名称空间中的变量、函数等,而可以直接使用它们。缺点是,在文件中失去了名称空间应有的作用,定义时需要注意与
该名称空间中的各个数据命名冲突问题。
(2)第二种方法比较折中,它可以方便编程者使用名称空间中的少数数据。
(3)第三种方法在每次使用名称空间中数据时,都要加上名称空间的名字,引用起来比上述两种方法稍显繁琐。但这种方法在所有情况下都试用,不会造成混乱,在编写大型项目时比较实用。
2:定义一个名称空间可以用namespace关键字,形式如下:
namespace 名称空间名{
代码
}
代码例子如下:
// 4.11.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <iostream>
using std::cout;//头文件包含了std名称空间,可以使用
using std::endl;
namespace welcome {
int count = ;
float getCount() {
return 3.33f;
}
} using namespace welcome;//定义名称空间,之后使用 namespace hello {
int count = ;
float getCount() {
return 4.44f;
}
}
float getCount() {
return 1.11f;
}
int main()
{
int count = ;
cout << "直接调用getCount函数和使用count" << endl;
//cout<<"getCount:"<<getCount()<<endl; 编译器函数重载冲突
cout << "count:" << count << endl;
cout << "--------------------------------------" << endl;//视觉分割线
cout << "使用域标识符调用getCount函数和使用count" << endl;
cout << "::getCount:" << ::getCount() << endl; //没有定义名称空间
cout << "count:" << ::count << endl;//
cout << "welcome::getCount:" << welcome::getCount() << endl;
cout << "welcome::count:" << welcome::count << endl;
cout << "::getCount:" << hello::getCount() << endl;
cout << "hello::count:" << hello::count << endl;
return ;
}
运行结果:

C++入门经典-例4.11-名称空间的定义和使用的更多相关文章
- C++入门经典-例5.17-右值引用的定义
1:右值引用的定义: 类型 && i=被引用的对象: 左值与右值的区别在于,右值是临时变量,例如,函数的返回值,并且无法被改变. 当右值引用被初始化后,临时变量消失. 代码如下: // ...
- Python入门之函数的嵌套/名称空间/作用域/函数对象/闭包函数
本篇目录: 一.函数嵌套 二.函数名称空间与作用域 三.函数对象 四.闭包函数 ============================================================ ...
- C++入门经典-例9.1-函数模板,函数模板的作用,使用数组作为模板参数
1:函数模板不是一个实在的函数,因此编译器不能为其生成可执行的代码.定义函数模板只是一个对函数功能框架的描述,在具体执行时,将根据传递的实际参数决定其功能. 2:函数模板定义的一般形式如下: temp ...
- C++入门经典-例5.11-动态分配空间,堆与栈
1:在程序中定义一个变量,它的值会被放入内存中.如果没有申请动态分配,它的值将会被放在栈中.栈中的变量所属的内存大小是无法被改变的,它们的产生与消亡也与变量定义的位置和存储方式有关.堆是一种与栈相对应 ...
- C++入门经典-例8.5-多重继承
1:C++允许子类从多个父类继承公有的和受保护的成员,这称为多重继承. 2:多重继承的定义.多重继承有多个基类名称标识符,其声明形式如下: class 派生类名标识符:[继承方式] 基类名标识符1,. ...
- C++入门经典-例8.2-构造函数的访问顺序
1:父类和子类中都有构造函数和析构函数,那么子类对象在创建时是父类先进行构造还是子类先进行构造?同样,在子类对象释放时,是父类先进行释放,还是子类先进行释放?这都是有先后顺序的.答案是当从父类派生一个 ...
- C++入门经典-例8.1-类的继承
1:继承是面向对象的主要特征(此外还有封装和多态)之一,它使得一个类可以从现有类中派生,而不必重新定义一个新类.继承的实质就是用已有的数据类型创建新的数据类型,并保留已有数据类型的特点,以旧类为基础创 ...
- C++入门经典-例7.10-运算符的重载,重载加号运算符
1:曾经介绍过string类型的数据,它是C++标准模版库提供的一个类.string类支持使用加号“+”连接两个string对象.但是使用两个string对象相减确实非法的,其中的原理就是C++所提供 ...
- C++入门经典-例7.7-对象与复制,菌类的繁殖
1:当函数以相应的类作为形参列表时,对象可以作为函数的参数传入.在学习函数时,我们曾提过,值传递先复制实参产生副本.那么对象的副本是怎样的呢? 复制构造函数是指类的对象被复制时所调用的函数.下面两种情 ...
随机推荐
- Dasha and Photos CodeForces - 761F (前缀优化)
大意: 给定n*m初始字符矩阵, 有k个新矩阵, 第$i$个矩阵是由初始矩阵区间赋值得到的, 求选择一个新矩阵, 使得其余新矩阵到它距离和最小. 字符集比较小, 可以考虑每次区间覆盖对每个字符的贡献. ...
- 2.bash术语定义
2.术语定义POSIX:基于Unix的一系列操作系统可移植性的标准.Bash主要和POSIX标准第1003.1号中的<Shell和使用工具>有关.空白符:一个空格或者制表符.内部命令:在s ...
- [转载]C++之using namespace std 详解与命名空间的使用
来源:https://blog.csdn.net/Bruce_0712/article/details/72824668 所谓namespace,是指标识符的各种可见范围.C++标准程序库中的所有标识 ...
- Spark运行时的内核架构以及架构思考
一: Spark内核架构 1,Drive是运行程序的时候有main方法,并且会创建SparkContext对象,是程序运行调度的中心,向Master注册程序,然后Master分配资源. 应用程序: A ...
- GitFlow入门
1-概述 2-GitFLow分支介绍 2.1-master 分支 2.2-develop 分支 2.3-feature 分支 2.4-release 分支 2.5-hotfix 分支 3-GitFlo ...
- 12 Scrapy框架的日志等级和请求传参
一.Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息. - 日志信息的种类: ERROR : 一般错误 ...
- js获取url(request)中的参数
index.htm?参数1=数值1&参数2=数值2&参数3=数据3&参数4=数值4&...... 静态html文件js读取url参数,根据获取html的参数值控制htm ...
- 问题:tomcat启动后,可以访问主页面,但是无法访问dubbo-admin
原因分析: 直接查看logs中的日志文件,发现一行 [Catalina-utility-1] org.apache.catalina.startup.HostConfig.undeploy Undep ...
- 什么是DDoS攻击?
本文转载自知道创宇云安全的知乎回答:DDoS 的肉鸡都是哪来的? 说到DDoS攻击,我们就不得不说“肉鸡”. “肉鸡”可谓是DDoS攻击的核心大杀器,作为一个要发起DDoS攻击的黑客来说,没有肉鸡就是 ...
- Js 将图片的绝对路径转换为base64编码(3)
图片文件改变一方法:$('#file').change(function(){var oFReader = new FileReader();oFReader.readAsDataURL(this.f ...