运算符重载
C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。
c++中允许在类和枚举对象上定义几乎所有的c++运算符,这通常成为运算符重载(operator overloading),这种机制用于给用户自定义类型提供习惯的符号表示方法。
运算符重载是通过创建运算符函数实现的,运算符函数定义了重载的运算符将要进行的操作。运算符函数的定义与其他函数的定义类似,惟一的区别是运算符函数的函数名是由关键字operator和其后要重载的运算符符号构成的。运算符函数定义的一般格式如下:
<返回类型说明符> operator <运算符符号>(<参数表>)
{
<函数体>
}
例子1:Month operator++(Month&m){//为什么这个传递的是引用???
m = (m = dec)?jan:Month(m+1);
return m;
}
例子2:vector<string>month_tbl;
ostream&operator<<(ostream&os,Month m){//这个传递的是值呢?
return os<<month_tbl[m];
};
规则:
1.不能定义新的运算符,c++中原来不包含的,如** ¥¥
2.一个重载运算符必须作用于至少一个用户自定义的类型
比如:int operator+(int,int)//error,两个内置类型不行
Vector operator+(const Vector&,const Vector&)//ok
Vector operator+=(const Vector&,int)//ok