4、下标操作符

  小标操作应该注意,在用作赋值的左右操作数时,都应该表现的正常。所以,这要求返回的类型应该为引用。

  小面定义一个类China,包含省级行政单位,定义在hina.h头文件中:

#if !defined(AFX_HINA_H__2E76F1BB_EE30_4584_9C8F_C46A4C613620__INCLUDED_)
#define AFX_HINA_H__2E76F1BB_EE30_4584_9C8F_C46A4C613620__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif
#include <string>
class China
{
public:
 China();
 std::string& operator[](const int index);
 virtual ~China();
private:
 std::string *province;


};

#endif

  源文件为hina.cpp,如下实现:

#include "hina.h"
China::China()
{
 province=new std::string[34];
 province[0]=std::string("山西省");
 province[1]=std::string("湖北省");
 province[2]=std::string("北京市");

}

China::~China()
{
 delete []province;
}

std::string& China::operator [](const int index)
{
 if(index<0||index>34)
  return std::string("有错误");

 return province[index];
}

  这样保证下标返回返回的值既可以是左值,又是右值。在main函数中测试通过:

#include <iostream>
#include "hina.h"
using namespace std;
int main()
{
 China c;
 c[0]="张译成";
 cout<<c[0]<<endl;
 return 0;
}

  我将山西省换成我的名字,改变了c对象中的值,c[0]="张译成";中,c[0]是左值,cout<<c[0]<<endl;中c[0]是右值。表现正常。