zoukankan      html  css  js  c++  java
  • 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() = 0;
            virtual double getA() = 0;
        };
    
        class Circle : public getInfo
        {
        private:
            const double PI = 3.1415;
            int r;    //C不存在设置默认值
            double g;
            double a;
    
            int c = 10;
            int b = c * 2;
    
        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 = 2 * 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 <= 1)
            return;
    
        cout << argv[0] << endl;
        cout << argv[1] << endl;
    
        int r = atoi(argv[1]);
        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 = 0;
    
        namespace InnerNP
        {
            int a = 1;
        }
    }

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

    #include "namesp.h"
    
    using namespace OutNP;
    
    void main(int argc, char* argv[])    //第一个是参数数量,第二个是参数
    {
        cout << a;    //0
    
        system("pause");
        return;
    }

    cpp文件使用(二)有冲突

     

    cpp文件使用(三)无冲突

    #include "namesp.h"
    
    using namespace OutNP;
    using namespace OutNP::InnerNP;    //这样还是存在命名冲突
    
    void main(int argc, char* argv[])    //第一个是参数数量,第二个是参数
    {
        cout << OutNP::a;    //0
        cout << InnerNP::a;    //1
    
        system("pause");
        return;
    }
  • 相关阅读:
    Java 继承
    java 封装
    单选题
    实操题
    面试题
    Linux系统常用命令
    Shell脚本编写登陆小程序.sh
    利用shell脚本实现每隔60秒磁盘内存数据监控脚本
    shell脚本一键配置本地yum源
    shell点名脚本不重复人名
  • 原文地址:https://www.cnblogs.com/ssyfj/p/10623655.html
Copyright © 2011-2022 走看看