您当前的位置: 首页 >  c++

风间琉璃•

暂无认证

  • 1浏览

    0关注

    337博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C++ 运算符的重载

风间琉璃• 发布时间:2022-10-09 22:39:54 ,浏览量:1

目录

一、原理和机制

二、双目运算符的重载

三、隐式转换

四、单目运算符的重载

五、运算符重载的限制

六、特殊运算符的重载

1.数组对象

2.强转和函数对象

3.指针对象

一、原理和机制

C++中运算符只支持基本数据类型运算,如果需要运算符支持类类型的运算,需要使用C++提供的语法:运算符的重载。

函数原型:返回值 operator运算符(参数列表)

①运算符重载函数也具有自己的返回值类型,函数名字以及参数列表。其返回值类型和参数列表与普通函数类似。

②运算符重载函数名为:关键字operator后面接需要重载的操作符符号。 

运算符的重载本质上是通过函数来实现的,将类类型数据的运算过程写成一个特殊的函数,当该类型的对象遇到这种运算时自动调用该函数来完成运算过程。

实现运算符重载的函数既可以是成员函数,也可以是全局函数。

C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,其目的就是让自定义类型可以像内置类型一样可以直接使用运算符进行操作。

d1 == d2;// 可读性高(书写简单) IsSame(d1, d2);// 可读性差(书写麻烦)

二、双目运算符的重载

①通过成员函数重载(以加法为例)

成员函数加法的重载:
本类类型 operator+(第二操作数)
{
    ...
}
  

双目运算符需要传入两个操作数,第一操作数就是调用该函数的对象,而第二个操作数则以参数列表的形式传入。

②通过全局函数重载(以加法为例)

全局函数加法的重载:
操作数的类型  operator+(第一操作数,第二操作数)
{
    ...
}

 由于这里是在类外使用全局函数访问类中的成员,可能类外重载无法访问类中的成员,可以使用以下方法

1.直接将成员设置为公有(不推荐)

2.使用友元,将全局函数设置为友元函数(推荐)

3.为私有成员提供访问接口

 构造一个类表示分数,实现类分数的基本运算

//分数
class Fraction{
public:
    Fraction(int x=0,int y=1):x(x),y(y){}
    //打印
    void print()
    {
        couty*fb.y/*分母*/);
    }

    //== > +=
    bool operator==(const Fraction &fb)
    {
        return this->x*fb.y == this->y*fb.x;
    }

    bool operator>(const Fraction &fb)
    {
        return this->x*fb.y > this->y*fb.x;
    }

    Fraction& operator+=(const Fraction &fb)
    {
        this->x = this->x*fb.y+fb.x*this->y;
        this->y = this->y*fb.y;

        return *this;
    }

    //友元函数
    friend Fraction operator+(const Fraction &fa, const Fraction &fb);
    friend Fraction operator*(const Fraction &fa, const Fraction &fb);
    friend Fraction operator/(const Fraction &fa, const Fraction &fb);
    friend istream& operator>>(istream &is, Fraction &fb);
    friend ostream& operator(istream &is, Fraction &fb)
{
    return is>>fb.x>>fb.y;
}

ostream& operator            
关注
打赏
1665385461
查看更多评论
0.0395s