关于数据成员为引用类型的有关问题

关于数据成员为引用类型的问题
源程序如下:
#include <iostream.h>
class   Sample
{
      public:
          Sample(int   &a):i(a){}
          void   Set(int   a){i=a;}
          int   Get(){   return   i;}
      private:
          int   &i;
};
void   main(void)
{
      int   a=0;
      Sample   c(a),d(a);
      c.Set(10);
      cout < <d.Get() < <endl;
}

输出结果是10
列位大虾,请问是为什么呢...

------解决方案--------------------
Sample c(a),d(a);
相当与:c.i=a和d.i=a,也就是对象c和对象d的i数据成员都是对a的引用,可以理解为都指向同一个存储地址,那就a的存储地址。你调用c.Set(10);将c.i所指的地址的值改为10,也就是将a 的值改为10, 而d.i 也是指向a的,所以你调用d.get()输出的就是a的值了,也就是10;