C++重载运算符

首先回顾一下重载运算符的相关知识:

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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值