background image

  put(0)=10; //以 put(0)函数值作为左值,等价于 vals[0]=10;
  put(9)=20; //以 put(9)函数值作为左值,等价于 vals[9]=20;
  cout
  int &put(int n)
  {
  if (n>=0 && n<=9 ) return vals[n];
  else { cout<<"subscript error"; return error; }
  }
  (5)在另外的一些操作符中,却千万不能返回引用:+-*/ 四则运算符。它

们不能返回引用,Effective C++[1]的 Item23 详细的讨论了这个问题。主

要原因是这四个操作符没有 side effect,因此,它们必须构造一个对象作为

返回值,可选的方案包括:返回一个对象、返回一个局部变量的引用,返回
一个 new 分配的对象的引用、返回一个静态对象引用。根据前面提到的引用

作为返回值的三个规则,第 2、3 两个方案都被否决了。静态对象的引用又因

为((a+b) == (c+d))会永远为 true 而导致错误。所以可选的只剩下返回一个

 

对象了。

 6. “

引用 与多态的关系?

  引用是除指针外另一个可以产生多态效果的手段。这意味着,一个基类
的引用可以指向它的派生类实例。

  例 4
  Class A; Class B : Class A{...}; B b; A& ref = b;
  7. “

引用 与指针的区别是什么?

  指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。
程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用

的操作就是对目标变量的操作。此外,就是上面提到的对函数传 ref 和
pointer 的区别。

  8. 

什么时候需要 引用 ?

  流操作符<<和>>、赋值操作符=的返回值、拷贝构造函数的参数、赋

值操作符=的参数、其它情况都推荐使用引用。

 

  以上 2-8 参考:
http://blog.csdn.net/wfwd/archive/2006/05/30/763551.aspx

  9. 结构与联合有和区别?
  1. 结构和联合都是由多个不同的数据类型成员组成, 但在任何同一时刻, 

联合中只存放了一个被选中的成员(所有成员共用一块地址空间), 而结构的所

有成员都存在(不同成员的存放地址不同)。
  2. 对于联合的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存

在了, 而对于结构的不同成员赋值是互不影响的。
 16. 关联、聚合(Aggregation)以及组合(Composition)的区别?