我们已经创建了自己的类Array。现在我们想要重载“+”运算符,以便:if:
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”?
实现第一种情况,所以在Array.h文件中就是这样一行:
Array operator+(const int &value); //a+2
在Array.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& I think)。我怎么做壳?壳牌是:
Array int::operator+(const Array &Right){
....
}
对于“2 + a”案件或类似的事情?请告诉我。
答案 0 :(得分:2)
您可以这样做:
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;
}
答案 1 :(得分:1)
您可以将operator +定义为非成员函数,以支持混合模式算法。
Array operator+( const Array &arr1, const Array &arr2 )
然后为要支持混合模式算术的类型提供适当的单个参数构造函数。
答案 2 :(得分:0)
要允许语法Array + int
,您有两个选择:创建operator+
的成员函数重载,其中参数是一个整数,或者创建一个参数为{operator+
的免费Array
分别为{1}}和int
。看起来您已经为成员函数重载正确地完成了它,但为了确保它看起来像这样:
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+()
。