C++重载运算符基本用法(operator+,operator*)

本文主要总结C++中类的重载运算符用法。类的重载运算符可以用于两个类相加或减之类,也就是算术运算符(+,-,*,/,%,>,<,=,!=)和其它一些已存在的运算符重载(new,[])等都可以通过重载运算符函数operatorOP()进行重载。其中OP为重载运算符(比如运算符加法+),可以在重载函数operatorOP(){}中定义要实现的方法,下面将展示加法+和乘法的运算符实例。

注意:

a1 赋值操作运算符不能被继承;

a2 算数运算符可以被继承;

 

一、重载函数(加法+和乘法*)原理

1.1类的加法(+)运算符重载

类加法运算符重载原理如下:

classA+classB==classA.operator+(classB);

当两个类相加时,相当于调用上述重载函数。

1.2类的乘法(*)运算符重载

其中乘法需要通过友元函数来实现,不过博主这个例子没用友元函数,是用成员函数实现。当一个整数跟类相乘即classB==10*classA,相当于调用如下重载函数:

classB==classA.operator*(10,classA);

二、定义和调用重载函数加法+和乘法*的完整实例代码

1.1添加如下代码

qoperator.h头文件

#ifndef QOPERATORCLASS_H
#define QOPERATORCLASS_H

class QOperatorClass
{
public:
    QOperatorClass();    
    QOperatorClass operator+(const QOperatorClass &t) const;            //成员函数重载加法+运算符,函数成员参数&t为引用,可以减少内存和加快运算速度
    QOperatorClass operator*(int m); //友元函数重载乘法*运算符
    void show();

private:
    int value1;
    int value2;
};

#endif // QOPERATORCLASS_H

 

qoperator.cpp源文件

#include "qoperatorclass.h"
#include <QDebug>

QOperatorClass::QOperatorClass()
{
    value1=1;
    value2=2;
}

QOperatorClass QOperatorClass::operator+(const QOperatorClass &t) const
{
    QOperatorClass temp;
    temp.value1=value1+t.value1;
    temp.value2=value2+t.value2;
    return temp;
}

QOperatorClass QOperatorClass::operator*(int m)
{
    QOperatorClass temp;
    temp.value1=value1*m;
    temp.value2=value2*m;
    return temp;
}

void QOperatorClass::show()
{
    qDebug()<<"value1=="<<value1<<"\tvalue2=="<<value2;
}

 

按钮槽函数调用

#include "qoperatorclass.h"
#include <QDebug>

void Widget::on_pushButton_2_clicked()
{
    qDebug()<<"两个类加法运算符重载operator+()";
    QOperatorClass A;
    QOperatorClass B;
    QOperatorClass C;
    C.show();           //显示没进行加法+运算前的值
    C=A+B;
    C.show();           //显示加法+运算后的值

    qDebug()<<"\n两个类乘法运算符重载operator*()";
    QOperatorClass E;
    QOperatorClass F;
    F.show();           //显示没进行乘法*运算前的值
    F=E*10;
    F.show();           //显示乘法*运算后的值
}

1.2结果如下所示

 

 

参考内容:

《C++ Primer Plus》(第6版)中文版  388-392页(参考:类运算符重载)

©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页