一:namespace是指标识符的各种控件范围(类java中package)

C++语言引入命名空间(Namespace)这一概念主要是为了避免命名冲突,其关键字为 namespace

二:iostream.h和iostream(体现命名空间优点)

#include <iostream>  //标准库放在std命名空间中,所以使用的时候使用using namespace std;
#include <iostream.h>
这是两个不同的文件,在早期使用带.h(将标准库功能定义在全局空间里,容易和开发人员的类或者方法重名冲突<因为标准库太庞大>),
后面为了将c++和c区分,并且为了正确使用命名空间,就不带.h(可以很好的解决上面问题)
实际上为了区分C和C++,C++规定头文件不使用后缀.h

三:使用方法(三种)<例std>

(一)直接使用指定标准库

std::cout << "use namespace std" << std::endl;
缺点:使用麻烦,需要一个个引入
优点:减少冲突

(二)使用using关键字,和(一)类似,只是提前声明

using std::cout;
using
std::endl; cout << "use namespace std" << endl;

(三)使用using namespace std;将所有的标识符曝光,就像是全局变量一样使用(最常用)

using namespace std;

cout << "use namespace std" << endl;

四:自定义namespace使用《重点》

注意点一:命名空间需要写在头文件,方便引入

namesp.h
#ifndef NAME_SPACE_H
#define NAME_SPACE_H #include <iostream> using namespace std; namespace NameSpA
{
class getInfo
{
public:
virtual double getG() = ;
virtual double getA() = ;
}; class Circle : public getInfo
{
private:
const double PI = 3.1415;
int r; //C不存在设置默认值
double g;
double a; int c = ;
int b = c * ; public: Circle(int r)
{
this->r = r; cout << "radius:" << r << endl;
cout << "girth:" << g << endl;
cout << "area:" << a << endl; cout << "b:" << b << endl;
} double getG()
{
this->g = * PI*r;
cout << "girth:" << g << endl;
return g;
} double getA()
{
this->a = PI*r*r;
cout << "area:" << a << endl;
return a;
}
}; } #endif

注意点二:使用命名空间是需要先引入该头文件

#include "namesp.h"

using namespace NameSpA;  //可以使用

void main(int argc, char* argv[])    //第一个是参数数量,第二个是参数
{
cout << argc << endl; cout << "use namespace std" << endl; if (argc <= )
return; cout << argv[] << endl;
cout << argv[] << endl; int r = atoi(argv[]);
cout << r << endl;; getInfo* gi = new Circle(r); //一般设计内存就使用指针
gi->getA();
gi->getG(); system("pause");
return;
}

五:总结(结合C)

(一)c中命名空间

在C语言中只有一个全局作用域
C语言中所有的全局标识符共享一个作用域
标识符之间可能发生冲突

(二)C++命名空间

命名空间将全局作用域分成不同的部分
不同命名空间中标识符可以同名而不会发生冲突
命名空间可以嵌套
全局作用域叫做默认命名空间(直接使用即可,也可以::变量)

六:补充嵌套命名空间

头文件:namesp.h

namespace OutNP
{
int a = ; namespace InnerNP
{
int a = ;
}
}

cpp文件使用(一)简单演示

#include "namesp.h"

using namespace OutNP;

void main(int argc, char* argv[])    //第一个是参数数量,第二个是参数
{
cout << a; // system("pause");
return;
}

cpp文件使用(二)有冲突

cpp文件使用(三)无冲突

#include "namesp.h"

using namespace OutNP;
using namespace OutNP::InnerNP; //这样还是存在命名冲突 void main(int argc, char* argv[]) //第一个是参数数量,第二个是参数
{
cout << OutNP::a; //
cout << InnerNP::a; // system("pause");
return;
}

C++回顾day01---<命名空间>的更多相关文章

  1. C++回顾day01---<const常量重点>

    一:定义常整型数 const int a;(或者int const a;)  不涉及指针 不可改变值(也不可通过指针修改) 二:定义一个指向常整型数的指针 const int* c;   可改指针指向 ...

  2. C++类静态成员变量和const常量的初始化方法

    C++类静态成员变量和const常量在定义类的时候就必须初始化,否则都会编译出错. 而具初始化方法为: C++类静态成员变量初始化方法 #include <iostream> #inclu ...

  3. const常量类型

    1.定义:const常量类型表示一个”常值变量“,其值是不能被修改的变量.即一旦变量被声明为const类型,编译器将禁止任何试图修改该变量的操作. 2.声明:const <声明数据类型> ...

  4. #define宏常量和const常量的区别

    C++ 语言可以用const 来定义常量,也可以用#define 来定义常量.但是前者比后者有更多的优点:(1) const 常量有数据类型,而宏常量没有数据类型.编译器可以对前者进行类型安全检查.而 ...

  5. 在 C++ 程序中只使用 const 常量而不使用宏常量

    在 C++ 程序中只使用 const 常量而不使用宏常量,即 const 常量完 全取代宏常量. #include <iostream> /* run this program using ...

  6. define 和 const常量有什么区别?

    define在预处理阶段进行替换,const常量在编译阶段使用 宏不做类型检查,仅仅进行替换,const常量有数据类型,会执行类型检查 define不能调试,const常量可以调试 define定义的 ...

  7. 如何正确使用const(常量),define(宏)

    前言 在开发中,也许我们会经常使用到宏定义,或者用const修饰一些数据类型,经常有开发者不知道怎么正确使用,导致项目中乱用宏定义与const修饰符.本篇主要介绍在开发中怎么正确使用const与def ...

  8. C++ const常量对象、常量成员函数和常引用

    01 常量对象 如果不希望某个对象的值被改变,则定义该对象的时候可以在前面加const关键字 class CTest { public: void SetValue() {} private: int ...

  9. 【C++编程基础】(1)—— 函数原型声明、函数模板、引用、const 常引用、const 常量指针

    一.函数原型声明: 1.函数声明告诉编译器函数的名称,和如何调用函数(返回类型和参数):函数定义提供了函数的实际主体. 2.强制性的:在C++中,如果函数调用的位置在函数定义之前,则要求在函数调用之前 ...

  10. const常量与define宏定义的区别(转)

    #define RADIUS 100; const  float   RADIUS = 100; (1) 编译器处理方式不同 define宏是在预处理阶段展开. const常量是编译运行阶段使用. ( ...

随机推荐

  1. BZOJ1319Sgu261Discrete Roots——BSGS+exgcd+原根与指标+欧拉定理

    题目描述 给出三个整数p,k,a,其中p为质数,求出所有满足x^k=a (mod p),0<=x<=p-1的x. 输入 三个整数p,k,a. 输出 第一行一个整数,表示符合条件的x的个数. ...

  2. 洛谷P2918 [USACO08NOV]买干草(一道完全背包模板题)

    题目链接 很明显的一道完全背包板子题,做法也很简单,就是要注意 这里你可以买比所需多的干草,只要达到数量就行了 状态转移方程:dp[j]=min(dp[j],dp[j-m[i]]+c[i]) 代码如下 ...

  3. bzoj 2038: [2009国家集训队]小Z的袜子(hose) (莫队)

    Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜 ...

  4. java使用Rome解析Rss的实例(转)

    Rome简介 Rome是为RSS聚合而开发的开源包,它可以支持0.91.0.92.0.93.0.94.1.0.2.0,可以说rss的版本基本上都支持了. Rss简介 RSS是站点用来和其他站点之间共享 ...

  5. 自定义chromium浏览器

    自定义chromium浏览器 来源  https://chaopeng.me/blog/2018/08/17/how-to-develop-full-homebrew-browser.html 最近有 ...

  6. HNOI2019总结

    HNOI2019总结 Day 1 开场看三道题,T1是个计算几何,T2是个操作树加\(border\),T3题意有点复杂.想T1想了半个多小时,发现那个钝角不是很会处理,但是40分暴力应该还是可以写, ...

  7. BZOJ 2069: [POI2004]ZAW(Dijkstra + 二进制拆分)

    题意 给定一个有 \(N\) 个点 \(M\) 条边的无向图, 每条无向边 最多只能经过一次 . 对于边 \((u, v)\) , 从 \(u\) 到 \(v\) 的代价为 \(a\) , 从 \(v ...

  8. ALLOT流控设备操作手册指引

    ALLOT流控设备操作手册指引 1  简介 1.1 设备介绍 1.1.1 NetXploeer三层结构 Allot设备的管理如上图所示,采用三层结构. 1)NetEnforcer层,包括所有型号的Ne ...

  9. 「洛谷2495」「BZOJ3052」「SDOI2001」消耗战【虚树+树形动态规划】

    题目大意 给你\(k\)个点,让这一些点和一号节点断开,删去某一些边,求最小的删去边权之和. 做题的心路历程 做了\(HG\)昨天的模拟赛,深深感觉到了窝的菜,所以为了\(A\)掉T1这一道毒瘤,窝就 ...

  10. js-基本语法2

    类型转换 1.直接转换 parseInt() 与 parseFloat() alert('12'+7); //弹出127 alert( parseInt('12') + 7 ); //弹出19 ale ...