运算符重载

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

 

posted @ 2016-01-12 19:44  耀匀  阅读(123)  评论(0编辑  收藏  举报