C++ 中的重载运算符"+"取决于参数

Overload operator "+" in c++ depending from the parameters

本文关键字:参数 取决于 运算符 重载 C++      更新时间:2023-10-16

让我们考虑一下

我们已经创建了自己的类数组。现在我们要重载"+"运算符,以便:

Array a(5), b(3);
Array c = a + b;

它只是将一个数组和 B 数组粘合在一起,我们得到一个长度为 5+3=8 的 C 数组。

现在,我已经意识到这种情况写在我 Array.cpp 文件中:

Array Array::operator+(const Array &Right)
{
Array temp_A(m_iCurInd+Right.m_iCurInd);
// here some stuff, not important to the quastion// 
return temp_A;
}

一切都很好。

但是,如果我想:

Array a(5);
Array c = a + 2;
Array d = 2 + a;

所以 d 和 c 的长度为 6,开头和结尾分别有"2"?

我试过了

为了实现 firs 案例,所以在 Array.h 文件中是这样一行:

Array operator+(const int &value); //a+2

在数组中.cpp:

Array Array::operator+(const int &value)
{
 Array temp_A(m_iCurInd+1);
 // here some stuff, not important to the quastion//
 return temp_A;
}

但它不编译,因为它不喜欢这些类型(特别是const int和我认为)。我怎么做?壳是:

Array int::operator+(const Array &Right){
....
}

对于"2+A"案例还是类似的东西?请告诉我。

你可以

这样做:

class Array
{
    // ...
    // Insert an Element
    public:
    void prepend(int);
    void append(int);
    // Append an Array
    void append(const Array&);
    // ...
};
inline Array operator + (const Array& a, const Array& b) {
    Array result(a);
    result.append(b);
    return result;
}
inline Array operator + (const Array& a, int b) {
    Array result(a);
    result.append(b);
    return result;
}
inline Array operator + (int a, const Array& b) {
    Array result(b);
    result.prepend(a);
    return result;
}

您可以将 operator+ 定义为非成员函数以支持混合模式算术。

Array operator+( const Array &arr1, const Array &arr2 )

然后为要支持混合模式算术的类型提供适当的单参数构造函数。

若要允许语法Array + int,您有两个选择:创建 operator+ 的成员函数重载,其中它采用的参数是整数,或者创建一个参数分别为 Arrayint 的自由operator+。看起来您已经正确完成了成员函数重载,但为了确保,它应该如下所示:

class Array
{
    // ...
    Array operator+(int rhs)
    {
        // ...
    }
};

现在Array + int应该工作了。如果没有,则说明您在函数中做错了什么。

要允许语法int + Array,您需要一个自由运算符函数,因为成员函数不会重载左侧的int

Array operator+(int lhs, Array const& rhs)
{
    return rhs + lhs;
}

rhs + lhs调用成员函数重载Array::operator+()