本文主要分析,返回&,和返回值加const的作用。
- 返回&
定义一个数组模板:
template<class T>
class Array{
enum{size = 100};
T A[size];
public:
T& operator [](int index){//如果返回的没有引用,该操作符就不能作为左值了!!
//返回引用,表示返回对象本身,而不是对象的值。
require(index>=0 && index<size,"index out of range");
return A[index];
}
};
我们想重构操作符[],返回值为什么要加引用&呢。加了引用它就可以不仅作为右值,也可以作为左值了。也就是可以给他赋值,例如:
Array<int> ia;
ia[0]=1;//如果返回不加引用,编译器会提醒出错
2. 返回加const.
当返回值加了关键字const之后,返回的值又不能做左值了,即
Array<int> ia;
ia[0]=1;//如果加了const关键字,编译器会提醒出错
#include "StdAfx.h" #include<stdio.h> #include<malloc.h> #include<iostream> #include"require.h" template<class T> class Array{ enum{size = 100}; T A[size]; public: T& operator [](int index){//如果返回的没有引用,该操作符就不能作为左值了!!如果加了const也不能作为左值了
//返回引用,表示返回对象本身,而不是对象的值。
require(index>=0 && index<size,"index out of range"); return A[index]; } }; void main() { Array<int> ia; Array<float> fa; for(int i=0;i<20;i++){ ia[i]=i*i; fa[i]=i*1.414; } for(int j=0;j<20;j++) { cout<<ia[j]<<" "; cout<<fa[j]<<" "; } }