zoukankan      html  css  js  c++  java
  • C++中 auto自己主动变量,命名空间,using作用以及作用域

    

    1.autokeyword的用途

    A:自己主动变量。能够自己主动获取类型,输出,类似泛型

    B:自己主动变量,能够实现自己主动循环一维数组

    C:自己主动循环的时候,相应的必须是常量

    2.auto自己主动变量,自己主动匹配类型的案比例如以下:

    注意:假设是在QT下执行上面的的程序须要加上C++11的相关配置(CONFIG += C++11)


    3.通过autokeyword自己主动循环一维数组的案例

    #include<iostream>

    #include<stdlib.h>

    #include<iomanip>

    usingnamespacestd;

    voidmain()

    {

       //定义一维数组。以下的数组名是一个指针常量

       intnum[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

       //通过循环遍历出数组

       for (autodata :num)

       {

           cout <<setw(5) <<data;

       }

       cout <<endl;

     

       //当变成二维数组之后,不能直接通过auto来输出

       //auto自己主动循环begin endl;必须是一个数组的常量

       doublenum2[2][5] = { 1.0, 2.0, 3.0, 4.5, 5, 6, 7, 8, 9, 10 };

       for (autodata :num2)//泛型C++语法。循环一维数组,是个常量

       {

           cout <<data <<std::endl;

           for (inti = 0;i < 5;i++)

           {

               std::cout<<setw(5) << *(data +i);

           }

           cout <<endl;

       }

       system("pause");

    }

    执行结果例如以下:

    4.关于头文件

    C++中,为了区分C++,C++中不使用.h文件头

    5.C++注重类型。它是一种强类型语言,严格检查类型。

    6.C++中的输出函数,宽字符输出,赋初值的方式,输出符,::域控制符

    #include<iostream>  //C++中,为了区分C++,C++中不使用.h文件头

    #include<stdlib.h>

    usingnamespacestd;

     

    voidmain()

    {

       inta = 5;

       //C++中赋值:A变量名(数值) B:变量名=数值,通过这两种方式。

       intb(5);

       cout <<a <<" " <<b <<endl;

       //通过括号赋值

       doublec(3.5);

       cout <<c <<endl;

       //通过等号赋值

       char *pStr ="1234";

       cout << *pStr <<" " <<pStr <<endl;

       //通过括号赋值

       char *str("china");

       cout << *str <<" " <<str <<endl;

       //宽字符,汉子,棒子文

       wchar_t *str2(L"china");

       wcout << *str2 <<" " <<str2 <<endl;

     

       system("pause");

    }

    #include<iostream>

     

    voidmain()

    {

       //输出符 <<

       //std命名空间

       //::域控制符

       std::cout << "hello world";

     

       system("pause");

    }

    7.一个文件里使用另外一个文件里声明的变量的时候,C++要求显示的加上externkeyword调用这个全局变量。

    8.调用命名空间中的变量已经命名空间中的函数

    A:有名命名空间

    #include"iostream"

    #include"stdlib.h"

     

    namespacemyspace

    {

       inta(15);

       voidprint()

       {

           std::cout << "锄禾日当午" << std::endl;

       }

    }

     

    namespacemyspaceA

    {

       inta(25);

       voidprint()

       {

           std::cout << "AAAAAAAAAAAA" <<std::endl;

       }

    }

     

    voidmain()

    {

       inta(5);

       //假设想不被上面的a变量影响,而直接訪问命名空间

       //中的变量,这里要加上命名空间名

       std::cout << "myspace a = " <<myspace::a << std::endl;

       //调用myspaceA中定义的变量a

       std::cout << "myspaceA a = " <<myspaceA::a << std::endl;

       std::cout << "main a = " <<a <<std::endl;

     

       std::cout << std::endl;

       //调用命名空间中的函数

       myspace::print();

       myspaceA::print();

     

       system("pause");

    }

    执行结果例如以下:

    B:无名命名空间

    #include"iostream"

    //没有命名的命名空间中的參数能够直接调用

    namespace

    {

       inta(3);

       voidprint()

       {

           std::cout << "gogogo";

       }

    }

     

    voidmain()

    {

       //说明没有命名的命名空间能够直接调用a

       std::cout << a <<std::endl;

       print();

       getchar();

    }

    输出结果是:

    3

    gogogo

    C:命名空间中全部的数据,函数。类,对象都是共同拥有的,结构体内部的默认是共同拥有的。

    案比例如以下:

    #include<iostream>

     

    //namespace全部数据,函数,类,对象都是共同拥有

    namespacerunmove

    {

       inty(5);

       int(*padd)(int,int);//函数指针接口

       inty1(5);

       classmyclass

       {

           //类中的变量等默认是私有的

       public:

           inta;

       };

    }

     

    //相应上面的函数指针

    intadd(inta,intb)

    {

       returna +b;

    }

     

    intaddp(inta,intb)

    {

       std::cout << a <<" " <<b <<std::endl;

       returna +b;

    }

     

    //结构体默认是透明的(public的)

    structMyStruct

    {

       intb;

    private:

       inta;//是私有

    };

     

    voidmain()

    {

       //namespace全部数据,函数,类,对象都是共同拥有

       MyStructstruct1;//结构体内部默认公有

       struct1.b = 20;

       std::cout << struct1.b << std::endl;

     

       std::cout << runmove::y << " " <<runmove::y1 << std::endl;

       runmove::padd = addp;

       std::cout << runmove::padd(5, 6) << std::endl;

       getchar();

    }

    9.使用usingkeyword的时候。必须在命名空间的后面

    关于作用域:

    A:在函数体内使用using的时候,using的作用域是从using这行代码開始到函数体结束。

    B:函数体外使用using的时候。作用域是从using这行代码開始到文件本文件结尾。

    案例说明:

    #include<iostream>

    #include<stdlib.h>

     

    namespacemydata

    {

       inta(6);

    }

     

    namespaceyourdata

    {

       inta(8);

    }

     

    //假设想使用mydata这个明明空间,而且使用usingkeyword,这时候要把using

    //mydata命名空间后面

    usingnamespacemydata;

    usingnamespaceyourdata;

     

    //using假设变量重名,会出现不明白错误,加上命名空间修饰符

    voidgo()

    {

       //命名空间假设在块语句内部,作用域是定义開始到语句结束

       std::cout << mydata::a << std::endl;

    }

     

    //using namespacemydata;//作用域为从代码開始到结束

    voidmain()

    {

       std::cout << mydata::a << std::endl;

       std::cout << yourdata::a << std::endl;

     

       system("pause");

    }

    10.命名空间的嵌套,为命名空间起别名,命名空间的拓展

    #include<iostream>

    namespacerunrunrunrun

    {

       inta(10);

       char *str("gogogo");

       namespacerun  //命名空间的嵌套

       {

           inta(9);

       }

    }

    //命名空间的拓展

    namespacerunrunrunrun

    {

       int y(5);

       //int a(15);重定义错误

    }

    //注意这里的r就是别名,而不是后者

    namespacer =runrunrunrun;//给命名空间起一个别名

     

    voidmain()

    {

       //命名空间能够嵌套

       std::cout << r::run::a << std::endl;

       std::cout << r::y << std::endl;

       std::cout << r::a << std::endl;

       system("pause");

    }

    11.关于默认參数问题

      A:默认參数必须放在右边

      B:默认參数中间不同意出现不默认的

    #include<stdio.h>

    #include<stdlib.h>

    #include<iostream>

     

    //默认參数必须放在右边

    //默认參数中间不同意出现不默认的

    voidprint(intc,inta = 1,intd = 2,intb = 3)

    {

       std::cout << a <<b <<c <<std::endl;

    }

     

    voidprintf(doublec)

    {

       std::cout << "hello,world" <<std::endl;

    }

     

    voidmain()

    {

       //print(1,2,3);

       //函数指针没有默认參数,必须所有输入数据

       void(*pt1)(intc,inta,intd,intb) =print;

       pt1(100,1,2,3);//函数指针调用。没实用默认的

       print(100);

     

       system("pause");

    }

  • 相关阅读:
    (转)悲催IT男的心酸恋爱史
    javascript递归函数问题
    《Professional Javascript For Web Developers 3rd Edition》读书笔记:javascript闭包中的this对象
    X509Store获取不到证书的问题
    [源码解析] PyTorch 分布式(7) DistributedDataParallel 之进程组
    [源码解析] PyTorch 分布式(8) DistributedDataParallel之论文篇
    [源码解析] PyTorch 分布式(10)DistributedDataParallel 之 Reducer静态架构
    [源码解析] PyTorch 分布式 Autograd (2) RPC基础
    [源码解析] PyTorch 分布式(9) DistributedDataParallel 之初始化
    [源码解析] PyTorch 分布式(12) DistributedDataParallel 之 前向传播
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5147403.html
Copyright © 2011-2022 走看看