首先回顾一下重载运算符的相关知识:
1.重载运算符的函数一般格式:
函数类型 operator 运算符名称(形参表)
{ 对运算符的重载处理 }
2.重载运算符规则
( 1 )C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载。
( 2 ) 除了类属关系运算符 " . " 、成员指针运算符 " .* " 、作用域运算符 " :: " 、sizeof运算符和三目运算符 " ?: " 以外,C ++ 中的所有运算符都可以重载。
( 3 ) 重载不能改变运算符运算对象(即操作数)的个数。
( 4 ) 重载之后的运算符不能改变运算符的优先级和结合性。
( 5 ) 重载运算符的函数不能有默认的参数。
( 6 ) 重载的运算符必须和用户定义的自定义类型的对象一起使用,其参数至少应有一个是类对象(或类对象的引用)。
( 7 ) 用于类对象的运算符一般必须重载,但是有两个例外,运算符“=”和“&”不必用户重载。
下面是我在学习C++过程中的一道习题,练习了重载运算符:
有两个矩阵a和b,均为2行3列。求两个矩阵之和。重载运算符“+”,使之能用于矩阵相加。如c=a+b。重载流插入运算符“<<”和流提取运算符“>>”,使之能用于该矩阵的输入和输出。
下面是代码:
#include <iostream>
#include <cstring>
/**
重载+ - * /运算符和<<流插入,>>流提取运算符
**/
using namespace std;
class matrix
{
private:
int m[2][3];
public:
matrix()
{
memset(m,0,sizeof(m));
};
matrix operator +(matrix m2);
friend istream&operator>>(istream&input,matrix &s);
friend ostream&operator<<(ostream&output,matrix &s);
};
istream&operator>>(istream&input,matrix &s)
{
for(int i=0; i<2; i++)
for(int j=0; j<3; j++)
input>>s.m[i][j];
return input;
}
ostream&operator<<(ostream&output,matrix &s)
{
for(int i=0; i<2; i++)
{
for(int j=0; j<3; j++)
{
output<<s.m[i][j]<<" ";
}
output<<endl;
}
return output;
}
void matrix::display()
{
for(int i=0; i<2; i++)
{
for(int j=0; j<3; j++)
{
cout<<m[i][j]<<" ";
}
cout<<endl;
}
}
matrix matrix::operator +(matrix m2)
{
matrix res;
for(int i=0; i<2; i++)
for(int j=0; j<3; j++)
res.m[i][j]=m[i][j]+m2.m[i][j];
return res;
}
int main()
{
matrix a,b,c;
cin>>a;
cin>>b;
c=a+b;
cout<<c;
return 0;
}