C++ 重载操作符
C++ 几乎可以重载全部的运算符,而且只能够重载C++中已经有的。
· 不能重载的运算符:“.”、“.*”、“::”、“?:” · 重载之后运算符的优先级和结合性都不会改变。
可以重载为类的非静态成员函数; 可以重载为非成员函数。
重载单目运算符,前置的单目运算符不需要提供形参。如 ++ -- *= +=
...
而后置的单目运算符是需要提供参数来区别前置(为了重载)的。
class Even{
int number=0;
public:
A & operator ++ (){
number +=2;
return *this;
}
A operator ++ ( int ){
int old = number;
++(number);
return old;
}
}
前置++ 返回的是左值,而后置++ 返回的只是一个右值。
重载双目运算符,需要提供一个形参。如 + - * % /
...
class Matrix{
int ** elements;
int sizeX;
int sizeY;
public:
Matrix & operator + ( const Matrix & m ) const{
int newX = m.getX() > this.sizeX ? m.getX() : this.sizeX;
int newY = m.getY() > this.sizeY ? m.getY() : this.sizeY;
Matrix _new(newX,newY);
for( int i = 0; i< newX; i++ ){
for( int j =0; j< newY; j++ ){
_new[i][j] = m[i][j] + elements[i][j];
}
}
return _new;
}
}
重载为非成员函数
当需要对当前程序没有权限的类型进行操作符重载的时候,或是将不同类型重载到一起运算,都需要进行非成员函数重载。
重载时需要从左至右依次声明参与预算的各个参数
这个时候可以理解为以重载的形式写的常规函数。
非成员函数的重载操作符参数,不能全为普通类型。
文章地址: C++ 重载操作符 - Sprite keep learning
最近回复