C++编程入门(二) 互动版

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

运算符重载

C++允许程序员重新定义已有的运算符,称为运算符重载,目的是类的对象可以用来执行特定的功能。使用类成员函数实现运算符重载的格式为:

类名 operator 运算符 (参数表);

operator是关键字,一元运算符没有参数,二元运算符只有一个参数,调用该函数的对象是第一操作数。

上面是将运算符重载为成员函数,也可以将运算符重载为友元函数。这时候,一元运算符有一个参数,二元运算符有两个参数,这是因为友元函数不是用对象来调用的,所以这个对象也要算作参数。请看例子:

#include <iostream>
using namespace std;
class L
{
    public:
        L(int x){a=x;}        //构造函数
        L operator +(L &l);    //运算符+重载为成员函数
        friend L operator -(L &l1,L& l2);
        void PrintL(){cout<<"a= "<<endl;}
    private:
        int a;
};
L L::operator +(L &l)    //成员函数,所以要加L::
{
    L l1;
    l1.a= a + l.a; //用对象的数据a与参数对象的数据a之和给l1赋值
    return l1;
}

L operator -(L &l1,L& l2)        /不是成员函数,所以不用加L::
{
    L l3;
    l3.a= l1.a - l2.a;
    return l3;
}
void main()
{
    L l1(5),l2(3);
    L l3=l1+l2;    //运算符+的调用
    L l4=l1-l2;
    l3.PrintL();
    l4.PrintL();
}

输出结果为:

a= 8

a= 2

运算符在这里也是一个函数,有实现的代码,记得关键字operator一定要加上。另外就是调用的时候,参数不再是写在括号中,而直接就用了。注意运算符重载为成员函数和友员函数的区别,主要区别是参数个数。

在右侧代码框中编写程序:重载运算符*和/