取负运算符“-”是一元运算符,当作为成员函数重载时参数表中没有参数,那个惟一的操作数以this指针的形式隐藏在参数表中。当把取负运算符作为非成员函数重载时,那个惟一的操作数必须出现在参数表中。“-”是一个典型的一元运算符,除了++、--外的其他一元运算符的用法与此类似。例如把取负运算符“-”当成员函数重载:类名operator-(){//函数体}。
2.重载加法运算符“+”
加法运算符“+”是一个二元运算符,当作为成员函数重载时参数表中只有1个参数,对应于第二个操作数,而第一个操作数是对象本身,以this指针的形式隐藏在参数表中。当把加法运算符作为非成员函数重载时,两个操作数必须都出现在参数表中。“+”是一个典型的二元运算符,除了赋值类运算符外的其他二元运算符的用法与此类似例如把加法运算符“+”作为友元函数重载的声明形式:
friend类名operator+(参数1,参数2){//函数体}
3.重载运算符“++”和“- -”
C++中提供了一元自加(十+)与自减运算符(一)的前缀运算和后缀运算,两者之间的最大差别在于说明的格式不同,对于++而言:
函数类型operator + +()//前缀运算
函数类型operator++(int) //后缀运算
由于在后缀情况下不需要使用形参,因此在函数定义中,只给出类型而没有指定形参名,这是C++所允许的另外需要注意的是,若将++重载为友元运算符,由于它们要修改操作数,所以必须使用引用参数。对于--来说,与++的用法完全一样。
4.重载类型转换并“long”类型转换符必须作为成员函数重载。在重载类型转换符时,不需要返回值类型的声明。
重载类型转换符“long”的语法形式为:
operator long(参数表){//函数体}
其他类型转换符的重载方法与此类似。
小提示:
=,[ ],(),->及所有的类型转换运算符只能作为成员函数重载,而且是不能针对枚举类型操作数的重载。
5.重载赋值运算符“=”
赋值运算符也必须作为成员函数重载。一般情况下并不需要重载“=”,但若类中包含指针指向动态空间的指针时,就需要重载赋值运算符。重载赋值运算符“=”时应注意的几点如下:
(1)返回值应声明为引用,但函数体中总是用return*this;语句返回。
(2)若参数被声明为指针或引用,一般应加上eonst修饰。
(3)若一个类需要重载运算符=,一般也就需要定义自己特有的拷贝构造函数,反之亦然。
6.重载复合赋值运算符“+=”
重载复合赋值运算符“+=”、“-=”、“*=”的方法与重载赋值运算符的方法差不多,不同的是复合赋值运算符既可重载为成员函数又可重载为非成员函数。当重载为友元函数时,两个操作数都必须出现在参数表中,而且第1个参数应声明为引用。
7.重载关系操作符“>”
在C++中的关系操作符有<、>、= =等,重载的这些关系运算符函数应返回逻辑值。例如,将关系运算符>重载为类A的成员函数的声明形式是:
bool operator>(A a){return num*a. den>a. num*den;}
8.重载下标访问运算符“[]”
重载下标访问运算符“[]”,可以实现数组下标越界检测等。下标访问运算符“[]”只能作为成员函数重载。例如,一般下标访问运算符“[]”重载函数的定义形式为:
返回类型类名::operator[](下标类型形参){//函数体}
小提示:
一个重载的运算符函数不能带有默认的参数。
9.重载C++流运算符“>>”和“<<”
在C++中,C++流输入运算符“>>”和输出运算符“<<”只能重载为非类成员函数,一般重载为友元函数。重载C++流输入运算符“>>”和输出运算符“<<”的格式为:
istream& operator>>( istream&,<类名>&);
ostream& operator<<(ostream&,<类名>);
文章来源于领测软件测试网 https://www.ltesting.net/