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");

}






本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5147403.html,如需转载请自行联系原作者

相关文章
|
2月前
|
存储 C++
C++语言中指针变量int和取值操作ptr详细说明。
总结起来,在 C++ 中正确理解和运用 int 类型地址及其相关取值、设定等操纵至关重要且基础性强:定义 int 类型 pointer 需加星号;初始化 pointer 需配合 & 取址;读写 pointer 执向之处需配合 * 解引用操纵进行。
162 12
|
12月前
|
存储 安全 编译器
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值(一)
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值
163 1
|
12月前
|
安全 程序员 编译器
【C++】如何巧妙运用C++命名空间:初学者必备指南
【C++】如何巧妙运用C++命名空间:初学者必备指南
134 1
|
安全 程序员 编译器
C++ 11新特性之auto和decltype
C++ 11新特性之auto和decltype
142 3
|
12月前
|
C语言 C++
实现两个变量值的互换[C语言和C++的区别]
实现两个变量值的互换[C语言和C++的区别]
136 0
|
12月前
|
存储 编译器 程序员
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值(二)
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值
131 0
|
程序员 C++ 容器
C++编程基础:命名空间、输入输出与默认参数
命名空间、输入输出和函数默认参数是C++编程中的基础概念。合理地使用这些特性能够使代码更加清晰、模块化和易于管理。理解并掌握这些基础知识,对于每一个C++程序员来说都是非常重要的。通过上述介绍和示例,希望能够帮助你更好地理解和运用这些C++的基础特性。
113 0
|
JavaScript 前端开发 Java
通过Gtest访问C++静态、私有、保护变量和方法
通过Gtest访问C++静态、私有、保护变量和方法
291 0
|
C语言 C++
C++(六)Namespace 命名空间
命名空间(Namespace)是为了解决大型项目中命名冲突而引入的机制。在多库集成时,不同类库可能包含同名函数或变量,导致冲突。C++通过语法形式定义了全局无名命名空间,并允许对全局函数和变量进行作用域划分。命名空间支持嵌套与合并,便于协同开发。其使用需谨慎处理同名冲突。
|
8月前
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。