C++操作符重载
作者:网络转载 发布时间:[ 2012/11/20 9:56:46 ] 推荐标签:
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]是右值。表现正常。

sales@spasvo.com