C++回顾day01---<命名空间>
一: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---<命名空间>的更多相关文章
- C++回顾day01---<const常量重点>
一:定义常整型数 const int a;(或者int const a;) 不涉及指针 不可改变值(也不可通过指针修改) 二:定义一个指向常整型数的指针 const int* c; 可改指针指向 ...
- C++类静态成员变量和const常量的初始化方法
C++类静态成员变量和const常量在定义类的时候就必须初始化,否则都会编译出错. 而具初始化方法为: C++类静态成员变量初始化方法 #include <iostream> #inclu ...
- const常量类型
1.定义:const常量类型表示一个”常值变量“,其值是不能被修改的变量.即一旦变量被声明为const类型,编译器将禁止任何试图修改该变量的操作. 2.声明:const <声明数据类型> ...
- #define宏常量和const常量的区别
C++ 语言可以用const 来定义常量,也可以用#define 来定义常量.但是前者比后者有更多的优点:(1) const 常量有数据类型,而宏常量没有数据类型.编译器可以对前者进行类型安全检查.而 ...
- 在 C++ 程序中只使用 const 常量而不使用宏常量
在 C++ 程序中只使用 const 常量而不使用宏常量,即 const 常量完 全取代宏常量. #include <iostream> /* run this program using ...
- define 和 const常量有什么区别?
define在预处理阶段进行替换,const常量在编译阶段使用 宏不做类型检查,仅仅进行替换,const常量有数据类型,会执行类型检查 define不能调试,const常量可以调试 define定义的 ...
- 如何正确使用const(常量),define(宏)
前言 在开发中,也许我们会经常使用到宏定义,或者用const修饰一些数据类型,经常有开发者不知道怎么正确使用,导致项目中乱用宏定义与const修饰符.本篇主要介绍在开发中怎么正确使用const与def ...
- C++ const常量对象、常量成员函数和常引用
01 常量对象 如果不希望某个对象的值被改变,则定义该对象的时候可以在前面加const关键字 class CTest { public: void SetValue() {} private: int ...
- 【C++编程基础】(1)—— 函数原型声明、函数模板、引用、const 常引用、const 常量指针
一.函数原型声明: 1.函数声明告诉编译器函数的名称,和如何调用函数(返回类型和参数):函数定义提供了函数的实际主体. 2.强制性的:在C++中,如果函数调用的位置在函数定义之前,则要求在函数调用之前 ...
- const常量与define宏定义的区别(转)
#define RADIUS 100; const float RADIUS = 100; (1) 编译器处理方式不同 define宏是在预处理阶段展开. const常量是编译运行阶段使用. ( ...
随机推荐
- BZOJ3224普通平衡树——旋转treap
题目: 此为平衡树系列第一道:普通平衡树您需要写一种数据结构,来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3. 查询x数的排名(若有多个相同的数, ...
- BZOJ5203 [NEERC2017 Northern] Grand Test 【dfs树】【构造】
题目分析: 首先观察可知这是一个无向图,那么我们构建出它的dfs树.由于无向图的性质我们可以知道它的dfs树只有返祖边.考虑下面这样一个结论. 结论:若一个点的子树中(包含自己)有两个点有到它祖先的返 ...
- 【XSY2718】gift 分数规划 网络流
题目描述 有\(n\)个物品,买第\(i\)个物品要花费\(a_i\)元.还有\(m\)对关系:同时买\(p_i,q_i\)两个物品会获得\(b_i\)点收益. 设收益为\(B\),花费为\(A\), ...
- C#中equal与==的区别
C#中equal与==的区别 来源 https://www.cnblogs.com/dearbeans/p/5351695.html C#中,判断相等有两种方式,一种是传统的==操作,一种是objec ...
- JS简易弹出层
目标 实现简易的js弹出框.为了简单灵活的在小项目中使用. 实现思路 研究bootstrap的弹出框效果后,认为层级示意图如下: 层说明 弹出层分为三层.最底层的遮罩层,覆盖在浏览器视口上.它之上是弹 ...
- extern C小结
名词解释 1.extern extern翻译为外部的,用在变量或函数之前,使其可见范围拓宽,这就是为啥叫extern吧.那它是用来干嘛的呢?当用在变量或函数之前,提示编译器到其他模块寻找其定义. 举个 ...
- NOI2009管道取珠(dp)
题意:给定两列球,可以从任意一列球的末尾弹出一个球,最后会得到一个序列,设第i种序列可以被a[i]种操作产生,那么会产生a[i]^2的贡献,求贡献和. Solution: 首先我们观察a[i]^2的含 ...
- 状压DP总结
状态压缩就是将一行的状态压成一个二进制数,这个数的二进制形式反映了这一行的情况 比如0100111的意义为:这一排的第一个数没被使用,第二个被占用了,第三四个没被占用,第五六七个被占用 我们知道位运算 ...
- Electron一学习资源收集和练习demo
1.近日为了做项目查资料学习electron,简直头都要炸了,就官方的electron-quick-start的例子进行了基本的练习之后,不断的查资料终于发现一些有用的demo来看源代码学习,一遍看代 ...
- 【洛谷P4878】布局
题目大意:给定一个长度为 N 的递增序列,有 M 组差分约束关系,求满足这些约束关系时,第一个数和第 N 个数的差是多少. 题解:首先,能否满足约束关系需要判断一下负环,若满足约束关系,再从第一个点 ...