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)的区别?