【转】C++中的引用类型和枚举类型

来源:互联网 发布:分布式算法导论 pdf 编辑:程序博客网 时间:2024/06/06 00:41

引用类型也称别名,它是个很有趣的东西。在c++ 下你可以把它看作是另外的一种指针,通过引用类型我们同样也可以间接的操作对象,引用类型主要是用在函数的形式参数上,通常我们使用它是把类对象传递给一个函数。

  • 引用对象采用类型名加上&符号和名称的方式进行定义。例如:(int &test;),这里我们就定义了一个int类型的名为test 的引用
  • 但是int &test;这样的方式是不能够被编译成功的,因为引用的定义必须同时给应用进行赋值操作,这里的赋值并不是说把变量的值传递给引用,而是把引用指向变量,写成这样就对了:(int &test=变量名;)。
    我们来看下面一段代码
#include <iostream>  using namespace std;  int main()  {      int a=10;      int &test=a;      test=test+2;      cout << &a <<","<< &test <<";"<< a <<","<< test << endl;} ----------- Output --------------------0xa9fe440xa9fe441212

我们会发现&a和&test的地址显示是相同的,a和test的值显示也是一样的,也就是说,test是a的别名。

当引用类型遇上const的时候会有一个特别之处,它的奥妙就在于可以进行不同类型的对象的初始化,而这一切在普通变量操作上是不可能的:

#include <iostream>  using namespace std;  int main()  {      int a=10;      //double &test = a + 1.2f; //这句就是错误的!      const double &test = a + 1.2f;  //可以将float类型的值初始化到double    cout << &a <<","<< &test <<";"<< a <<","<< test << endl;} ----------- Output --------------------0xa9fe2c0xa9fe301011.2

这里要注意test和a的地址和值都不一样,test其实是等于a+1.2f的,也就是说test和a是完全的两个变量。

如果一个变量你需要几种可能存在的值,那么就可以被定义成为枚举类型。之所以叫枚举就是说将变量或对象可能存在的情况(可能的值)一一例举出来。

定义枚举变量由两种方式:

//第一种enum box{pencil,pen};enum box box2;  //或者简写成box box2;box当作一个type//第二种enum {pencil,pen}box,box2; //在声明的同时进行定义!
  • 枚举类型成员是常量
    枚举变量中的枚举元素系统是按照常量来处理的,故叫枚举常量,他们是不能进行普通的算术赋值的,(pencil=1;)这样的写发是错误的,但是你可以在声明的时候进行赋值操作!
    也就是说enum MyEnum{ one = 1 , two , three} ;const int one = 1; const int two = 2; const int three = 3; 差不多是一样的.
    这里要特别注意的一点是,如果你不进行元素赋值操作那么元素将会被系统自动从0开始自动递增的进行赋值操作,说到自动赋值,如果你只定义了第一个那么系统将对下一个元素进行前一个元素的值加1操作。
#include <iostream>  using namespace std;  int main()  {      enum egg {a,b,c};  //egg当作一种type    enum egg test; //在这里你可以简写成egg test;      test = c;    /*对枚举变量test进行赋予元素操作,这里之所以叫赋元素操作不叫赋值操作就是为了让大家明白枚举变量是不能直接赋予算数值的,例如(test=1;)这样的操作都是不被编译器所接受的,正确的方式是先进行强制类型转换例如(test = (enum egg) 0;)*/    if (test==c)      {          cout <<"枚举变量判断:test枚举对应的枚举元素是c" << endl;      }      if (test==2)      {          cout <<"枚举变量判断:test枚举元素的值是2" << endl;      }      cout << a << "|" << b << "|" << test <<endl;      test = (enum egg) 0; //强制类型转换      cout << "枚举变量test值改变为:" << test <<endl;  }----------- Output --------------------枚举变量判断:test枚举对应的枚举元素是c枚举变量判断:test枚举元素的值是20|1|2枚举变量test值改变为:0
  • 枚举变量中的枚举元素(或者叫枚举常量)在特殊情况下是会被自动提升为算术类型的
#include <iostream>  using namespace std;  int main()  {      enum test {a,b};      int c=1+b; //自动提升为算术类型      cout << c <<endl; } ----------- Output --------------------2

Reference:
深入理解C++枚举类型enum
三个月挑战c++——作者:管宁

0 0
原创粉丝点击